【Zabbix监控教程】LLD低级别自动发现配置教程

Tanglu Zabbix 2019-05-21 16581 0

低级别自动发现简称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

lld1.png



4、在创建规则页面填写规则名称和key,key一栏要写的名字需要和第2步中UserParameter定义的一致,比如discovery_mysql,这样Zabbix运行这个脚本时就会把运行结果赋值给宏。filter选项卡如果不需要进行过滤的话不用配置。

lld2.png


5、为低级别发现规则创建Item prototypes(监控原形)。这里创建出来的key就会对每个发现出来的MySQL实例生效,比如创建了一个监控MySQL服务是否挂掉的key,这个key会生效于第4步中发现出来的所有端口。

lld3.png


6、最后使用2个key的组合来获取数据。这里的Com_begin就是上面第二个key的$2

lld.png


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端口


评论