赞
踩
转自:http://www.ttlsa.com/zabbix/zabbix-lld-monitor-disk-io-stats/
Linux io监控的方式很多,这次使用zabbix对Linux磁盘IO做一个监控。需要下载三个文件,文章后面我会提供一个下载地址给大家,跟着凉白开的步骤来~
找出当前系统的分区,例如sda、sdb、xvda等等
写好的模板,导进去即可
定义key需要的文件,用于获取io监控值
备注:discover_disk.pl、zbx_parse_iostat_values.sh这两个文件我copy到了/usr/local/zabbix-2.4.4/scripts/目录下(这是我新创建用于存放脚本的目录,大家可自行定义)
configuration->templates->import,选择你需要导入的模板文件:zbx_export_templates.xml,如下图:
在host中link模板,configuration->Hosts->点击你的主机->templates->添加磁盘IO监控模板,如下:
① 正则配置
因为扫描出的分区比较多,我们监控特定的分区IO,需要使用zabbix正则表达式过滤,Administration->General->右侧下来条选择“Regular expressions”->New regular expression(创建正则)
最后保存即可,如果你想对正则表达式有更进一步了解,请看凉白开以前写的《zabbix正则表达式(86)》
② low-level-discovery配置
模板中已经配置,无需配置!
配置zabbix_agentd.conf,在最后加上如下配置:
- # diskio discovery
- UserParameter=discovery.disks.iostats,/usr/local/zabbix-2.4.4/scripts/discover_disk.pl
- UserParameter=custom.vfs.dev.iostats.rrqm[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "rrqm/s"
- UserParameter=custom.vfs.dev.iostats.wrqm[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "wrqm/s"
- UserParameter=custom.vfs.dev.iostats.rps[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "r/s"
- UserParameter=custom.vfs.dev.iostats.wps[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "w/s"
- UserParameter=custom.vfs.dev.iostats.rsec[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "rsec/s"
- UserParameter=custom.vfs.dev.iostats.wsec[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "wsec/s"
- UserParameter=custom.vfs.dev.iostats.avgrq[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "avgrq-sz"
- UserParameter=custom.vfs.dev.iostats.avgqu[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "avgqu-sz"
- UserParameter=custom.vfs.dev.iostats.await[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "await"
- UserParameter=custom.vfs.dev.iostats.svctm[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "svctm"
- UserParameter=custom.vfs.dev.iostats.util[*],/usr/local/zabbix-2.4.4/scripts/zbx_parse_iostat_values.sh $1 "%util"
请等待几分钟,查看latest data,或者查看对应主机的item,看看是否出现了io stats的监控项或者监控数据。如果想查看图形数据,可到graph中看。如下:
iostat的使用说明iostat -d -k -t 2
每隔2秒统计一次磁盘IO信息,直到按Ctrl+C终止程序,-d 选项表示统计磁盘信息, -k 表示以每秒KB的形式显示,-t 要求打印出时间信息,2 表示每隔 2 秒输出一次。第一次输出的磁盘IO负载状况提供了关于自从系统启动以来的统计信息。随后的每一次输出则是每个间隔之间的平均IO负载状况。
- # iostat -x 1 10
- Linux 2.6.18-92.el5xen 02/03/2009
- avg-cpu: %user %nice %system %iowait %steal %idle
- 1.10 0.00 4.82 39.54 0.07 54.46
- Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
- sda 0.00 3.50 0.40 2.50 5.60 48.00 18.48 0.00 0.97 0.97 0.28
- sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- sde 0.00 0.10 0.30 0.20 2.40 2.40 9.60 0.00 1.60 1.60 0.08
- sdf 17.40 0.50 102.00 0.20 12095.20 5.60 118.40 0.70 6.81 2.09 21.36
- sdg 232.40 1.90 379.70 0.50 76451.20 19.20 201.13 4.94 13.78 2.45 93.16
- rrqm/s: <span style="white-space:pre"> </span>每秒进行 merge 的读操作数目。即 delta(rmerge)/s
- wrqm/s: <span style="white-space:pre"> </span>每秒进行 merge 的写操作数目。即 delta(wmerge)/s
- r/s: <span style="white-space:pre"> </span>每秒完成的读 I/O 设备次数。即 delta(rio)/s
- w/s: <span style="white-space:pre"> </span>每秒完成的写 I/O 设备次数。即 delta(wio)/s
- rsec/s: <span style="white-space:pre"> </span>每秒读扇区数。即 delta(rsect)/s
- wsec/s: <span style="white-space:pre"> </span>每秒写扇区数。即 delta(wsect)/s
- rkB/s: <span style="white-space:pre"> </span>每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
- wkB/s: <span style="white-space:pre"> </span>每秒写K字节数。是 wsect/s 的一半。(需要计算)
- avgrq-sz: <span style="white-space:pre"> </span>平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
- avgqu-sz: <span style="white-space:pre"> </span>平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
- await: <span style="white-space:pre"> </span>平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
- svctm: <span style="white-space:pre"> </span>平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
- %util: <span style="white-space:pre"> </span>一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
-
- 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
- 可能存在瓶颈。
- idle小于70% IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
别人一个不错的例子.(I/O 系统 vs. 超市排队)
举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当是看排的队人数,5个人总比20人要快吧?除了数人头,我们也常常看看前面人购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队排了。还有就是收银员的速度了,如果碰上了连钱都点不清楚的新手,那就有的等了。另外,时机也很重要,可能 5分钟前还人满为患的收款台,现在已是人去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情比排队要有意义(不过我还没发现什么事情比排队还无聊的)。
I/O 系统也和超市排队有很多类似之处:
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。
我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。
下面是别人写的这个参数输出的分析
- # iostat -x 1
- avg-cpu: %user %nice %sys %idle
- 16.24 0.00 4.31 79.44
- Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
- /dev/cciss/c0d0
- 0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
- /dev/cciss/c0d0p1
- 0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
- /dev/cciss/c0d0p2
- 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。