前言:
zabbix并沒有給我們提供這麼一個模闆來完成在Linux中磁盤IO的監控,是以我們需要自己來建立一個,在此還是在Linux OS中添加。
由于一台伺服器中磁盤衆多,如果隻一兩台可以手動添加,但服務叢集達到幾十那就非常麻煩,是以需要利用 自動發現 這個功能,自動發現後自動添加對伺服器磁盤的監控,而且添加磁盤後也會自動添加到監控,實作自動化運維的效果,是以在這裡也示範一次自動發現的配置。
經測試無法自動發現多個磁盤,隻能手動把{#DISK_NAME} 改成要監控的磁盤 (例如sda、sdb,dm-*、bcache0等 虛看自己伺服器配置資訊)
如圖,我需要監控以上磁盤的三個重要名額
部署詳細步驟:
一、在被監控裝置部署如下:
1、在被監控裝置上部署自動發現的腳本disk.sh,内容如下
#!/bin/bash
diskarray=(`iostat -d -x 1 1|awk '{print $1}'|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"
在裝置上測試腳本執行後的效果:
{
"data":[
{"{#DISK_NAME}":"Device:"},
{"{#DISK_NAME}":"dm-0"},
{"{#DISK_NAME}":"dm-1"},
{"{#DISK_NAME}":"dm-2"},
{"{#DISK_NAME}":"dm-3"},
{"{#DISK_NAME}":"Linux"},
{"{#DISK_NAME}":"sda"},
{"{#DISK_NAME}":"sdb"},
{"{#DISK_NAME}":"sdc"}
]
}
我這裡簡單粗暴過濾出來了執行iostat -d -x 1 1指令後輸出的第一行,可能部分不是磁盤名稱, 不過沒有關系,在後續zabbix頁面會進行過濾的
2、腳本權重限
chmod 755 /opt/aspire/product/zabbix/bin/disk.sh
chown zabbix:zabbix /opt/aspire/product/zabbix/bin/disk.sh
3、在zabbix_agentd.conf中加入自定義監控項
UserParameter=disk.vfs.dev.read.s[*],iostat -d -x 1 1 | egrep $1 | head -1 | awk '{print $$4}'
UserParameter=disk.vfs.dev.write.s[*], iostat -d -x 1 1 | egrep $1 | head -1 | awk '{print $$5}'
UserParameter=disk.vfs.dev.untl.s[*],iostat -d -x 1 1 | egrep $1 | head -1 | awk '{print $$14}'
UserParameter=disk.discovery,/opt/aspire/product/zabbix/bin/disk.sh
4、重新開機zabbix_agent程序
二、在zabbix頁面操作如下:
1、在zabbix頁面過濾你需要監控的磁盤名稱,伺服器中部分磁盤監控意義不大 ,全量監控影響伺服器性能,我這裡是過濾出名稱以sd、dm、bc開頭的磁盤。
2、打開Linux模闆,添加自動發現規則:
這裡定義的鍵值需要與之前寫入配置檔案自動探索腳本key值一緻。
關聯配置正規表達式
3、配置監控項原型
key值與上面寫進配置檔案的保持一緻
三、檢驗結果: