我这里主要是通过分析/proc/diskstats文件,来对IO的性能进行监控。
客户端配置
1、编辑zabbix配置文件,新添加一个配置文件userparameter_disk.conf
vi /etc/zabbix/zabbix_agentd.d/userparameter_disk.conf
UnsafeUserParameters=1 UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$4}' UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}' UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}' UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}' UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}' UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}' UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}' UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}'
参数解释:
UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$4}'磁盘完成读的次数
UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}'磁盘读花费的毫秒数
UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}'磁盘完成写的次数
UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}'磁盘写花费的毫秒数
UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}'磁盘I/O当前进度
UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}'磁盘I/O花费的毫秒数
UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}'磁盘读扇区次数(一个扇区等于512B)
UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}'磁盘写扇区次数(一个扇区等于512B)
2、确认zabbix-agentd.conf的Include路径(yum装的agent默认开启此项)
cat /etc/zabbix/zabbix_agentd.conf | grep Include=
Include=/etc/zabbix/zabbix_agentd.d/*.conf
3、重启zabbix-agent
/etc/init.d/zabbix-agent restart
服务端配置
1、服务端测试,如果上述配置正确的话会返回一个值
zabbix_get -s 目标服务器IP -p 10050 -k custom.vfs.dev.write.ops[sda]
2、zabbix监控项配置
我这里配置了磁盘读扇区次数和磁盘写扇区次数,以及cpu等待磁盘io操作的时间,也就是top命令中的wa参数
名称:CPU $2 time
键值:system.cpu.util[,iowait]
信息类型:浮点数
单位:%
名称:Disk:$1:Read:Bytes/sec磁盘读扇区次数
键值:custom.vfs.dev.read.sectors[sda]
单位:B/sec
使用自定义倍数:4096
存储值:差量(每秒速率)
名称:Disk:$1:Write:Bytes/sec磁盘写扇区次数
键值:custom.vfs.dev.write.sectors[sda]
单位:B/sec
使用自定义倍数:4096
存储值:差量(每秒速率)
PS:以下几项根据情况自行设置
名称:Disk:$1:Read:ms磁盘读花费的毫秒数
键值:custom.vfs.dev.read.ms[sda]
单位:ms
存储值:差量(每秒速率)
名称:Disk:$1:Write:ms磁盘写花费的毫秒数
键值:custom.vfs.dev.write.ms[sda]
单位:ms
存储值:差量(每秒速率)
名称:Disk:$1:Read:ops per second磁盘完成读的次数
键值:custom.vfs.dev.read.ops[sda]
单位:ops/second
存储值:差量(每秒速率)
名称:Disk:$1:Write:ops per second磁盘完成写的次数
键值:custom.vfs.dev.write.ops[sda]
单位:ops/second
存储值:差量(每秒速率)
3、设置图形
PS:关于自定义倍数的说明,网上文章写的都是512,如果自定义倍数用了512,那么这个值应该和iotop差不多。
但是正常我们用hdparm给硬盘测读取的时候数值会很高,这正是因为单位换算的问题,所以如果想更直观的查看IO,可以在自定义倍数填写512*8,也就是4096。(我个人是这样理解的,如果你有不同观点,可以给我留言)