前言:由於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格式