?zabbix并沒有給我們提供這么一個模板來完成在Linux中磁盤IO的監(jiān)控那伐,所以我們需要自己來創(chuàng)建一個和措,在此還是在Linux OS中添加。
由于一臺服務(wù)器中磁盤眾多鸯乃,如果只一兩臺可以手動添加,但服務(wù)集群達到幾十那就非常麻煩跋涣,因此需要利用?自動發(fā)現(xiàn) 這個功能缨睡,自動發(fā)現(xiàn)后自動添加對服務(wù)器磁盤的監(jiān)控,而且添加磁盤后也會自動添加到監(jiān)控陈辱,實現(xiàn)自動化運維的效果奖年,所以在這里也演示一次自動發(fā)現(xiàn)的配置。
打開Linux模板沛贪,添加自動發(fā)現(xiàn)規(guī)則
上面的key值是需要在 zabbix_agent.conf 中配置的?
UserParameter=disk.discovery,/usr/local/share/zabbix/alertscripts/disk_discovery.sh
自動發(fā)面的規(guī)則用shell代碼實現(xiàn)陋守,返回一段磁盤的json list
代碼 disk_discovery.sh
#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E"\bsd[abcdefg]\b|\bxvd[abcdefg]\b"|grep -i"\b$1\b"|awk '{print$3}'|sort|uniq? 2>/dev/null`)
length=${#diskarray[@]}
printf"{\n"printf? '\t'"\"data\":["
for((i=0;i<$length;i++))
do? ? ? ??
printf '\n\t\t{'
?printf "\"{#DISK_NAME}\":\"${diskarray[$i]}\"}"
if[$i-lt$[$length-1] ];
then
? ? ? ? ? ? ? ? printf ','
? ? ? ? fi
done
printf? "\n\t]\n"printf "}\n"
到此自動發(fā)現(xiàn)磁盤已完震贵,有點簡單吧。?
添加監(jiān)控項
?按照上面的內(nèi)容添加第一個寫扇區(qū)的次數(shù)監(jiān)控水评,接下來按下面的內(nèi)容添加共6個內(nèi)容猩系。
?內(nèi)容介紹
名稱: {#DISK_NAME}磁盤讀的次數(shù)
鍵值: disk.status[{#DISK_NAME},read.ops]
單位: ops/second
儲存值:差量(每秒速率)
名稱: {#DISK_NAME}磁盤寫的次數(shù)
鍵值: disk.status[{#DISK_NAME},write.ops]
單位: ops/second
儲存值:差量(每秒速率)
名稱: {#DISK_NAME}磁盤讀的毫秒數(shù)
鍵值: disk.status[{#DISK_NAME},read.ms]
單位: ms
儲存值:差量(每秒速率)
名稱: {#DISK_NAME}磁盤寫的毫秒數(shù)
鍵值: disk.status[{#DISK_NAME},write.ms]
單位: ms
儲存值:差量(每秒速率)
名稱: {#DISK_NAME}讀扇區(qū)的次數(shù)
鍵值:? disk.status[{#DISK_NAME},read.sectors]
單位:? B/sec
使用自定義倍數(shù): 512儲存值:差量(每秒速率)
名稱: {#DISK_NAME}寫扇區(qū)的次數(shù)
鍵值:? disk.status[{#DISK_NAME},write.sectors]
單位:? B/sec
使用自定義倍數(shù): 512儲存值:差量(每秒速率)
然后如果得到這些值是需要shell腳本的:
disk_status.sh
#/bin/sh
device=$1
DISK=$2
case $DISK in? ? ? ??
?read.ops)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$4}'#//磁盤讀的次數(shù)? ? ? ? ? ?
?;;
? ? ? ? read.ms)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$7}'#//磁盤讀的毫秒數(shù)? ? ? ? ? ??
;;
? ? ? ? write.ops)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$8}'#//磁盤寫的次數(shù)? ? ? ? ? ??
;;
? ? ? ? write.ms)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$11}'#//磁盤寫的毫秒數(shù)? ? ? ? ? ?
?;;
? ? ? ? io.active)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$12}'#//I/O的當(dāng)前進度,? ? ? ? ? ?
?;;
? ? ? ? read.sectors)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$6}'#//讀扇區(qū)的次數(shù)(一個扇區(qū)的等于512B)? ? ? ? ? ?
?;;
? ? ? ? write.sectors)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$10}'#//寫扇區(qū)的次數(shù)(一個扇區(qū)的等于512B)? ? ? ? ? ??
;;
? ? ? ? io.ms)
? ? ? ? ? ? /bin/cat /proc/diskstats | grep"\b$device\b"| head -1 | awk '{print$13}'#//花費在IO操作上的毫秒數(shù)? ? ? ? ? ?
?;;
esac
?在客戶端中的zabbix_agent.conf 中一起配置:
UserParameter=disk.discovery,/usr/local/share/zabbix/alertscripts/disk_discovery.sh
UserParameter=disk.status[*],/usr/local/share/zabbix/alertscripts/disk_status.sh $1 $2
要注意的是以上兩個文件需要給x 執(zhí)行權(quán)限中燥。
添加圖形顯示
在圖形原型中添加式撼,注意名稱中要帶哪個磁盤的動態(tài)名稱湃鹊,不然會出現(xiàn)Disk IO 已注冊的錯誤信息。
zabbix3 Cannot create graph: graph with the same name "Disk IO" already exists
在監(jiān)控項中選擇上面添加的6個監(jiān)控項。
測試效果
重啟客戶端的zabbix_agentd蹬竖,然后在zabbix服務(wù)端對服務(wù)發(fā)現(xiàn)和寫扇區(qū)次數(shù)進行測試。代碼如下灰伟,有顯示內(nèi)容說明已經(jīng)部署成功呆奕。
?查看圖形化,選擇監(jiān)控主機偏窝,圖形中查看收恢,若還沒有項,需要等個幾分鐘再看祭往。
?問題:
網(wǎng)上有網(wǎng)友用的是python來實現(xiàn)自動發(fā)現(xiàn)功能伦意,但測試發(fā)現(xiàn)老是報錯:
python import: command not found
可能是依賴包有問題,考慮到集群服務(wù)器的python環(huán)境問題硼补,因此就不考慮用python的實現(xiàn)驮肉。
以上的內(nèi)容也是基于之前的文章中的內(nèi)容作為介紹基礎(chǔ),若有其他問題可先看之前的文章中介紹的基礎(chǔ)環(huán)境已骇。