2019獨角獸企業重金招聘Python工程師標準>>>
對于磁盤有個iops的概念比較奇怪,想監控起來看下,利用zabbix的自動發現把每個磁盤的iops監控起來,思路:自動發現所有的磁盤,然后監控各個磁盤的iops。效果如下圖(iops和io讀寫大小),下圖監控的磁盤是個sdd的,iops今天監控起來后峰值有30k:
?
思路分為兩步,第一個,自動發現列出所有磁盤。第二個,監控每個磁盤的iops情況。
第一個實現如下:
先看一下自動發現腳本,使用python編寫,利用linux的/proc/diskstats記得 的磁盤信息發現所有的磁盤。腳本如下:cat /usr/local/zabbix/discover_disk.py
#coding:utf-8
try:import json
except:import simplejson as jsonimport 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讀寫量)
#!/bin/sh
# 8 0 sda 76880282531 8117316 937263519846 4237854729 62989000438 35668103347 777694636224 1190396494 3 2895102137 899093508
while getopts "d:o:" opt
docase $opt ind ) disk=$OPTARG;;o ) option=$OPTARG;;? )echo 'parameter is wrong!'exit 1;;esac
done
if [ ! "${disk}" ] || [ ! "${option}" ];thenecho "parameter is null" exit 1
fiif [[ ${option} == "read" ]];thencat /proc/diskstats |grep "${disk} "|awk '{print $6}'
elif [[ ${option} == "write" ]];thencat /proc/diskstats |grep "${disk} "|awk '{print $10}'
elif [[ ${option} == "readops" ]];thencat /proc/diskstats |grep "${disk} "|awk '{print $4}'
elif [[ ${option} == "writeops" ]];thencat /proc/diskstats |grep "${disk} "|awk '{print $8}'
elif [[ ${option} == "readtime" ]];thencat /proc/diskstats |grep "${disk} "|awk '{print $7}'
elif [[ ${option} == "writetime" ]];thencat /proc/diskstats |grep "${disk} "|awk '{print $11}'
fi
腳本運行結果如下:
?
兩步寫好后,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 $2
?
加入好后在zabbix server運行檢測一下,自動發現結果如下:
監控磁盤的結果如下:
?
以上都測試沒問題就可以在zabbix的頁面上添加自動發現規則了。可以新建個模板,發現規則截圖如下:
自動發現發現所有的磁盤,發現后就要項目原型進行監控磁盤的iops了 ,{#DISKONE}代表每個磁盤。監控的項目配置如下:
?
把自動發現模板應用到主機后,監控的項目如下:
?
附上本人的網絡課堂地址,如有興趣請點擊:?實踐哥
?
最后,附上zabbix監控磁盤ipos的模板的鏈接:
http://git.oschina.net/zhuangweihong/ops/blob/master/zbx_export_templates_discover_disk.xml?dir=0&filepath=zbx_export_templates_discover_disk.xml&oid=1b1864a25c8b016e4ff14fc35c9bbdb07235829e&sha=9562fe6af03280814dc421203c713e7de20228b6