zabbix企業應用之low level discovery監控磁盤吞吐量與iops

最近比較忙,因此好久沒有寫博客了,如今分享一下如何使用lld來監控磁盤的吞吐量與iops。 python

以前使用zabbix監控磁盤的時候,都是固定的磁盤,好比sda、sdb什麼的,而後不一樣監控磁盤名作不一樣的模板,若是磁盤名多了起來就不多麻煩,因此爲了解決這個問題,使用了lld來監控。 正則表達式

下面是監控效果圖: shell

一、Disk - Read/Write ms By vdb json

wKiom1MvkgrjYEV3AAPtuh_67Ok836.jpg

二、Disk - IO By vdb bash

wKioL1MvkLWReo7PAAPkrFVuPH4594.jpg

三、Disk - Bytes/second By vdb 服務器

wKioL1MvkhjBs5UcAAPft5CGBJk469.jpg

四、Disk - iops/second By vdb ui

wKioL1MvkkiTiQygAAQDlPQIauE847.jpg

如何實現: spa

1、客戶端 code

一、監控內容的json化 get

在客戶端裏,須要把監控的內容json化展現,而後服務端能夠經過正則來過濾出結果

下面在是個人json展現

wKiom1Mvl0_ivIEUAABgLVVWLkQ300.jpg

腳本內容以下:

10:12:14 # cat partition_low_discovery.sh
#!/bin/bash
#Fucation:zabbix low-level discovery
partition() {
            port=($(grep -E "(vd[a-z]$|sd[a-z]$)" /proc/partitions|awk '{print $4}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
                          printf '\t {\n'
                          printf "\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
                          printf '\t {\n'
                          printf "\t\t\t\"{#PARTITIONNAME}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
$1

把此文件存放到/usr/local/zabbix/bin裏,而後給與755權限,並修改用戶與組爲zabbix

#Disable requiretty

sed -i 's/^Defaults.*.requiretty/#Defaults    requiretty/'/etc/sudoers



二、修改zabbix_agentd.conf文件

在zabbix_agentd.conf最後添加如下內容

UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$4}'
UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}'
UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}'
UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}'
UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}'
UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}'
UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}'
UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}'
UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/bin/partition_low_discovery.sh $1



三、重啓zabbix服務
ps -ef|grep zabbix|grep -v grep|awk '{print $2}'|xargs kill -9
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf



2、服務端

一、模板導入

把Template partition Auto Discovery導入到zabbix裏(模板在附件),具體操做不介紹。

二、設置正則

在「管理」=》「通常」=》「正則表達式」裏,選擇「新的正則表達式」

而後設置相似以下


wKioL1MvlkTzpvPdAAIoyuO683o189.jpg

三、主機關聯模板

把須要監控partition實例的主機管理模板便可監控,默認是3600秒後自動更新,以下圖

wKioL1MvlnXBAiwWAAJ0fmJnSj8448.jpg

爲何設置3600秒?緣由是若是設置時間太短,好比你設置60s,一個是服務器的壓力大,一個是若是你檢測的端口忽然當掉了,尚未來的急報警,主機經過json來獲取不到這個信息,就認爲沒有這個端口,模板裏會自動關閉這個監控項的內容(默認保留30天,而後自動刪除),這樣報警功能就基本沒有了,因此仍是發現的間隔時間長一些比較好。

相關文章
相關標籤/搜索