最近做压测,需要监控每台服务器的磁盘I/O,由于每台服务器的磁盘名称可能不一样,所以需要用到Zabbix的LLD功能来发现磁盘并监控I/O。
参考文章
http://www.programering.com/a/MDOwYDNwATc.html
一、客户端(被监控端)
1.发现磁盘的脚本(disk_discovery.sh)
#!/bin/bash
#written by lenwood
#mail:
diskarray=(`cat /proc/diskstats |grep -E "\b[sv]d[abcdefg]\b|\bxvd[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 "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
我把这个脚本放到zabbix-agent的/etc/zabbix/os目录下
执行结果如下:
root@ubuntu-14:/etc/zabbix/os# ./disk_discovery.sh
{
"data":[
{"{#DISK_NAME}":"sda"}
]
}
说明:执行结果看到此台测试机上面只有一块磁盘sda
2.获取磁盘I/O信息
a.使用iostat收集磁盘I/O信息(这条指令是每隔一秒将磁盘信息内容写入到/tmp/iostat_output,并且后台运行)
1.apt-get install sysstat(有些机器上面没有安装sysstat,如果有了可以忽略此步骤)
安装完之后可以使用 iostat 展示信息如下:
root@ubuntu-14:/etc/zabbix/os# iostat
Linux 3.13.0-24-generic (ubuntu-14) 11/20/2015 _x86_64_(2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.70 0.01 1.30 0.01 0.00 96.99
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.55 1.17 12.60 1715312 18448440
dm-0 0.89 0.98 12.20 1440157 17864000
dm-1 0.15 0.19 0.40 272380 584364
2.nohup /usr/bin/iostat -dxkt 1 > /tmp/iostat_output 2>/dev/null
b.编写脚本(disk_status.sh)
#/bin/bash
device=$1
item=$2
case $item in
rrqm)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $2}'
;;
wrqm)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $3}'
;;
rps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b"|tail -1|awk '{print $4}'
;;
wps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $5}'
;;
rKBps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $6}'
;;
wKBps)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $7}'
;;
avgrq-sz)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $8}'
;;
avgqu-sz)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $9}'
;;
await)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $10}'
;;
svctm)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $11}'
;;
util)
/usr/bin/tail -n20 /tmp/iostat_output |grep "\b$device\b" |tail -1|awk '{print $12}'
;;
esac
3.修改zabbix-agent配置文件(zabbix-agentd.conf)
二、服务端(监控端)
1.root@zabbixserv:/usr/bin# zabbix_get -s 客户端IP -p 10050 -k disk.discovery
{
"data":[
{"{#DISK_NAME}":"sda"}
]
}
2.root@zabbixserv:/usr/bin# zabbix_get -s 客户端IP -p 10050 -k disk.status[sda,avgrq-sz]
8.00
在此过程中如果没有显示数据,那么请去查看日志/var/log/zabbix-agent/zabbix-agentd.log
和/var/log/zabbix-server/zabbix-server.log(查看具体错误进行处理)。
三、在网页上进行设置模板
1.create discovery rule
2.create Item prototypes
这里我创建了5个
以avgqu-sz为例设置如下:
3.create graph prototypes
查看结果如下:
如果是2.4.4的版本可以直接导入模板 (附件中zbx_export_disk_template.xml)