一,准备好zabbix服务器一台,被监控机器一台,被监控机器上安装好zabbix_agentd和docker服务。
我这里docker机器的ip为192.168.4.10,hostname为docker。(我安装的zabbix版本为3.4.4,docker版本:docker-ce 18.06.1)
二,修改docker机器上zabbix_agentd.conf 中的配置如下:
# vim /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=docker.discovery,/usr/local/zabbix/script/docker.py
UserParameter=docker.[*],/usr/local/zabbix/script/docker.py $1 $2
三,将以下代码写进/usr/local/zabbix/script/docker.py,并给脚本添加权限
# vim /usr/local/zabbix/script/docker.py
# chmod 777 /usr/local/zabbix/script/docker.py
#!/usr/bin/python
import sys
import os
import json
def discover():
d = {}
d['data'] = []
with os.popen("sudo docker ps -a --format {
{.Names}}") as pipe:
for line in pipe:
info = {}
info['{#CONTAINERNAME}'] = line.replace("\n","")
d['data'].append(info)
print json.dumps(d)
def status(name,action):
if action == "ping":
cmd = 'sudo docker inspect --format="{
{.State.Running}}" %s' %name
result = os.popen(cmd).read().replace("\n","")
if result == "true":
print 1
else:
print 0
else:
cmd = 'sudo docker stats %s --no-stream --format "{
{.%s}}"' % (name,action)
result = os.popen(cmd).read().replace("\n","")
if "%" in result:
print float(result.replace("%",""))
else:
print result
if __name__ == '__main__':
try:
name, action = sys.argv[1], sys.argv[2]
status(name,action)
except IndexError:
discover()
四,执行命令visudo添加如下内容:
zabbix ALL=(ALL) NOPASSWD:/usr/bin/docker
# python /usr/local/zabbix/script/docker.py 测试下脚本能否正常执行,正常应能获取docker中的容器,结果为json格式
配置好以上的可以先重启下zabbix_agentd
通过zabbix_get命令测试下key是否能成功执行
# zabbix_get -s 127.0.0.1 -k 'docker.[nginx,CPUPerc]'
到这里,zabbix_agent端就配好了,接下来在zabbix管理页面添加模板和监控项。
五,页面配置
先添加相应的docker主机
创建新的模板
添加应用集
添加自动发现规则
添加新的监控项原型
添加cpu和mem两个监控原型
将docker主机链接到新的模板
过一会儿在最新数据里应该就能看见监控到的数据了