1. 程式人生 > >Zabbix通過SNMP監控多核CPU使用率時, 計算CPU平均使用率

Zabbix通過SNMP監控多核CPU使用率時, 計算CPU平均使用率

mes ces zabb ext 觸發器 trend times http sso

環境:沒有Agent,只能通過SNMP監控時,需要獲取多核CPU的平均使用率。

ZABBIX的使用SNMP監控CPU使用率時,由於設備都是多核CPU,監控的都是單獨某一核心的使用率,但單獨某一核使用率過高觸發告警實際意義不大

所以寫了一個“外部檢查”查詢CPU的每個核心的使用率,然後再計算該設備CPU的總體的一個使用率。

cd /usr/local/share/zabbix/externalscripts/
vim /usr/local/share/zabbix/externalscripts/sqlcpuload.sh
sqlcpuload.sh腳本內容如下
cd /home/zabbix/scripts/cpu/$1
|| mkdir /home/zabbix/scripts/cpu/$1 cd /home/zabbix/scripts/cpu/$1 cat /home/zabbix/scripts/cpuload.sql | sed -e "s/CNGDCOP01/$1/g" > cpuloadT.sql mysql -uzabbixapi -ppassword < cpuloadT.sql | awk ‘{ sum += $4; } END {print sum/(NR-1)}‘ rm -rf cpuloadT.sql
cpuload.sql查詢腳本如下(實際環境可以只保留需要的平均值一欄,理論上可以縮短一丟丟查詢時間)
USE
zabbix; SELECT FROM_UNIXTIME(trends_uint.clock,%Y-%m-%d %H:00:00) AS `日期______ 時間____`, trends_uint.value_min AS `最小值`, trends_uint.value_avg AS `平均值`, trends_uint.value_max AS `最大值` FROM trends_uint WHERE trends_uint.itemid = ANY( SELECT items.itemid FROM items WHERE items.hostid= ANY(SELECT `hosts`.hostid FROM
`hosts`WHERE `hosts`.`host` = CNGDCOP01 ) AND items.key_ LIKE hrProcessorLoad[% AND items.key_ NOT LIKE hrProcessorLoad[{%) and UNIX_TIMESTAMP(now())-trends_uint.clock < 7200 order by trends_uint.itemid,trends_uint.clock desc

上面查詢的該監控項的趨勢數據裏的最新的平均值,為的是節約查詢時間。

技術分享

如果數量監控數據不大,但要求比較實時,可以把trends_uint換成history_uint,縮短數據更新時間。(當然如果環境允許直接安裝agent就不用這麽麻煩了)

下面是官網對趨勢數據的說明

技術分享

---------------------------------

運行結果如下

技術分享

zabbix模板中添加監控項和觸發器

技術分享

-------最後測試OK

技術分享



Zabbix通過SNMP監控多核CPU使用率時, 計算CPU平均使用率