这篇文章主要为大家展示了“zabbix如何监控docker容器状态”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“zabbix如何监控docker容器状态”这篇文章吧。
专注于为中小企业提供网站设计制作、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业宝丰免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
首选,zabbix_agentd 配置 vim /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=docker.discovery,/usr/local/zabbix/script/docker.py UserParameter=docker.[*],/usr/local/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 命令在获取数据的。
自动发现规则呢 也就是这样
只监控的这几个状态,以及还有一个触发器就是ping 来检测当前这个容器状态是否运行,如果不是就报警。
模板如下
3.2 2018-06-04T04:12:36Z Templates docker-status docker-status Templates docker_test docker.discovery 0 docker.discovery 60 0 0 0 0 0 0 {#CONTAINERNAME} @ CONTAINER NAME 8 A 30 Container {#CONTAINERNAME} Diskio usage: 0 0 docker.[{#CONTAINERNAME} ,BlockIO] 60 90 0 0 1 0 0 0 0 1 0 0 0 docker_test Container{#CONTAINERNAME} CPU usage: 0 0 docker.[{#CONTAINERNAME},CPUPerc] 60 90 365 0 0 % 0 0 0 0 1 0 0 0 docker_test Container {#CONTAINERNAME} mem usage: 0 0 docker.[{#CONTAINERNAME},MemPerc] 60 90 365 0 0 % 0 0 0 0 1 0 0 0 docker_test Container {#CONTAINERNAME} NETio usage: 0 0 docker.[{#CONTAINERNAME},NetIO] 60 90 0 0 1 0 0 0 0 1 0 0 0 docker_test Container{#CONTAINERNAME} is_run : 0 0 docker.[{#CONTAINERNAME} ,ping] 30 90 365 0 3 0 0 0 0 1 0 0 0 docker_test {docker-status:docker.[{#CONTAINERNAME} ,ping].last()}=0 0 docker_{#CONTAINERNAME}_down 0 0 5 0 0
修改Zabbix_agentd 配置,docker.py脚本放在指定路径下,不要忘了给权限,导入模板,能获取数据就没问题。获取不了的,可以zabbix_get 来调试 找到问题出在哪去解决。
以上是“zabbix如何监控docker容器状态”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!