1. 程式人生 > >zabbix之 自動發現磁碟io util 監控

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