对于磁盘有个iops的概念比较奇怪,想监控起来看下,利用zabbix的自动发现把每一个磁盘的iops监控起来,思路:自动发现全部的磁盘,而后监控各个磁盘的iops。效果以下图(iops和io读写大小),下图监控的磁盘是个sdd的,iops今天监控起来后峰值有30k:python
思路分为两步,第一个,自动发现列出全部磁盘。第二个,监控每一个磁盘的iops状况。linux
第一个实现以下:json
先看一下自动发现脚本,使用python编写,利用linux的/proc/diskstats记得 的磁盘信息发现全部的磁盘。脚本以下:cat /usr/local/zabbix/discover_disk.pybash
#coding:utf-8 try: import json except: import simplejson as json import commands (status, output) = commands.getstatusoutput('''cat /proc/diskstats |awk '{print $3}'|egrep 'sd|vd|hd'|egrep -v '[0-9]'|sort -u''') if output: outputs = output.split('\n') disks = [] for disk in outputs: disks += [{'{#DISKONE}': disk}] print json.dumps({'data':disks},sort_keys=True,indent=4) else: print 'discovery error'
运行结果以下(此机器上有两个磁盘):测试
第二步,监控磁盘的iops,利用linux的/proc/diskstats的第四个字段和第八字段可监控读和写的iops,第四个记录是记录全部读的次数,第八个字段是记录全部写的次数。经过zabbix上的差速率便可监控磁盘的iops。脚本以下:cat /usr/local/zabbix/check_disk.sh。脚本中-d后面跟磁盘名称,-o后面跟须要读取的磁盘的信息。(第六个字段和第十个字段分别表明读的扇区和写的扇区,*512就为读写的Byte了,经过这两个字段可监控磁盘的io读写量)code
#!/bin/sh # 8 0 sda 76880282531 8117316 937263519846 4237854729 62989000438 35668103347 777694636224 1190396494 3 2895102137 899093508 while getopts "d:o:" opt do case $opt in d ) disk=$OPTARG;; o ) option=$OPTARG;; ? ) echo 'parameter is wrong!' exit 1;; esac done if [ ! "${disk}" ] || [ ! "${option}" ];then echo "parameter is null" exit 1 fi if [[ ${option} == "read" ]];then cat /proc/diskstats |grep "${disk} "|awk '{print $6}' elif [[ ${option} == "write" ]];then cat /proc/diskstats |grep "${disk} "|awk '{print $10}' elif [[ ${option} == "readops" ]];then cat /proc/diskstats |grep "${disk} "|awk '{print $4}' elif [[ ${option} == "writeops" ]];then cat /proc/diskstats |grep "${disk} "|awk '{print $8}' elif [[ ${option} == "readtime" ]];then cat /proc/diskstats |grep "${disk} "|awk '{print $7}' elif [[ ${option} == "writetime" ]];then cat /proc/diskstats |grep "${disk} "|awk '{print $11}' fi
脚本运行结果以下:server
两步写好后,zabbix agent加入以下配置,加完后重启zabbix,配置以下:教程
cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/disk.conf
UserParameter=disk.discover,python /usr/local/zabbix/discover_disk.py
UserParameter=disk.status[*],sh /usr/local/zabbix/check_disk.sh -d $1 -o $2utf-8
加入好后在zabbix server运行检测一下,自动发现结果以下:get
监控磁盘的结果以下:
以上都测试没问题就能够在zabbix的页面上添加自动发现规则了。能够新建个模板,发现规则截图以下:
自动发现发现全部的磁盘,发现后就要项目原型进行监控磁盘的iops了 ,{#DISKONE}表明每一个磁盘。监控的项目配置以下:
把自动发现模板应用到主机后,监控的项目以下:
Zabbix实战教程地址:https://edu.51cto.com/sd/36433