注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

Zabbix监控磁盘IO状态

Zabbix 彭东稳 6516次浏览 已收录 4个评论

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}'即可。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (5)or分享 (0)
关于作者:

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

(4)个小伙伴在吐槽
  1. 大神,我按照你的步骤完成后 一直显示【没有数据】,在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 未知操作系统 | 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 未知操作系统 | Chrome 61.0.3163.79