zabbix自動發現監控磁盤(iops和讀寫量)

對於磁盤有個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

相關文章
相關標籤/搜索