zabbix监控docker容器状态【推荐】
前言:前段时间在部署zabbix,有个需求就是需要监控容器的状态也就是cpu内存io的占用,于是就自己写了一个脚本,以及模板,在这里分享一下嘿嘿:)
废话我也就不多说,直接开始
首选,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 importsys importos importjson defdiscover(): d={} d['data']=[] withos.popen("dockerps-a--format{{.Names}}")aspipe: forlineinpipe: info={} info['{#CONTAINERNAME}']=line.replace("\n","") d['data'].append(info) printjson.dumps(d) defstatus(name,action): ifaction=="ping": cmd='dockerinspect--format="{{.State.Running}}"%s'%name result=os.popen(cmd).read().replace("\n","") ifresult=="true": print1 else: print0 else: cmd='dockerstats%s--no-stream--format"{{.%s}}"'%(name,action) result=os.popen(cmd).read().replace("\n","") if"%"inresult: printfloat(result.replace("%","")) else: printresult if__name__=='__main__': try: name,action=sys.argv[1],sys.argv[2] status(name,action) exceptIndexError: 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} @CONTAINERNAME 8 A 30 Container{#CONTAINERNAME}Diskiousage: 0 0 docker.[{#CONTAINERNAME},BlockIO] 60 90 0 0 1 0 0 0 0 1 0 0 0 docker_test Container{#CONTAINERNAME}CPUusage: 0 0 docker.[{#CONTAINERNAME},CPUPerc] 60 90 365 0 0 % 0 0 0 0 1 0 0 0 docker_test Container{#CONTAINERNAME}memusage: 0 0 docker.[{#CONTAINERNAME},MemPerc] 60 90 365 0 0 % 0 0 0 0 1 0 0 0 docker_test Container{#CONTAINERNAME}NETiousage: 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容器状态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!