zabbix之 自動發現磁碟io util 監控
一、iostat
Zabbix並沒有提供模板來監控磁碟的IO效能,所以我們需要自己來建立一個。iostat主要用於監控系統裝置的IO負載情況,iostat首次執行時顯示自系統啟動開始的各項統計資訊,之後執行iostat將顯示自上次執行該命令以後的統計資訊。使用者可以通過指定統計的次數和時間來獲得所需的統計資訊。所以在使用iostat監控系統IO負載的時候,不要直接iostat取結果,而是iostat -dxkt 1 2取結果,否則得到的資料根本不正確
iostat常用引數說明
-c #僅顯示CPU統計資訊.與-d選項互斥.
-d #僅顯示磁碟統計資訊.與-c選項互斥.
-k #以K為單位顯示每秒的磁碟請求數,預設單位塊.
-t #在輸出資料時,列印蒐集資料的時間.
-V #列印版本號和幫助資訊.
-x #輸出擴充套件資訊.
avg-cpu段:
%user: 在使用者級別執行所使用的CPU的百分比.
%nice: nice操作所使用的CPU的百分比.
%sys: 在系統級別(kernel)執行所使用CPU的百分比.
%iowait: CPU等待硬體I/O時,所佔用CPU百分比.
%idle: CPU空閒時間的百分比.
Device段:
tps: 每秒鐘傳送到的I/O請求數.
Blk_read /s: 每秒讀取的block數.
Blk_wrtn/s: 每秒寫入的block數.
Blk_read: 讀入的block總數.
Blk_wrtn: 寫入的block總數.
rrqm/s:每秒讀請求被合併次數
wrqm/s:每秒寫請求被合併次數
r/s:每秒完成的讀次數
w/s:每秒完成的寫次數
rkB/s:每秒讀資料量(kb)
wkB/s:每秒寫資料量(kb)
avgrq-sz:平均每次IO請求的扇區大小
avgqu-sz:平均每次IO請求的佇列長度(越短越好)
await:平均每次IO請求等待時間(毫秒),一般的系統IO等待時間應該低於5ms,如果大於10ms就比較大了。這個時間包括了佇列時間和服務時間,也就是說,一般情況下,await大於svctm,它們的差值越小,則說明佇列時間越短,反之差值越大,佇列時間越長,說明系統出了問題。
r_await:讀的平均耗時(毫秒)
w_await:寫入平均耗時(毫秒)
svctm:平均每次IO請求處理時間(毫秒),如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁碟效能很好,如果await的值遠高於svctm的值,則表示I/O佇列等待太長,系統上執行的應用程式將變慢。
%util:IO佇列非空比例,該引數暗示了裝置的繁忙程度。一般地,如果該引數是100%表示裝置已經接近滿負荷運行了
二、在被監控端上編寫自動發現和監控磁碟IO指令碼
指令碼目錄/etc/zabbix/zabbix_agentd.d/scripts
1、磁碟發現指令碼
disk_discovery.sh
#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[a-z]\b|\bxvd[a-z]\b|\bvd[a-z]\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"
2、磁碟io監控指令碼
disk_status.sh
#/bin/sh
Device=$1
DISK=$2
case $DISK in
rrqm)
iostat -dxkt 1 2|grep "\b$Device\b"|tail -1|awk '{print $2}'
;;
wrqm)
iostat -dxkt 1 2|grep "\b$Device\b"|tail -1|awk '{print $3}'
;;
rps)
iostat -dxkt 1 2|grep "\b$Device\b"|tail -1|awk '{print $4}'
;;
wps)
iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $5}'
;;
rKBps)
iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $6}'
;;
wKBps)
iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $7}'
;;
avgrq-sz)
iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $8}'
;;
avgqu-sz)
iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $9}'
;;
await)
iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $10}'
;;
svctm)
iostat -dxkt 1 2|grep "\b$Device\b" |tail -1|awk '{print $11}'
;;
util)
iostat -dxkt |grep "\b$Device\b" |tail -1|awk '{print $12}'
;;
esac
3、zabbix配置檔案
UserParameter=disk.discovery[*],/etc/zabbix/zabbix_agentd.d/scripts/disk_discovery.sh
UserParameter=disk.status[*],/etc/zabbix/zabbix_agentd.d/scripts/disk_status.sh $1 $2
4、重啟客戶端服務
5、在服務端測試
zabbix_get -s 192.168.1.211 -k 'disk.discovery[*]
三、zabbix控制檯操作
1、配置-模板-template os linux-自動發現規則 -建立發現規則
2、監控項原型(鍵值[]中的數值必須大寫,否則會報錯)
Cannot create item: item with the same key “diskio.x.[[xxxxxx]] already exists
3、圖形原型(名稱後邊要帶哪個磁碟的動態名稱,否則會報錯如下)
zabbix3 Cannot create graph: graph with the same name “Disk IO” already exists