docker是一个进程,所以即使拉取的centos镜像也不应该在安装docker服务,所以这里监控的是宿主机上的所有docker进程
先在物理机上安装zabbix仓库
rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
yum安装agent
yum -y install zabbix-agent
修改配置文件让zabbix_server监控到
vim /etc/zabbix/zabbix_agentd.conf
#先备份原始的
Server=172.17.0.2 ---zabbix_server 的ip地址
ServerActive=172.17.0.2 ---客户端主动提交信息 和上面的保持一致
Hostname=localhost ---客户端的主机名,宿主机的主机名
将zabbix用户加入到docker组里面 使得zabbix服务可以执行docker命令
gpasswd -a zabbix docker
启动agent服务
systemctl start zabbix_agent
在web服务端里添加物理机主机
添加主机到配置中
添加python脚本(python2版) 这里路径是/opt/zabbix/docker.py
#!/usr/bin/python
import sys
import os
import json
def discover():
d = {}
d['data'] = []
with os.popen("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 = 'docker inspect --format="{{.State.Running}}" %s' %name
result = os.popen(cmd).read().replace("\n","")
if result == "true":
print 1
else:
print 0
else:
cmd = '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()
修改脚本权限 获得执行权限
chmod 755 /opt/zabbix/docker.py
[root@localhost zabbix]# ll docker.py
-rwxr-xr-x 1 root root 846 11月 30 17:11 docker.py
添加自定义键值 /etc/zabbix/zabbix_agentd.d
###docker
UserParameter=docker.discovery, python /opt/zabbix/docker.py
UserParameter=docker.[*], python /opt/zabbix/docker.py $1 $2
重启zabbix_agent
systemctl restart zabbix_agent
使用服务端进行测试
/etc/zabbix # zabbix_get -s 10.0.122.178 -p 10050 -k docker.[centos-zabbix-agent,ping]
1
表示这个容器是存活的
/etc/zabbix # zabbix_get -s 10.0.122.178 -p 10050 -k docker.[centos-zabbix-agent,BlockIO]
609MB / 45.8MB
测试成功
这样就可以去web端进行测试
首先要导入docker模板
image.png
主机链接模板
链接模板
查看主机列表
查看自动发现
使用自定义键值对创建监控项
创建监控项
查看最新数据
image.png
监测到cpu的数据
image.png
最终展示图形
image.png