分布式監(jiān)控系統(tǒng)Zabbix3.2添加自動(dòng)發(fā)現(xiàn)磁盤IO并注冊監(jiān)控(推薦)
服務(wù)器磁盤的運(yùn)作情況在一定程度上反應(yīng)系統(tǒng)的負(fù)載。
磁盤通常是服務(wù)器最慢的設(shè)備,極容易出現(xiàn)瓶頸,通過監(jiān)控可以判斷出整個(gè)系統(tǒng)的短板。
zabbix并沒有給我們提供這么一個(gè)模板來完成在Linux中磁盤IO的監(jiān)控,所以我們需要自己來創(chuàng)建一個(gè),在此還是在Linux OS中添加。
由于一臺(tái)服務(wù)器中磁盤眾多,如果只一兩臺(tái)可以手動(dòng)添加,但服務(wù)集群達(dá)到幾十那就非常麻煩,因此需要利用自動(dòng)發(fā)現(xiàn) 這個(gè)功能,自動(dòng)發(fā)現(xiàn)后自動(dòng)添加對服務(wù)器磁盤的監(jiān)控,而且添加磁盤后也會(huì)自動(dòng)添加到監(jiān)控,實(shí)現(xiàn)自動(dòng)化運(yùn)維的效果,所以在這里也演示一次自動(dòng)發(fā)現(xiàn)的配置。
打開Linux模板,添加自動(dòng)發(fā)現(xiàn)規(guī)則
上面的key值是需要在 zabbix_agent.conf 中配置的
UserParameter=disk.discovery,/usr/local/share/zabbix/alertscripts/disk_discovery.sh
自動(dòng)發(fā)面的規(guī)則用shell代碼實(shí)現(xiàn),返回一段磁盤的json list
代碼 disk_discovery.sh
#!/bin/bash diskarray=(`cat /proc/diskstats |grep -E "\bsd[abcdefg]\b|\bxvd[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"
到此自動(dòng)發(fā)現(xiàn)磁盤已完,有點(diǎn)簡單吧。
添加監(jiān)控項(xiàng)
按照上面的內(nèi)容添加第一個(gè)寫扇區(qū)的次數(shù)監(jiān)控,接下來按下面的內(nèi)容添加共6個(gè)內(nèi)容。
內(nèi)容介紹
名稱: {#DISK_NAME}磁盤讀的次數(shù) 鍵值: disk.status[{#DISK_NAME},read.ops] 單位: ops/second 儲(chǔ)存值:差量(每秒速率) 名稱: {#DISK_NAME}磁盤寫的次數(shù) 鍵值: disk.status[{#DISK_NAME},write.ops] 單位: ops/second 儲(chǔ)存值:差量(每秒速率) 名稱: {#DISK_NAME}磁盤讀的毫秒數(shù) 鍵值: disk.status[{#DISK_NAME},read.ms] 單位: ms 儲(chǔ)存值:差量(每秒速率) 名稱: {#DISK_NAME}磁盤寫的毫秒數(shù) 鍵值: disk.status[{#DISK_NAME},write.ms] 單位: ms 儲(chǔ)存值:差量(每秒速率) 名稱: {#DISK_NAME}讀扇區(qū)的次數(shù) 鍵值: disk.status[{#DISK_NAME},read.sectors] 單位: B/sec 使用自定義倍數(shù): 512 儲(chǔ)存值:差量(每秒速率) 名稱: {#DISK_NAME}寫扇區(qū)的次數(shù) 鍵值: disk.status[{#DISK_NAME},write.sectors] 單位: B/sec 使用自定義倍數(shù): 512 儲(chǔ)存值:差量(每秒速率)
然后如果得到這些值是需要shell腳本的:
disk_status.sh
#/bin/sh device=$1 DISK=$2 case $DISK in read.ops) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $4}' #//磁盤讀的次數(shù) ;; read.ms) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $7}' #//磁盤讀的毫秒數(shù) ;; write.ops) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $8}' #//磁盤寫的次數(shù) ;; write.ms) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $11}' #//磁盤寫的毫秒數(shù) ;; io.active) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $12}' #//I/O的當(dāng)前進(jìn)度, ;; read.sectors) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $6}' #//讀扇區(qū)的次數(shù)(一個(gè)扇區(qū)的等于512B) ;; write.sectors) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $10}' #//寫扇區(qū)的次數(shù)(一個(gè)扇區(qū)的等于512B) ;; io.ms) /bin/cat /proc/diskstats | grep "\b$device\b" | head -1 | awk '{print $13}' #//花費(fèi)在IO操作上的毫秒數(shù) ;; esac
在客戶端中的zabbix_agent.conf 中一起配置:
UserParameter=disk.discovery,/usr/local/share/zabbix/alertscripts/disk_discovery.sh UserParameter=disk.status[*],/usr/local/share/zabbix/alertscripts/disk_status.sh $1 $2
要注意的是以上兩個(gè)文件需要給x 執(zhí)行權(quán)限。
添加圖形顯示
在圖形原型中添加,注意名稱中要帶哪個(gè)磁盤的動(dòng)態(tài)名稱,不然會(huì)出現(xiàn)Disk IO 已注冊的錯(cuò)誤信息。
zabbix3 Cannot create graph: graph with the same name "Disk IO" already exists
在監(jiān)控項(xiàng)中選擇上面添加的6個(gè)監(jiān)控項(xiàng)。
測試效果
重啟客戶端的zabbix_agentd,然后在zabbix服務(wù)端對服務(wù)發(fā)現(xiàn)和寫扇區(qū)次數(shù)進(jìn)行測試。代碼如下,有顯示內(nèi)容說明已經(jīng)部署成功。
查看圖形化,選擇監(jiān)控主機(jī),圖形中查看,若還沒有項(xiàng),需要等個(gè)幾分鐘再看。
問題:
網(wǎng)上有網(wǎng)友用的是python來實(shí)現(xiàn)自動(dòng)發(fā)現(xiàn)功能,但測試發(fā)現(xiàn)老是報(bào)錯(cuò):
python import: command not found
可能是依賴包有問題,考慮到集群服務(wù)器的python環(huán)境問題,因此就不考慮用python的實(shí)現(xiàn)。
總結(jié)
以上所述是小編給大家介紹的分布式監(jiān)控系統(tǒng)Zabbix3.2添加自動(dòng)發(fā)現(xiàn)磁盤IO并注冊監(jiān)控,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!