近期數據主機的磁盤IO經常峰值,影響業務的穩定運行。得到一個需求,要求通過zabbix監控agent主機的IO狀態,要知道zabbix默認是沒有監控zabbix模板的,那么此時需要我們定義腳本獲取agent的IO性能,並在zabbix的web端定義模板來實現對數據庫主機監控
下面就來介紹如何通過zabbix對agent主機的IO性能進行監控:
【Agent段配置詳解】
# egrep -v "#|^$" /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.15.200.72 Include=/etc/zabbix/zabbix_agentd.d/*.conf
# cat /etc/zabbix/zabbix_agentd.d/scripts/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"
# cat /etc/zabbix/zabbix_agentd.d/scripts/disk_status.sh #獲取磁盤IO數據
#/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
參數詳解:
rrqm/s: 每秒進行 merge 的讀操作數目。即 delta(rmerge)/s wrqm/s: 每秒進行 merge 的寫操作數目。即 delta(wmerge)/s rps: 每秒完成的讀 I/O 設備次數。即 delta(rio)/s wps: 每秒完成的寫 I/O 設備次數。即 delta(wio)/s rsec/s: 每秒讀扇區數。即 delta(rsect)/s wsec/s: 每秒寫扇區數。即 delta(wsect)/s rkBps: 每秒讀K字節數。是 rsect/s 的一半,因為每扇區大小為512字節。(需要計算) wkBps: 每秒寫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的單位為毫秒)
# cat /etc/zabbix/zabbix_agentd.d/disk_status.conf #將兩個腳本授予執行權限,單獨寫在一個個配置文件中,
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
【Zabbix-web端配置】
1、新建模板,命名為DISK-IO,加入到Templates模板組。
2、新建一個自動發現規則
3、建立多個監控項原型
4、建立觸發器類型
5、建立圖形原型
最后將定義的模板鏈接到某個監控主機,從圖形中即可發現磁盤IO數據變化
END!