zabbix 自动发现

zabbix自动发现

首先,介绍下该监控套件有2个脚本,一个是自动发现主机上的docker容器名字脚本,另一个是用python写的获取每个docker容器的系统状态,包括CPU使用率,内存使用率等使用率。

1.写监控脚本套件,放在/etc/zabbix/scripts/下:

  • docker_project_automatic.py 用于发现docker容器名
          
    #!/usr/bin/python
    # 获取容器名
    import json,os,sys
    docker_pro_list = os.popen("docker ps -a|grep -v 'CONTAINER ID'|awk '{print $NF}'").read().split()
    data = {}
    data_pro_dic = []
    for docker_pro in docker_pro_list:
          data_pro_name = {}
          data_pro_name['{#CONTAINERNAME}']= docker_pro
          data_pro_dic.append(data_pro_name)
    
    data['data'] = data_pro_dic
    data_json = json.dumps(data,sort_keys=True,indent=4)
    
    print data_json
          

zabbix 自动获取,zabbix要求json格式,格式如下:

{
    "data": [
        {
            "{#CONTAINERNAME}": "xxxxxxxxx"
        }
    ]
}

  • docker_status.py 用于获取CPU、内存使用率
#!/usr/bin/python

import os,sys
pro_dic = []
cpu_total = 0
mem_total = 0
docker_data = os.popen("docker stats --no-stream").read().replace("/","").replace("%","")

docker_value= docker_data.split()[13:]

for index,value in enumerate(docker_value):
    if index % 11 ==1 and "portainer" not in docker_value[index]:
        
        pro_dic_docker = []
        pro_dic_docker.append(docker_value[index])
        pro_dic_docker.append(float(docker_value[index+1]))
        pro_memory = round(float(docker_value[index+4])/100*15.518*1024,2)  
                pro_dic_docker.append(pro_memory)


        pro_dic.append(pro_dic_docker)

if len(sys.argv) > 1:
    if  sys.argv[1]=="cpu":
        if sys.argv[2]  =="total":
            for pro_docker_list in  pro_dic:
                cpu_total += pro_docker_list[1]     
            print cpu_total 
        for pro_docker_list in  pro_dic:
            if  sys.argv[2]  in pro_docker_list:
                print pro_docker_list[1]
    elif    sys.argv[1]=="mem":
                if sys.argv[2]  =="total":
                        for pro_docker_list in  pro_dic:
                                mem_total += pro_docker_list[2]
                        print mem_total


                for pro_docker_list in  pro_dic:
                        if  sys.argv[2]  in pro_docker_list:
                                print pro_docker_list[2]

    else:
        print "[mem/cpu]"
else :
    print "[mem/cpu] [项目名/mem_total/cpu_total]"

#执行脚本
chmod +x docker_status.py   #赋执行权限
python docker_status.py [cpu/mem] [项目名/mem_total/cpu_total]  #执行命令

如 :python docker_status.py mem mem_total  #获取服务器docker容器内存总共使用量


2.编写zabbix conf文件,路径为/etc/zabbix/zabbix_agentd.d/

  • docker_project_automatic.conf
UserParameter=docker_discovery[*],/usr/bin/python /etc/zabbix/scripts/docker_project_automatic.py
UserParameter=docker_stats[*],/usr/bin/python /etc/zabbix/scripts/docker_status.py $1 $2 

重启zabbix客户端,systemctl restart zabbix-agent


3.测试

zabbix_get -s 127.0.0.1 -p 10050 -k docker_discovery[*]
#测试docker_project_automatic.py自动发现脚本是否获取到值
zabbix_get -s 127.0.0.1 -p 10050 -k docker_stats[cpu,项目名]
#测试docker_status.py是否获取到值 


4.zabbix网页配置

我这里为了方便,没有新建模板,用了系统自带的Template OS Linux模板,而且每台主机都应用了此模板。
以下为梳理的结构:

  • 自动发现
    • 添加自动发现
    • 检查自动发现是否正常
  • 配置监控
    • 添加监控项原型
    • 添加图形原型
    • 查看成果
zabbix 自动发现_第1张图片
  • 然后点击右上角的创建发现规则


    zabbix 自动发现_第2张图片

    zabbix 自动发现_第3张图片
  • 到此自动发现规则已经配置完成

zabbix 自动发现_第4张图片
  • 点击应用的主机里面的自动发现


    zabbix 自动发现_第5张图片
  • 当无感叹号时,说明自动发现规则正常
zabbix 自动发现_第6张图片
  • 我们再次回到模板中的自动发现。
    ps:模板中的自动发现,与主机里的自动发现不一样
zabbix 自动发现_第7张图片

zabbix 自动发现_第8张图片
zabbix 自动发现_第9张图片
zabbix 自动发现_第10张图片
解决单位转换问题
名称:container_mem:{#CONTAINERNAME}       
{#CONTAINERNAME} 为自动发现中的宏的名字
键值:docker_stats[mem,{#CONTAINERNAME}]
mem,{#CONTAINERNAME} 为两个参数传值到脚本中的$1,$2
信息类型:浮点数
脚本中会涉及到小说,所以这里用了浮点数
单位:B
    单位的话,这里建议使用B,因为这个涉及到图形上单位转换的问题,如果你直接使用MB单位的话,图形上涉及1000以上的,
会出现单位kMB,脚本中数据的单位为MB,因此,在进程中,添加预定步骤,自定义倍数,1MB=1048576B.
  • 添加完监控原型后,我们来添加图形原型,然后创建图形原型


    zabbix 自动发现_第11张图片
zabbix 自动发现_第12张图片
  • 到此监控图添加完毕,我们去看一下,被监控的主机
zabbix 自动发现_第13张图片

你可能感兴趣的:(zabbix 自动发现)