zabbix实现对磁盘性能动态监控

前言

zabbix一直是小规模互联网公司服务器性能监控首选,首先是免费,其次,有专门的公司和社区开发维护,使其稳定性和功能都在不断地增强和完善。zabbix拥有详细的UI界面和分组策略,在被监控的服务器上安装好agent后,无需添加任何监控选项,因为zabbix自带一些必要的监控,如agent.ping之类,zabbix支持画图,这个是专门给boss们看的,极其重要。另外还支持用户自定义监控选项,香港空间,这一点非常方便,今天我要说的就是磁盘监控,香港服务器租用,标题中为动态的监控,意指智能的识别磁盘个数,免备案空间,并生成相应的监控选项,因为每台服务器的磁盘可能不一样,所以我是使用zabbix的discovery方式。

个人认为其UI界面是比较复杂的,但是毕竟越复杂越显得高端。我常用的不算configure和administration标签下所有的选项(这是必不可少的),也就graphs和screen,这两个选项是在monitor标签下的,也是BOSS们最关注的。

自动寻找磁盘

说到底,所有的自动判断都是人为的设置好所有的可能性,然后根据实际情况从中选择,方法有很多,看大家具体要求。在这里,我要对磁盘监控,首先要找出有哪些磁盘,这里使用shell脚本实现。由于zabbix的discovery需要固定的格式,具体可以参考这里,最下面部分。

脚本如下:

1 #!/bin/bash 2 #written by lenwood 3 #mail:ccyhaoran@live.cn|||sort|uniq 2>/dev/null`) 5 length=${#diskarray[@]}printf ((i=0;i<$length;i++))printf printf [ $i -lt $[$length-printf printf

如上,这里通过读取/proc/diskstats,选择其中的磁盘,根据实际情况,我这里就找出类似sda或者xvda的,因为我们用的是sata接口的硬盘以及部分阿里云的服务器。

脚本执行出来的结果类似如下

1 {:[:}:}5 ]6 }

然后使用zabbix执行这个脚本,那么就要将其写到zabbix_agentd.conf中去,如下

UserParameter=io.scandisk[*],/infra/zabbix/os/disk_scan.sh $1

iostat命令

对于磁盘的监控我采用iostat命令,因为它能给出磁盘的详细信息,如扇区读写情况,io队列长度,iowait,svctime等等。

命令如下:

1 nohup iostat -m -x -d 30 >/tmp/iostat_output &

通过tail -f /tmp/iostat_output,可获得iostat命令收集的磁盘信息,结果类似下面

Device:rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %utilhdahda1hda2xvdbxvdb1hdc

其中部分参数的详细解释如下

rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/swrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/sr/s:每秒完成的读 I/O 设备次数。即 delta(rio)/sw/s:每秒完成的写 I/O 设备次数。即 delta(wio)/srsec/s: 每秒读扇区数。即 delta(rsect)/swsec/s: 每秒写扇区数。即 delta(wsect)/srkB/s:每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)wkB/s: 每秒写K字节数。是 wsect/s 的一半。(需要计算)avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)%util:一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

结合zabbix

最开始已经说了,是结合zabbix的discovery功能,所以要对zabbix做出如下设置。

(1)新建discovery规则

(2)新建好discovery rule之后,就可以开始写item prototypes了,下面是一个例子avgqu-sz(平均I/O队列长度)。

在建立好item之后,zabbix_agentd.conf中也要写上相应的UserParameters,如下。

|UserParameter=io.wps[*],/usr/bin/|UserParameter=io.rMBps[*],/usr/bin/|UserParameter=io.wMBps[*],/usr/bin/|UserParameter=io.avgrq-sz[*],/usr/bin/|UserParameter=io.avgqu-sz[*],/usr/bin/|UserParameter=io.await[*],/usr/bin/|UserParameter=io.svctm[*],/usr/bin/|UserParameter=io.util[*],/usr/bin/|

以上,监控的部分实际就已经完成。不过还要画图,也就是新建graph prototype了,如下图。

最后,看一下劳动成功,这样就实现了zabbix自动判断服务器上的磁盘个数,然后自动部署对应磁盘的监控并生成图表。

如果困难是堵砖墙,拍拍它说你还不够高。

zabbix实现对磁盘性能动态监控

相关文章:

你感兴趣的文章:

标签云: