zabbix通过脚本监控docker容器

一,准备好zabbix服务器一台,被监控机器一台,被监控机器上安装好zabbix_agentd和docker服务。

我这里docker机器的ip为192.168.4.10,hostname为docker。(我安装的zabbix版本为3.4.4,docker版本:docker-ce 18.06.1)

二,修改docker机器上zabbix_agentd.conf 中的配置如下:

# vim /usr/local/etc/zabbix_agentd.conf

       UnsafeUserParameters=1

       UserParameter=docker.discovery,/usr/local/zabbix/script/docker.py

       UserParameter=docker.[*],/usr/local/zabbix/script/docker.py $1 $2

三,将以下代码写进/usr/local/zabbix/script/docker.py,并给脚本添加权限

        #  vim /usr/local/zabbix/script/docker.py

        # chmod 777 /usr/local/zabbix/script/docker.py

#!/usr/bin/python
import sys
import os
import json


def discover():
    d = {}
    d['data'] = []
    with os.popen("sudo 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 = 'sudo docker inspect --format="{
   
   {.State.Running}}" %s' %name
        result = os.popen(cmd).read().replace("\n","")
        if result == "true":
            print 1
        else:
            print 0
    else:
        cmd = 'sudo 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()

四,执行命令visudo添加如下内容:

zabbix ALL=(ALL) NOPASSWD:/usr/bin/docker

      # python /usr/local/zabbix/script/docker.py 测试下脚本能否正常执行,正常应能获取docker中的容器,结果为json格式

配置好以上的可以先重启下zabbix_agentd

通过zabbix_get命令测试下key是否能成功执行

# zabbix_get -s 127.0.0.1 -k 'docker.[nginx,CPUPerc]'

到这里,zabbix_agent端就配好了,接下来在zabbix管理页面添加模板和监控项。

五,页面配置

先添加相应的docker主机

创建新的模板

添加应用集

添加自动发现规则

添加新的监控项原型

添加cpu和mem两个监控原型

将docker主机链接到新的模板

过一会儿在最新数据里应该就能看见监控到的数据了

猜你喜欢

转载自blog.csdn.net/weixin_42182501/article/details/114641062