温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

zabbix如何监控docker容器状态

发布时间:2021-08-21 11:33:03 来源:亿速云 阅读:832 作者:小新 栏目:服务器

这篇文章主要为大家展示了“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 来检测当前这个容器状态是否运行,如果不是就报警。

模板如下

<?xml version="1.0" encoding="UTF-8"?> <zabbix_export>  <version>3.2</version>  <date>2018-06-04T04:12:36Z</date>  <groups>   <group>    <name>Templates</name>   </group>  </groups>  <templates>   <template>    <template>docker-status</template>    <name>docker-status</name>    <description/>    <groups>     <group>      <name>Templates</name>     </group>    </groups>    <applications>     <application>      <name>docker_test</name>     </application>    </applications>    <items/>    <discovery_rules>     <discovery_rule>      <name>docker.discovery</name>      <type>0</type>      <snmp_community/>      <snmp_oid/>      <key>docker.discovery</key>      <delay>60</delay>      <status>0</status>      <allowed_hosts/>      <snmpv3_contextname/>      <snmpv3_securityname/>      <snmpv3_securitylevel>0</snmpv3_securitylevel>      <snmpv3_authprotocol>0</snmpv3_authprotocol>      <snmpv3_authpassphrase/>      <snmpv3_privprotocol>0</snmpv3_privprotocol>      <snmpv3_privpassphrase/>      <delay_flex/>      <params/>      <ipmi_sensor/>      <authtype>0</authtype>      <username/>      <password/>      <publickey/>      <privatekey/>      <port/>      <filter>       <evaltype>0</evaltype>       <formula/>       <conditions>        <condition>         <macro>{#CONTAINERNAME}</macro>         <value>@ CONTAINER NAME</value>         <operator>8</operator>         <formulaid>A</formulaid>        </condition>       </conditions>      </filter>      <lifetime>30</lifetime>      <description/>      <item_prototypes>       <item_prototype>        <name>Container {#CONTAINERNAME} Diskio usage:</name>        <type>0</type>        <snmp_community/>        <multiplier>0</multiplier>        <snmp_oid/>        <key>docker.[{#CONTAINERNAME} ,BlockIO]</key>        <delay>60</delay>        <history>90</history>        <trends>0</trends>        <status>0</status>        <value_type>1</value_type>        <allowed_hosts/>        <units/>        <delta>0</delta>        <snmpv3_contextname/>        <snmpv3_securityname/>        <snmpv3_securitylevel>0</snmpv3_securitylevel>        <snmpv3_authprotocol>0</snmpv3_authprotocol>        <snmpv3_authpassphrase/>        <snmpv3_privprotocol>0</snmpv3_privprotocol>        <snmpv3_privpassphrase/>        <formula>1</formula>        <delay_flex/>        <params/>        <ipmi_sensor/>        <data_type>0</data_type>        <authtype>0</authtype>        <username/>        <password/>        <publickey/>        <privatekey/>        <port/>        <description/>        <inventory_link>0</inventory_link>        <applications>         <application>          <name>docker_test</name>         </application>        </applications>        <valuemap/>        <logtimefmt/>        <application_prototypes/>       </item_prototype>       <item_prototype>        <name>Container{#CONTAINERNAME} CPU usage:</name>        <type>0</type>        <snmp_community/>        <multiplier>0</multiplier>        <snmp_oid/>        <key>docker.[{#CONTAINERNAME},CPUPerc]</key>        <delay>60</delay>        <history>90</history>        <trends>365</trends>        <status>0</status>        <value_type>0</value_type>        <allowed_hosts/>        <units>%</units>        <delta>0</delta>        <snmpv3_contextname/>        <snmpv3_securityname/>        <snmpv3_securitylevel>0</snmpv3_securitylevel>        <snmpv3_authprotocol>0</snmpv3_authprotocol>        <snmpv3_authpassphrase/>        <snmpv3_privprotocol>0</snmpv3_privprotocol>        <snmpv3_privpassphrase/>        <formula>1</formula>        <delay_flex/>        <params/>        <ipmi_sensor/>        <data_type>0</data_type>        <authtype>0</authtype>        <username/>        <password/>        <publickey/>        <privatekey/>        <port/>        <description/>        <inventory_link>0</inventory_link>        <applications>         <application>          <name>docker_test</name>         </application>        </applications>        <valuemap/>        <logtimefmt/>        <application_prototypes/>       </item_prototype>       <item_prototype>        <name>Container {#CONTAINERNAME} mem usage:</name>        <type>0</type>        <snmp_community/>        <multiplier>0</multiplier>        <snmp_oid/>        <key>docker.[{#CONTAINERNAME},MemPerc]</key>        <delay>60</delay>        <history>90</history>        <trends>365</trends>        <status>0</status>        <value_type>0</value_type>        <allowed_hosts/>        <units>%</units>        <delta>0</delta>        <snmpv3_contextname/>        <snmpv3_securityname/>        <snmpv3_securitylevel>0</snmpv3_securitylevel>        <snmpv3_authprotocol>0</snmpv3_authprotocol>        <snmpv3_authpassphrase/>        <snmpv3_privprotocol>0</snmpv3_privprotocol>        <snmpv3_privpassphrase/>        <formula>1</formula>        <delay_flex/>        <params/>        <ipmi_sensor/>        <data_type>0</data_type>        <authtype>0</authtype>        <username/>        <password/>        <publickey/>        <privatekey/>        <port/>        <description/>        <inventory_link>0</inventory_link>        <applications>         <application>          <name>docker_test</name>         </application>        </applications>        <valuemap/>        <logtimefmt/>        <application_prototypes/>       </item_prototype>       <item_prototype>        <name>Container {#CONTAINERNAME} NETio usage:</name>        <type>0</type>        <snmp_community/>        <multiplier>0</multiplier>        <snmp_oid/>        <key>docker.[{#CONTAINERNAME},NetIO]</key>        <delay>60</delay>        <history>90</history>        <trends>0</trends>        <status>0</status>        <value_type>1</value_type>        <allowed_hosts/>        <units/>        <delta>0</delta>        <snmpv3_contextname/>        <snmpv3_securityname/>        <snmpv3_securitylevel>0</snmpv3_securitylevel>        <snmpv3_authprotocol>0</snmpv3_authprotocol>        <snmpv3_authpassphrase/>        <snmpv3_privprotocol>0</snmpv3_privprotocol>        <snmpv3_privpassphrase/>        <formula>1</formula>        <delay_flex/>        <params/>        <ipmi_sensor/>        <data_type>0</data_type>        <authtype>0</authtype>        <username/>        <password/>        <publickey/>        <privatekey/>        <port/>        <description/>        <inventory_link>0</inventory_link>        <applications>         <application>          <name>docker_test</name>         </application>        </applications>        <valuemap/>        <logtimefmt/>        <application_prototypes/>       </item_prototype>       <item_prototype>        <name>Container{#CONTAINERNAME} is_run :</name>        <type>0</type>        <snmp_community/>        <multiplier>0</multiplier>        <snmp_oid/>        <key>docker.[{#CONTAINERNAME} ,ping]</key>        <delay>30</delay>        <history>90</history>        <trends>365</trends>        <status>0</status>        <value_type>3</value_type>        <allowed_hosts/>        <units/>        <delta>0</delta>        <snmpv3_contextname/>        <snmpv3_securityname/>        <snmpv3_securitylevel>0</snmpv3_securitylevel>        <snmpv3_authprotocol>0</snmpv3_authprotocol>        <snmpv3_authpassphrase/>        <snmpv3_privprotocol>0</snmpv3_privprotocol>        <snmpv3_privpassphrase/>        <formula>1</formula>        <delay_flex/>        <params/>        <ipmi_sensor/>        <data_type>0</data_type>        <authtype>0</authtype>        <username/>        <password/>        <publickey/>        <privatekey/>        <port/>        <description/>        <inventory_link>0</inventory_link>        <applications>         <application>          <name>docker_test</name>         </application>        </applications>        <valuemap/>        <logtimefmt/>        <application_prototypes/>       </item_prototype>      </item_prototypes>      <trigger_prototypes>       <trigger_prototype>        <expression>{docker-status:docker.[{#CONTAINERNAME} ,ping].last()}=0</expression>        <recovery_mode>0</recovery_mode>        <recovery_expression/>        <name>docker_{#CONTAINERNAME}_down</name>        <correlation_mode>0</correlation_mode>        <correlation_tag/>        <url/>        <status>0</status>        <priority>5</priority>        <description/>        <type>0</type>        <manual_close>0</manual_close>        <dependencies/>        <tags/>       </trigger_prototype>      </trigger_prototypes>      <graph_prototypes/>      <host_prototypes/>     </discovery_rule>    </discovery_rules>    <httptests/>    <macros/>    <templates/>    <screens/>   </template>  </templates> </zabbix_export>

修改Zabbix_agentd 配置,docker.py脚本放在指定路径下,不要忘了给权限,导入模板,能获取数据就没问题。获取不了的,可以zabbix_get 来调试 找到问题出在哪去解决。

以上是“zabbix如何监控docker容器状态”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI