前言:由于Zabbix提供的项目和模板有限,有时我们需要自定义监控项,下面以监控磁盘I/O使用率为例,创建自动发现规则,并配置图形。
(1)Zabbix_agentd端自动发现脚本,zabbix要求返回的数据为json格式。
自动发现磁盘,这里有sd和md开头的,根据需求修改脚本去过滤出磁盘:
运行:/usr/local/etc/disk_io_check.sh disk_count
脚本摘自网络,可自行修改,或用其他语言编写也可以。
# vim /usr/local/etc/disk_io_check.sh #!/bin/sh #disk_io monitor disk=$2 function disk_count { diskarray=(`cat /proc/diskstats | grep -E "\b[s|m]d[a-z|0]\b| \ \bxvd[a-z]\b|cciss/c[0-9]d[0-9]\b" | grep -i "\b$1\b" \ |awk '{print $3}' | sort|uniq 2>/dev/null`) length=${#diskarray[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length;i++));do printf '\n\t\t{' printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n" } function qps { qps=$(iostat $disk -x 1 2 | grep -E "^sd|^cciss|md" | awk '{if(NR==2)print $NF}') echo $qps } $1 exit 0
(2)采集数据脚本:
也是上面的脚本/usr/local/etc/disk_io_check.sh qps
(3)配置zabbix_agentd.conf
# cat /etc/zabbix/zabbix_agentd.d/disk_io.conf UserParameter=iostat.count,/usr/local/etc/disk_io_check.sh disk_count UserParameter=iostat.util[*],/usr/local/etc/disk_io_check.sh qps $1
(4)重启zabbix_agentd
killall zabbix_agentd;./zabbix_agentd
(5)Zabbix_server端测试:返回预知的数据,则脚本和配置OK
# /usr/local/zabbix-2.2.2/bin/zabbix_get -s XXX.XXX.XXX.XXX -p 10050 -k 'iostat.count' { "data":[ {"{#DISK_NAME}":"md0"}, {"{#DISK_NAME}":"sda"}, {"{#DISK_NAME}":"sdb"}, {"{#DISK_NAME}":"sdc"}, {"{#DISK_NAME}":"sdd"} ] } # /usr/local/zabbix-2.2.2/bin/zabbix_get -s xxx.xxx.xxx.xxx -p 10050 -k 'iostat.util[sdc]' 2.50
(6)在模板中配置自动发现:
配置项目原型:
(7)在主机或模板中配置图形:
下面是数据采集一段时间后的图形:
至此,自动发现配置完毕。
注意点:(1)键值要对应起来(2)自动发现返回的数据为json格式