zabbix4.0 自动发现监控磁盘IO
操作环境
Centos 7.2
zabbix 4.0
操作步骤
1.在zabbix agent获取硬盘信息,可通过下述脚本获取信息disk_scan.sh
#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg]\b|\bvd[abcdefg]\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 "\"{#DISKNAME}\":\"${diskarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
在zabbix agent端通过zabbix用户运行该脚本结果如下:
[[email protected] ~]# su -s /bin/bash zabbix
bash-4.2$ /etc/zabbix/zabbix_agentd.d/disk_scan.sh
{
"data":[
{"{#DISKNAME}":"sda"}
]
}
2.在zabbix agent通过iostat获取硬盘性能信息,并将该信息写入文本中
# nohup iostat -m -x -d 30 >> /tmp/iostat_output &
为了以后方便使用,可将该命令写入到自动启动中。
我们查看下iostat的性能参数[
[email protected] ~]# iostat -mx -d 30
Linux 3.10.0-327.36.2.el7.x86_64 (ovirt-host-227) 11/30/2016 _x86_64_ (16 CPU)
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.17 1.80 6.99 0.06 0.06 27.62 0.06 7.12 5.38 7.57 4.39 3.85
dm-0 0.00 0.00 0.01 0.00 0.00 0.00 16.30 0.00 24.89 24.89 0.00 24.13 0.01
dm-1 0.00 0.00 0.20 0.14 0.01 0.00 90.54 0.01 17.26 23.12 9.06 5.32 0.18
dm-2 0.00 0.00 1.57 6.32 0.04 0.06 26.50 0.08 10.11 2.90 11.90 4.68 3.69
3.在了解硬盘的基本信息以及性能信息后,我们来设置zabbix-agent,添加下述内容至zabbix agent配置文件中
UserParameter=io.scandisk[*],/etc/zabbix/zabbix_agentd.d/disk_scan.sh $1
UserParameter=io.rps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b"|tail -1|awk '{print $$4}'
UserParameter=io.wps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$5}'
UserParameter=io.rMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$6}'
UserParameter=io.wMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$7}'
UserParameter=io.avgrq-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$8}'
UserParameter=io.avgqu-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$9}'
UserParameter=io.await[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$10}'
UserParameter=io.r_await[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$11}'
UserParameter=io.w_await[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$12}'
UserParameter=io.svctm[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$13}'
UserParameter=io.util[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk '{print $$14}'
重启 zabbix-agent
[[email protected] ~]# systemctl restart zabbix-agent
bash-4.2$ zabbix_get -s 10.10.200.227 -p 10050 -k io.scandisk
{
"data":[
{"{#DISKNAME}":"sda"}
]
}
bash-4.2$ zabbix_get -s 10.10.200.227 -p 10050 -k io.util[sda]
4.05
bash-4.2$ zabbix_get -s 10.10.200.227 -p 10050 -k io.rps[sda]
0.00
bash-4.2$ zabbix_get -s 10.10.200.227 -p 10050 -k io.wps[sda]
6.77
通过以上zabbix_get的测试,可以确定zabbix-agent与zabbix-server之前获取数值没有问题,下面我们在zabbix web console来创建Template
创建discovery rule,注意在key中填写io.scandisk为zabbix-agent中设置的参数
创建item prototype,注意这里是在discovery rule下面的item prototype
下面我们来创建item prototype,以io.util为例,注意“#DISKNAME”参数,为zabbix-agent的disk_scan.sh脚本中的参数,io.util为zabbix-agent配置文件中的参数,在这里设置
数据类型为Numeric(float)
创建完成所有item prototype,如下图所示
我们将该template添加至zabbix-agent 被监控机器中,在添加完成以后,我们查看被监控机器的item列表中,可以查看到自动发现的硬盘以及上面所创建的监控参数
我们创建graphs来显示这些内容
显示硬盘各种利用率(多块磁盘可以同时添加进来)
创建完成后点击preview可以查看该graph