1. 程式人生 > >zabbix實現對磁盤性能動態監控

zabbix實現對磁盤性能動態監控

進行 monit 等待時間 個人 img 自動發現 -i abcdefg dev

前言

zabbix一直是小規模互聯網公司服務器性能監控首選,首先是免費,其次,有專門的公司和社區開發維護,使其穩定性和功能都在不斷地增強和完善。zabbix擁有詳細的UI界面和分組策略,在被監控的服務器上安裝好agent後,無需添加任何監控選項,因為zabbix自帶一些必要的監控,如agent.ping之類,zabbix支持畫圖,這個是專門給boss們看的,極其重要。另外還支持用戶自定義監控選項,這一點非常方便,今天我要說的就是磁盤監控,標題中為動態的監控,意指智能的識別磁盤個數,並生成相應的監控選項,因為每臺服務器的磁盤可能不一樣,所以我是使用zabbix的discovery方式。

個人認為其UI界面是比較復雜的,但是畢竟越復雜越顯得高端。我常用的不算configure和administration標簽下所有的選項(這是必不可少的),也就graphs和screen,這兩個選項是在monitor標簽下的,也是BOSS們最關註的。

說到底,所有的自動判斷都是人為的設置好所有的可能性,然後根據實際情況從中選擇,方法有很多,看大家具體要求。在這裏,我要對磁盤監控,首先要找出有哪些磁盤,這裏使用shell腳本實現。

腳本如下:

cat diskstats.sh

#!/bin/bash
diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg][0-9]*\b|\bdm-[0-9]*\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"

如上,這裏通過讀取/proc/diskstats,選擇其中的磁盤,根據實際情況,我這裏就找出類似sda或者dm-的,一定要按實際情況改寫腳本。

測試執行:zabbix_get -s 192.168.191.166 -k io.scandisk

得到如下信息:

{
"data":[
{"{#DISK_NAME}":"dm-0"},
{"{#DISK_NAME}":"dm-1"},
{"{#DISK_NAME}":"dm-2"},
{"{#DISK_NAME}":"sda"},
{"{#DISK_NAME}":"sda1"},
{"{#DISK_NAME}":"sda2"}
]
}

然後使用zabbix執行這個腳本,那麽就要將其寫到zabbix_agentd.conf中去,如下:

UserParameter=io.scandisk[*],/infra/zabbix/os/disk_scan.sh $1

對於磁盤的監控我采用iostat命令,因為它能給出磁盤的詳細信息,如扇區讀寫情況,io隊列長度,iowait,svctime等等。

命令如下:

nohup iostat -m -x -d 30 >/tmp/iostat_output &

通過tail -f /tmp/iostat_output,可獲得iostat命令收集的磁盤信息,結果類似下面:

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.43 1.63 66.07 0.09 0.45 16.55 0.47 6.90 8.41 6.86 4.75 32.18
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 1.63 66.47 0.09 0.45 16.45 0.47 6.93 8.39 6.89 4.73 32.19
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

rrqm/s: 每秒進行 merge 的讀操作數目。即 delta(rmerge)/s
wrqm/s: 每秒進行 merge 的寫操作數目。即 delta(wmerge)/s
r/s: 每秒完成的讀 I/O 設備次數。即 delta(rio)/s
w/s: 每秒完成的寫 I/O 設備次數。即 delta(wio)/s
rsec/s: 每秒讀扇區數。即 delta(rsect)/s
wsec/s: 每秒寫扇區數。即 delta(wsect)/s
rkB/s: 每秒讀K字節數。是 rsect/s 的一半,因為每扇區大小為512字節。(需要計算)
wkB/s: 每秒寫K字節數。是 wsect/s 的一半。(需要計算)
avgrq-sz: 平均每次設備I/O操作的數據大小 (扇區)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因為aveq的單位為毫秒)。
await: 平均每次設備I/O操作的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次設備I/O操作的服務時間 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (因為use的單位為毫秒)

最開始已經說了,是結合zabbix的discovery功能,所以要對zabbix做出如下設置。

技術分享圖片

這裏的鍵值一定要用在UserParameter裏定義好的鍵值才能把磁盤自動發現上來。

然後建監控項原型:

技術分享圖片

技術分享圖片

在建立好item之後,zabbix_agentd.conf中也要寫上相應的UserParameters,如下。

UserParameter=io.scandisk[*],/infra/zabbix/os/disk_scan.sh $1

UserParameter=io.rrqm[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b"|tail -1|awk ‘{print $$2}‘
UserParameter=io.wrqm[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b"|tail -1|awk ‘{print $$3}‘
UserParameter=io.rps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b"|tail -1|awk ‘{print $$4}‘
UserParameter=io.wps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$5}‘
UserParameter=io.rMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$6}‘
UserParameter=io.wMBps[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$7}‘
UserParameter=io.avgrq-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$8}‘
UserParameter=io.avgqu-sz[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$9}‘
UserParameter=io.await[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$10}‘
UserParameter=io.svctm[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$11}‘
UserParameter=io.util[*],/usr/bin/tail /tmp/iostat_output |grep "\b$1\b" |tail -1|awk ‘{print $$12}‘

建圖形原型:

技術分享圖片

最終效果圖:

技術分享圖片

zabbix實現對磁盤性能動態監控