Zabbix自动发现监控磁盘IO

/proc/diskstats中记录着磁盘IO的状态信息,我们可以使用这个状态信息对磁盘IO进行监控。

[root@shijiange50 ~]# cat /proc/diskstats 
   8       0 sda 4049 0 285994 41118 833 914 116184 16840 0 28501 57470
   8       1 sda1 4020 0 283906 40971 833 914 116184 16840 0 28499 57323
  11       0 sr0 18 0 2056 639 0 0 0 0 0 633 639

/proc/diskstats每一行都有14列,分别代表的磁盘状态信息如下:

  1. 8:主设备号
  2. 1:次设备号
  3. sda1:磁盘名称,自动发现只监控sd、vd、hd开头
  4. 4020:总读次数
  5. 0:总合并读次数
  6. 283906:总读扇区次数,一扇区=512Bytes
  7. 40971:总读花费毫秒数
  8. 833:总写次数
  9. 914:总合并写次数
  10. 116184:总写扇区次数,一扇区=512Bytes
  11. 16840:总写花费毫秒数
  12. 0:正在处理的输入/输出请求数
  13. 28499:输入/输出操作花费的毫秒数
  14. 57323:输入/输出操作花费的加权毫秒数

监控磁盘IO的脚本如下disk_check.sh,我们监控关心第6、10个字段能够监控出每秒的读写字节数(注意需要乘以512), 第4、8个字段能够监控出每秒的read数(read per second),每秒的write数(write per second)

disk=$1
option=$2
if [[ ${option} == "readbytes" ]];then
  result=$(cat /proc/diskstats |grep "${disk} "|awk '{print $6}')
  let result=$result*512
  echo $result
elif [[ ${option} == "writebytes" ]];then
  result=$(cat /proc/diskstats |grep "${disk} "|awk '{print $10}')
  let result=$result*512
  echo $result
elif [[ ${option} == "read" ]];then
  cat /proc/diskstats |grep "${disk} "|awk '{print $4}'
elif [[ ${option} == "write" ]];then
  cat /proc/diskstats |grep "${disk} "|awk '{print $8}'
fi

disk_check.sh脚本需要提供两个参数,能够获取我们想要的数值,Zabbix监控只需要输出一个数字即可,运行结果如下:

[root@shijiange50 ~]# sh /etc/zabbix/disk_check.sh sda read
4803
[root@shijiange50 ~]# sh /etc/zabbix/disk_check.sh sda write
1591

磁盘的名称我们使用自动发现脚本disk_discovery.py,我们只关心sd、vd、hd开头的磁盘,代码如下:

try:
  import json
except:
  import simplejson as json
import commands

(status, output) = commands.getstatusoutput(""" cat /proc/diskstats |awk '{print $3}'|egrep 'sd|vd|hd' """)
outputs = output.split('\n')
result = []
for one in  outputs:
  result.append( {'{#ONE}': one} )
print( json.dumps({'data':result},sort_keys=True,indent=4) )

运行结果如下,可以自动发现两个sd开头的,根据各机器不同会自动发现不同的磁盘:

[root@shijiange50 ~]# python /etc/zabbix/disk_discovery.py 
{
    "data": [
        {
            "{#ONE}": "sda"
        }, 
        {
            "{#ONE}": "sda1"
        }
    ]
}

要监控的服务器下,只需要Zabbix Agent添加如下配置:

UserParameter=diskio.discovery,python /etc/zabbix/disk_discovery.py
UserParameter=diskio.check[*],sh /etc/zabbix/disk_check.sh $1 $2

然后导入实践哥创建的Zabbix模板并应用就能完成对磁盘IO的监控
https://gitee.com/shijiange/ops/blob/master/Zabbix%E6%A8%A1%E6%9D%BF/zbx_diskio_template.xml

效果图如下


Zabbix自动发现监控磁盘IO_第1张图片
zabbix监控磁盘IO效果图

跟着实践哥学习Zabbix,从实践中掌握Zabbix运维监控技术,可免费试听两集:
https://edu.51cto.com/sd/36433

你可能感兴趣的:(Zabbix自动发现监控磁盘IO)