本文从开始到监控docker容器状态分为三部分
1.查看自己的环境变量以及自己的服务路径
(1)jdk环境: jdk1.8
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示
(2)zabbix版本:zabbix3.4.5
(3)zabbix脚本存放路径:/data/zabbix/scripts/
( 4 ) .conf文件存放路径:/data/zabbix/etc/zabbix_agentd.conf.d/

2.配置脚本、key、模板
首选,zabbix_agentd 配置 vim/data/zabbix/etc/zabbix_agentd.conf.d/docker.conf

UserParameter=docker.discovery,/data/zabbix/scripts/docker.py
UserParameter=docker.[*],/data/zabbix/script/docker.py $1 $2

下面是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()

这里说一下自动发现规则的坑。。。我被坑了好久才找出来.....一是必须返回json格式内容,二是 info['{#CONTAINERNAME}' ] 这个key一定要这么写{#CONTAINERNAME}
返回结果如下,一定要是这样的层级关系

{"data": [{"{#CONTAINERNAME}": "node-3"}, {"{#CONTAINERNAME}": "node-2"}, {"{#CONTAINERNAME}": "node-1"}, {"{#CONTAINERNAME}": "web"}, {"{#CONTAINERNAME}": "cadvisor"}, {"{#CONTAINERNAME}": "updatol"}, {"{#CONTAINERNAME}": "research"}, {"{#CONTAINERNAME}": "services"}, {"{#CONTAINERNAME}": "data"}, {"{#CONTAINERNAME}": "rabbitmq"}, {"{#CONTAINERNAME}": "redis"}, {"{#CONTAINERNAME}": "mysql"}, {"{#CONTAINERNAME}": "ssdb"}]}

另外那个函数的很简单了,就是调用docker 命令在获取数据的。
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示

然后导入模板:
模板如下:



3.2
2018-06-04T04:12:36Z


Templates





~~

模板下载链接:https://pan.baidu.com/share/init?surl=18Z9QIkSuLQ3sSPqSlbY2A 密码:3544
3.web端操作
导入模板后
可能有的人在这导入模板后会出现这个问题:
zabbixGlobal regular expression " CONTAINER NAME" does not exist.
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示
出现这个问题,证明:问题不大。
去这个地方把这个去掉

zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示_第1张图片
如果你要了解这个时什么意思:请参考官网:zabbix正则表达式写法,大体意思如下:
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示_第2张图片
去管理 、一般,里边点开正则
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示_第3张图片
自己先去了解这个怎么用,去添加就好了
接下来我们看一下模板中都监控了什么
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示_第4张图片
触发器有一个
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示_第5张图片
都没问题之后我们看一下最新数据
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示_第6张图片
我们看到了各个容器状态已经添加上去了,
到此结束,你可以向你领导交差了。

以上内容,如有问题 随时沟通
QQ: 936172842