• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

Zabbix监控磁盘IO状态

Zabbix 彭东稳 8年前 (2016-09-07) 40300次浏览 已收录 6个评论

Zabbix自带的对于Linux系统基础监控模板虽然常见的CPU、内存、磁盘、网卡、进程等都有监控,但是没有网络连接状态监控和磁盘IO监控。下面给出磁盘IO状态监控方法。

先看文章最后关于iostat的坑)这里监控磁盘IO状态其实就是取iostat命令的值,所以你的客户端必须要能够使用iostat命令。

首先建立一个脚本目录用来存放自动发现和取值得脚本。

我们需要在zabbix-agent端建立一个磁盘设备自动发现脚本,因为你不确定你的主机有几块磁盘(要注意如果你的磁盘名称比较特别你需要改一改这个脚本),放在固定目录下。

执行看一下结果。

这也是zabbix自动发现的固json格式,启动{#DISK_NAME}这个变量在zabbix创建自动发现中的item时需要调用,后面再看。

然后再建立一个用来取iostat命令值的shell脚本。

这个脚本需要传输两个位置参数,执行结果如下。

你应该发现了

脚本都建立完之后,再就是在zabbix-agent端建立一个配置文件,在/etc/zabbix/zabbix_agentd.d/目录下。

这里是固定zabbix的固定写法,建立两个key,分为为disk.discovery和disk.status。

其中disk.discovery这个key比较简单,就是给zabbix做自动发现的。zabbix配置如下:

Zabbix监控磁盘IO状态

你可以选择为磁盘状态新创建一个template,或者在现有的template里面添加一个自动发现。创建自动发现其中的key就是上面再userparameter_disk.conf文件中定义的。

好,创建完自动发现后就说disk.status这个key。

我在key后面执行了我提前定义的脚本,并且给了位置变量。这里需要注意,我传的$1、$2位置变量同样会传给disk.status这个key当参数,这样一来我们在zabbix中配置item时就可以引用了。如下:

Zabbix监控磁盘IO状态

保存完之后如下图:

Zabbix监控磁盘IO状态

然后重启zabbix-agent端即可,如果出现not supported,可以试着把Administration–>General–>Other–> 参数的值调小一点。(Other选择在右边下拉框最后一个选项)

最终都没有问题后,展现的结果如下图正常监控。

Zabbix监控磁盘IO状态

一个item成功添加完成后,剩余的工作就是重复性了。把disk_status.sh脚本中定义的监控项都给添加进zabbix中。最后全部添加完的效果图就是这样的了。

Zabbix监控磁盘IO状态

我一共添加了13个磁盘监控项,从上图可以看出,自动发现了两块磁盘sda和dm-0都进行了这13项监控。

这里说一个坑,在真正使用过程中,发现iostat有bug,必须要这样使用iostat -dxkt 2 4,表示每2秒获取一次数据,一共获取4次(取几次任意),得到的数据才是正确的。你可以试试把秒数去掉,手动执行iostat -dxkt命令,多次执行其状态值是一样的,不会改变,妈蛋。

所以监控不能像上面写的那样,每次获取状态值时执行一次iostat命令。可以在被监控端丢一个定时任务(一分钟执行一次),把结果保存到一个文件中,如下:

或者当守护进程放在后台运行。

然后采集脚本/etc/zabbix/zabbix_agentd.d/scripts/disk_status.sh中iostat命令换成cat /tmp/.disk_status.log |grep “\b$device\b” |tail -1|awk ‘{print $11}’即可。

由于iostat工具也是从/proc/diskstats文件中读取的数据,所以监控也可以直接从这个文件中取值。思路跟上面差不多,但需要学习一下/proc/diskstats文件中各个字段的含义。并且/proc/diskstats文件中的值大部分都是累积值,所以需要使用zabbix的Delta(speed per second)功能来得出每秒的值。具体参考:http://www.ywnds.com/?p=4516


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (17)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!

(6)个小伙伴在吐槽
  1. 您好,按照您的操作方法,设置了之后,从zabbix-server能够抓取到数据,但是创建模板后,图形中没有数据哦。
    syl_201808292018-08-29 09:39 Windows 8.1 | Chrome 67.0.3396.99
  2. 大神,我按照你的步骤完成后 一直显示【没有数据】,在server端使用zabbix-get如下: zabbix_get -s 192.168.1.8 -p 10050 -k "disk.status[vda,await]" 是可以正确获取到结果的, 查看agent日志显示 1201:20171024:165752.896 active check "disk.discorvery" is not supported: Unsupported item key. 1201:20171024:165752.896 active check "disk.status[{#DISK_NAME},avgqu-sz]" is not supported: Special characters "\, ', ", `, *, ?, [, ], {, }, ~, $, !, &, ;, (, ), , |, #, @, 0x0a" are not allowed in the parameters. 发现是key中的{#DISK_NAME}未被替换为sda等才导致的,这要怎么改呢...
    Yort2017-10-24 17:24 Windows 7 | Chrome 55.0.2883.87
    • 没太明白你说的意思,磁盘是自动获取的,应该是vda吧。另外iostat这种方式获取有点bug,你一直执行iostat会发现值是0,需要折中处理。
      彭东稳2017-10-24 19:05 Mac OS X | Chrome 61.0.3163.79
      • 磁盘自动获取不了。新建的磁盘io模板,给主机添加io模板后,主机自动发现规则显示【不支持的】,信息一栏显示的是【unsupported item key】,版本是3.0.12的。在zabbix的server端用zabbix-get命令可以获取到结果,在agent端用zabbix_agentd -t disk.discovery也可以获取到结果。日志方面都没有报错,就是自动发现那里显示【unsupported item key】,不知道怎么解决了。。。
        Yort2017-10-30 14:50 Windows 7 | Chrome 55.0.2883.87
        • 你把文章好好看看,是不是sudo没有加,或者哪里信息有错误。
          彭东稳2017-10-30 18:51 Mac OS X | Chrome 61.0.3163.79