1. 程式人生 > >zabbix使用iostat命令引數監控磁碟效能

zabbix使用iostat命令引數監控磁碟效能

iostat命令

先說一個坑把,在開始監控的時候使用命令iostat -dtkx,得到的結果看上去沒問題,但是在web監控視窗資料就說不變動,為啥呢,因為iostat這個命令得到的第一個資料始終是磁碟從系統啟動到現在的相關數值,這樣如果系統很一直很平穩,得到的數值就不會有變化,除非一直很平穩,突然對磁碟的請求陡增,數值會改變。也就是iostat取得第一次資料並不是我們想要監控得資料;所以在監控指令碼中需要使用iostat -dtkx 1 2每秒鐘取兩次資料,用第二次得資料來進行磁碟效能監控

相關引數解釋

  • rrqm/s:每秒這個裝置相關的讀取請求有多少被Merge了(當系統呼叫需要讀取資料的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同的Block的資料,FS會將這個請求合併Merge)
  • wrqm/s:每秒這個裝置相關的寫入請求有多少被Merge了
  • r/s:每秒完成的讀次數
  • w/s:每秒完成的寫次數
  • rKB/s:每秒讀資料量(kb為單位)
  • wKB/s:每秒寫資料量
  • avgrq-sz:平均請求扇區的大小
  • avgqu-sz:是平均請求佇列的長度,毫無疑問,佇列長度越短越好
  • await:每一個IO請求處理的平均時間(單位是毫秒),這裡可以理解為IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了。這個時間包括了佇列時間和服務時間,也就是說,一般這種情況下,await大於svctm,它們的差值越小,則說明佇列時間越短,反之差值越在,佇列時間越長,說明系統出了問題
  • svctm:表示平均每次裝置I/O操作的服務時間(以毫秒為單位),如果svctm的值與await很接近,表示幾乎沒有I/O在等待,磁碟效能很好,如果await的值遠高於svctm的值,則表示I/O佇列等待太長,系統上執行的應用程式將變慢
  • %util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該裝置有0.8秒處理IO,而0.2秒閒置,那麼該裝置的%util=0.8/1=80%,所以該引數暗示了裝置的繁忙程度。一般地,如果該引數是100%表示已經接近滿負荷運行了(當然如果是多磁碟,即使%util是100%,因為磁碟的併發能力,所以磁碟使用未必到了瓶頸)

@ 監控指令碼

#/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 1 2 |grep "\b$Device\b" |tail -1|awk '{print $12}'
;;
esac

指令碼中得$Device代表你要監控得磁碟名,在配置zabbix_agent中,我直接寫成了vda,如果還有其他磁碟,就需要配置兩條UserParameter將傳進去得vda改為其他磁碟就可以

@ 配置zabbix_agent

新增
UserParameter=disk.io[*],/usr/local/zabbix/sh/chk_io.sh vda $1

vda對應指令碼中的Device, $1對應指令碼中的DISK

@ 配置web監控項

例如: 磁碟每秒讀資料量
對用指令碼中rKBps項,鍵值為disk.io[rKBps]
要注意的是資訊型別一定要選對,這裡應該選擇浮點型,不然會讀取不到資料報錯,預設為整數型