文章目录
一、简介
1、什么叫低级自动发现DDL?
我们都知道zabbix可以通过写脚本来监控一切自己想要监控的东西,但当你想要监控项是灵活的会自增自减时,就可以使用低级自动发现解决这个问题。
例如:可以自动发现你有几块网卡相对应的网卡名称,此文档是已监控docker容器为例子,可以监控自增的docker容器。
2、实现原理及其流程
-
实现原理:
-
首先需要一个脚本来获取需监控的变量
-
写一个脚本来获取变量名称
-
创建一个 自动发现规则 来获取变量名称(操作跟新增脚本监控项一致)。
-
再监控项内使用这种格式 {#DOCKERNAME} 的变量名称。
二、获取变量名称
1、设置获取变量名脚本
以获取docker容器名称为例子,参考一下shell脚本:
#!/bin/bash
name=($(sudo docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'))
printf '{'
printf '"data":['
for key in ${!name[@]}
do
if [[ "${#name[@]}" -gt 1 && "${key}" -ne "$((${#name[@]}-1))" ]];then
printf '{'
printf "\"{#DOCKERNAME}\":\"${name[${key}]}\"},"
else [[ "${key}" -eq "((${#name[@]}-1))" ]]
printf '{'
printf "\"{#DOCKERNAME}\":\"${name[${key}]}\"}"
fi
done
printf ']'
printf '}\n'
docker 容器的状态:
运行脚本获得的参数:
[root@zabbix-server1 ~]# ./docker_discovery2.sh
{"data":[{"{#DOCKERNAME}":"pedantic_faraday"},{"{#DOCKERNAME}":"objective_payne"},{"{#DOCKERNAME}":"crazy_clarke"},{"{#DOCKERNAME}":"sharp_snyder"}]}
注释:此脚本使用awk剪切docker容器的名称,再以字典的形式输出,必须要以这种格式 {“data”:[{"{#DOCKERNAME}":“变量”}]}
2、添加监控key
添加监控值:
[root@zabbix-server1 ~]# vi /etc/zabbix/zabbix_agentd.d/docker.conf
UserParameter=docker.discovery,sh /etc/zabbix/scripts/discover.sh
测试取值
注意:确保zabbix可以运行此脚本,可以使用 su -s 来测试,运行docker命令想要加入docker组,这里我加入了sudo 权限给zabbix。
[root@zabbix-server1 ~]# vi /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=NOPASSWD: ALL
[root@zabbix-server1 ~]# su -s '/bin/bash' -c "/etc/zabbix/scripts/discover.sh" zabbix
此命令是使用zabbix用户来运行次脚本的意思。
使用zabbix_get 测试是否取值成功
[root@zabbix-server1 ~]# zabbix_get -s 192.168.2.66 -k docker.discovery
{"data":[{"{#DOCKERNAME}":"priceless_snyder"},{"{#DOCKERNAME}":"heuristic_jones"},{"{#DOCKERNAME}":"pedantic_faraday"},{"{#DOCKERNAME}":"objective_payne"},{"{#DOCKERNAME}":"crazy_clarke"},{"{#DOCKERNAME}":"sharp_snyder"}]}
3、添加自动发现规则
为什么添加自动发现规则?
因为这个自动发现规则会生成变量,可以在后面使用到。
三、添加监控项
1、添加监控项
到这一步才是真正的添加你想要的监控项
获取docker的状态:
[root@zabbix-server1 zabbix_agentd.d]# vi /etc/zabbix/zabbix_agentd.d/docker.conf
UserParameter=docker-status[*],sudo docker inspect $1|grep Status|cut -d'"' -f 4
#测试一下获取数据
[root@zabbix-server1 zabbix_agentd.d]# zabbix_get -s 192.168.2.1 -k docker-status["docker_name"]
2、设置监控项原型
测试:
成功后的截图:
在启动一个docker:
监控自动添加:
至此教学全部完毕,操作还是比较简单的,可以通过这种方法实现监控项的自动发现