首先創建Discovery rules,在agent端配置對應的UserParameter,調用編寫好的shell腳本,動態查找出已經掛載的磁盤分區;然後創建Item prototypes,使用vfs.dev.read[device,,]和vfs.dev.write[device,,]來監控磁盤分區的IO,包括磁盤讀寫速率、每秒讀寫扇區數、每秒讀寫操作數;然後創建Graph prototypes,生成磁盤IO圖表。
一、自動發現腳本
discan.sh
#!/bin/bash #written by boge #mail:[email protected] diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg]\b|\bxvd[abcdefg]\b|\bvd[abcdefg]\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" echo disk_scan>> /tmp/disk_scan ~
chmod +x discan.sh
做下測試:
./discan.sh
{
"data":[
{"{#DISK_NAME}":"sda"},
{"{#DISK_NAME}":"sdb"}
]
}
該腳本路徑是/opt/zabbix/bin下。
二、iostat輸出
需要寫到定時任務的文件中去。
0 * * * * /usr/bin/iostat -m -x -d 30 120 >/tmp/iostat_output 2>&1
30秒執行一次iostat,執行120次、一個小時執行一次該腳本。
三、自定義key配置文件
該文件的路徑在/opt/zabbix/etc/zabbix_agentd.conf.d下。文件名爲iostat.conf
UserParameter=io.scandisk[*],/opt/zabbix/bin/disk_scan.sh $1
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}'
一共有9個鍵值
四、web頁面添加自動發現
創建模板iostat
在該模板下創建探索iostat_discovery
3、創建項目原型。->針對九個鍵值來創建項目原型
例子:名稱:IO_avgqu-sz on $1
鍵值:io.avgqu-sz[{#DISK_NAME}]
數據類型:建議設爲浮點型。
單位:需要看iostat的輸出各個屬性的單位對應起來即可。
其他選項均可默認。
因爲每個Userparameter都要有個項目原型與其對應。所以針對此例子需要做九個項目原型。
名稱 | 鍵值 | 間隔 | 歷史記錄 | 趨勢 | 類型 | 應用集 | 狀態 | |
IO_avgqu-sz on {#DISK_NAME} | io.avgqu-sz[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_avgrq-sz on {#DISK_NAME} | io.avgrq-sz[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_await on {#DISK_NAME} | io.await[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_rMBps on {#DISK_NAME} | io.rMBps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_rps on {#DISK_NAME} | io.rps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_svctm on {#DISK_NAME} | io.svctm[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_util on {#DISK_NAME} | io.util[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_wMBps on {#DISK_NAME} | io.wMBps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 | |
IO_wps on {#DISK_NAME} | io.wps[{#DISK_NAME}] | 300 | 90 | 365 | Zabbix 代理 | iostat | 已啓用 |
啓用所選的停用所選的刪除所選的 |
根據需要可以將幾個key值放在一個圖形裏。
例如:
名稱
寬
高
圖形類別
正常層積的Pie爆發的
展示圖標
展示工作時間
展示觸發器
百分比線(左)
百分比線(右)
縱軸Y最小值MIN
計算的固定的項目
縱軸最大值
計算的固定的項目
項目
名稱 功能 繪圖風格 縱軸Y側 顏色 動作 1: iostat: IO_await on {#DISK_NAME} 所有 最小 平均 最大 線 填滿的區域 粗線 點 虛線 梯度線 左側 右 2: iostat: IO_svctm on {#DISK_NAME} 所有 最小 平均 最大 線 填滿的區域 粗線 點 虛線 梯度線 左側 右
到此爲止。自動發現做完了。可以自己再創建觸發器來設置閥值。。。
可以通過server的輸出日誌來解決錯誤。