Zabbix 监控磁盘I/O

2018-05-11 0 By admin

Zabbix 监控服务想要监控磁盘I/O的状态,首先就需要从众多设备中筛选出“磁盘块设备”;还要从区分块设备中的主设备和次设备,以及虚拟设备。

Linux 设备说明

Zabbix Client配置

1、配置文件

在zabbix_agentd.conf.d目录下建立配置diskstats.conf文件
UserParameter=custom.vfs.discover_disks,/usr/local/zabbix/scripts/lld-disks.py
UserParameter=custom.vfs.dev.read.ops[*],awk '{print $$1}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.merged[*],awk '{print $$2}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.sectors[*],awk '{print $$3}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.ms[*],awk '{print $$4}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.ops[*],awk '{print $$5}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.merged[*],awk '{print $$6}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.sectors[*],awk '{print $$7}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.ms[*],awk '{print $$8}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.io.active[*],awk '{print $$9}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.io.ms[*],awk '{print $$10}' /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.weight.io.ms[*],awk '{print $$11}' /sys/class/block/$1/stat

这样就可以收集Client端的磁盘I/O监控Items了。

2、配置Discory脚本

上一步中的监控项Item:discover_disks需要获取到Client端的磁盘列表。编辑lld-disks.py脚本,内容如下:
#!/usr/bin/python
import os
import json
if __name__ == "__main__":
------# Iterate over all block devices, but ignore them if they are in the
------# skippable set
------skippable = ("sr", "loop", "ram")
------devices = (device for device in os.listdir("/sys/class/block")
------------if not any(ignore in device for ignore in skippable))
------data = [{"{#DEVICENAME}": device} for device in devices]
------print(json.dumps({"data": data}, indent=4))

在发现的块设备中去除掉光驱设备、loop设备、RAM设备。
这样还存在一个问题,就是会将主设备和次设备全都列出来。造成监控项和监控绘图增多,其中的主设备的I/O监控项数据就是来源于同类别下的次设备监控项的数据累加。如果监控服务不需要特别精细的I/O状态,可以只监控和获取主设备号设备的I/O数据。忽略次设备号的方法可以通过对lld-disks.py脚本文件进行加工;也可以在Zabbix Web管理界面中添加”正则表达式”过滤。本文演示后者。
以上Client端的配置已经完成了。

Zabbix 管理界面配置

1、正则表达式过滤

为了忽略掉我们不想监控的设备的I/O情况,建立正则表达式过滤掉。页面切换: “Administration” -> General -> “Regular Expression”
创建新的“正则表达式”;名称:“Linux disks for autodiscovery”;表达式:”^(hd[a-z]|sd[a-z]|xvd[a-z]|dm-[0-9]|mmcb|k[0-9])$”;表达式类型:“result is True”。
这样表达式就创建完了。可以使用“sda”,”sda1″等设备名进行测试。

2、导入模板

在Zabbix管理界面中导入模板文件,对需要检查的主机管理模板。
模板文件:zabbix-disk-performance-master
Zabbix 服务存在标准参数用于监控磁盘的I/O: vfs.dev.read 和 vfs.dev.write 和特定的监控类型(sectors,operations,sps,ops)。这些监控参数有在模板中列出,因为没有使用到,所以默认不启动。

补充

模板文件中在Discovery配置中已经对“{#DEVICENAME}”和表达式“@Linux disks for autodiscovery”进行绑定了。如果监控中有异常,请排查是否设置正确。