【Zabbix监控教程】LLD低级别自动发现配置教程
低级别自动发现简称LLD,使用低级别自动发现可以实现根据Agent的实际情况去自动创建监控项,适用于配置不一的环境。比如A主机有3块硬盘,B主机有5块硬盘,如果不使用LLD的话就需要人肉去为每个硬盘创建监控项。而有了LLD就可以实现自动创建每个硬盘的监控。
本文以监控多实例MySQL为例进行Zabbix低级别自动发现配置:
1、创建获取每个MySQL实例端口的脚本。该脚本返回的数据必须是JSON格式,而且返回值需要设置为低级别发现宏的格式,如{#MYSQLPORT}:
vi /usr/local/shell/discovery_mysql.sh #!/bin/bash mysql() { port=($(sudo netstat -tpln | awk -F "[ :]+" '/[m]ysql/' | awk -F: '{print $4}')) printf '{\n' printf '\t"data":[\n' for key in ${!port[@]} do if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1` printf '\t {\n' printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n" else [[ "${key}" -eq "((${#port[@]}-1))" ]] socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1` printf '\t {\n' printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n" fi done printf '\t ]\n' printf '}\n' } $1 #脚本运行结果 { "data":[ { "{#MYSQLPORT}":"3306"}, { "{#MYSQLPORT}":"3307"}, { "{#MYSQLPORT}":"3310"}, { "{#MYSQLPORT}":"3311"} ] }
2、创建两个自定义key,第一个key就是使用上面的脚本来获取MySQL多实例的端口信息,并传给低级别发现宏。另一个脚本是用来获取数据库状态。在后面设置中需要结合2个key来获取每个实例的数据。
UserParameter=discovery_mysql[*],/usr/local/shell/discovery_mysql.sh $1 UserParameter=mysql_status[*],mysql -uroot -p123456 -P $1 -e "show global status"|grep "\<$2\>"|cut -f2
3、在模板中创建自动发现规则,点击Discovery rules-->Create discovery rule
4、在创建规则页面填写规则名称和key,key一栏要写的名字需要和第2步中UserParameter定义的一致,比如discovery_mysql,这样Zabbix运行这个脚本时就会把运行结果赋值给宏。filter选项卡如果不需要进行过滤的话不用配置。
5、为低级别发现规则创建Item prototypes(监控原形)。这里创建出来的key就会对每个发现出来的MySQL实例生效,比如创建了一个监控MySQL服务是否挂掉的key,这个key会生效于第4步中发现出来的所有端口。
6、最后使用2个key的组合来获取数据。这里的Com_begin就是上面第二个key的$2
7、使用zabbix_get命令查询是否能正常监控各个端口
zabbix_get -s 192.168.1.100 -k mysql.status[3306,Com_begin] #取3306端口 zabbix_get -s 192.168.1.100 -k mysql.status[3307,Com_begin] #取3307端口
评论