PS:
以下操作都在zabbix_agent上操作
- 创建python脚本
自动发现规则来发现容器,然后指定容器获取状态信息
创建目录放置脚本
1 mkdir ‐p /data/zabbix/zabbix4.2/scripts
2 vim scripts/docker.py
3 #!/usr/bin/python
4 import sys
5 import os
6 import json
7
8 def discover():
9 d = {}
10 d['data'] = []
11 with os.popen("docker ps ‐a ‐‐format {{.Names}}") as pipe:
12 for line in pipe:
13 info = {}
14 info['{#CONTAINERNAME}'] = line.replace("\n","")
15 d['data'].append(info)
16
17 print json.dumps(d)
18
19 def status(name,action):
20 if action == "ping":
21 cmd = 'docker inspect ‐‐format="{{.State.Running}}" %s' %name
22 result = os.popen(cmd).read().replace("\n","")
23 if result == "true":
24 print 1
25 else:
26 print 0
27 else:
28 cmd = 'docker stats %s ‐‐no‐stream ‐‐format "{{.%s}}"' % (name,action)
29 result = os.popen(cmd).read().replace("\n","")
30 if "%" in result:
31 print float(result.replace("%",""))
32 else:
33 print result
34
35
36 if __name__ == '__main__':
37 try:
38 name, action = sys.argv[1], sys.argv[2]
39 status(name,action)
40 except IndexError:
41 discover()
- 创建KEY配置文件
key配置文件放置zabbix_agentd.conf.d目录下
1 vim /data/zabbix/zabbix4.2/etc/zabbix_agentd.conf.d/docker.conf
2 UserParameter=docker.discovery,/data/zabbix/zabbix4.2/scripts/docker.py
3 UserParameter=docker.[*],/data/zabbix/zabbix4.2/scripts/docker.py $1 $2
- 修改配置文件
开启KEY配置文件
1 vim /data/zabbix/zabbix4.2/etc/zabbix_agentd.conf
2 Include=/data/zabbix/zabbix4.2/etc/zabbix_agentd.conf.d/*.conf
- 进行本地测试
zabbix服务端测试
#查看容器为hpv的CPU使用率
1 /data/zabbix/zabbix/zabbix4.2/bin/zabbix_get ‐s 192.168.10.1 ‐k docker.[h
pv,CPUPerc]
#查看发现的容器
1 [root@centos6 zabbix4.2]# bin/zabbix_get ‐s 192.168.10.1 ‐k docker.discov
ery
2 {"data": [{"{#CONTAINERNAME}": "nexus"}, {"{#CONTAINERNAME}":
"recording"}, {"{#CONTAINERNAME}": "gitlab"}, {"{#CONTAINERNAME}": "hpv"}]}
#问题1
1 WARNING: Error loading config file: /root/.docker/config.json: stat /roo
t/.docker/config.json: permission denied
这是因为zabbix用户没有权限,而且根本也找不到/root/.docker/config.json
这个目录,所以修改zabbix_agent配置文件,允许agent以 root用户运行
1 vim /data/zabbix/zabbix4.2/etc/zabbix_agentd.conf
2 AllowRoot=1 # 0表示不允许,1表示允许,默认值为0
#问题2
1 get …… dial unix /var/run/docker.sock
因为docker权限问题
1 chmod ‐v a+rw /var/run/docker.sock
- 上传模板
上传docker监控模板,让有容器的服务器关联模板
服务器关联模板,会出现zabbixGlobal regular expression " CONTAINER
NAME" does not exist,无法支持
解决办法为清空模板自动发现的过滤器 - 后期根据自己的需要修改监控项和触发器
评论区