Linux下为Zabbix新增监控:以磁盘IO监控为例

背景介绍

Zabbix是一款优秀的开源监控系统,支持主流操作系统,可以监控磁盘容量、CPU、内存、网络等指标,也可以自定义监控数据。目前我用Zabbix来监控我的博客所在服务器的运行情况。具体安装和使用方法可以Google搜索一下,网上很多教程,也比较容易。本文主要讲一下如何使用Zabbix做自定义监控。

问题描述

Zabbix默认带了很多监控项,这些监控项分布在一些默认的模板中,每个服务器可以匹配多个模板,从而使用模板中所有的监控项目(部分不支持的项目不会监控)。比如Linux模板中包含了针对Linux的常用监控,如下图所示:

只是内置的模板可能并不包含一些个性化的监控项,比如特定进程是否存活,或者磁盘IO读写情况。下面将以Linux为例讲解如何在Zabbix中添加自定义的监控项。

Linux磁盘监控方法

Linux下从启动以来总磁盘读写量可以通过/proc/vmstat文件读取到,磁盘读写量分别为pgpgin和pgpgout字段,单位为kB,这也是vmstat或者dstat读取数据的来源:

Linux下有很多命令可以获得磁盘读写量,比如vmstat,dstat等,但是这些命令启动时只能获得系统从启动以来平均磁盘读写速度,如果要获得当前磁盘读写速度,必须要等1秒,而且并不能反映每个采样点之间的磁盘读写情况,比如每分钟采样一个点,但是这个数据获得的是当前那一秒的磁盘读写量,不能反映这一分钟的平均磁盘读写量,这个数据会有波动而且不准确。

因此每隔一段时间,读取一次/proc/vmstat,将2次的差值与时间差值相除,即可得到2次读取间平均每秒的磁盘读写量。

我们必须提供一个方法,让Zabbix在获得采样点时,能够获得从上次采样点到本次采样点之间的平均数据,每次读取/proc/vmstat后,将时间和本次数据备份下来,以便下次使用。第一次运行由于没有上次数据,直接返回0或者返回-1表示没数据即可,下面给出python脚本实现:

使用方法:

添加监控到Zabbix
  1. 在被监控的服务器上(zabbix-agent)添加新的监控项:
    sudo vim /etc/zabbix/zabbix_agentd.conf.d/zabbix_vmstat.conf

    其中vmstat.[*]表示监控项可接收自定义参数,数据获得通过执行逗号侯庙的脚本获得,脚本参数就是监控项。这个参数即是/proc/vmstat文件中各项数值的第一列Key。
    具体的监控项会在最后代入*号表示的数据,比如pgpgout表示为vmstat.[pgpgout]。
  2. 重启zabbix-agent:
    sudo /etc/init.d/zabbix-agent restart
  3. 检查是否能够获得数据:
    zabbix_get -s 127.0.0.1 -k vmstat.[pgpgout]
    上述命令需要执行至少2次,如果成功,能会打印出当前磁盘IO写入数据(kB/s)。
  4. 在zabbix服务端管理页面进入:【组态】——【主机】——指定监控主机的【项目】——右侧【创建监控项】,按照下图所示填写后保存,读取的数据只需要将部分项目改掉即可,比如pgpgout改成pgpgin:

    名称:监控名,可以通过$1、$2取到参数名称,比如上例中$1可以取到字符串”pgpgout”。
    键值:要监控的数据键值,与之前配置的vmstat.[*]对应,以参数代替*。
    单位填B/s即可。
    自订倍数:因为读取出来的数据单位是kB,因此乘以1024是实际的Byte/s的值。
    数据更新间隔:每分钟获得一个数据点,即60秒。
    应用集:将其放到Disk中,也可以自订一个应用集。

  5. 添加成功后,过1分钟回到【监测中】——【最新数据】,就可以看到当前的数据和统计图:

总结

Zabbix自定义监控,如果数据可自定义获得方式,那么只需要按照上述方法,便可以添加自定义统计和监控数据,相关的监控还可以配置触发器和事件以便更加复杂的操作。