librenms alert rule 解決無法統計所有核心加總的平均用量

librenms 可以自訂  macros,其實是利用組合 SQL 字串最終得到一個 query,我們可以在 librenms 的資料表 alert_rules 看到一個欄位 query ,就是其組合的字串,但是我研究了許久,限制還是許多,不能做 GROUP BY 等統計。

而librenms有內建的一個 rule 叫 Processor usage over 85% ,他的警告方式是只要其中一個核心高於指定值,就會發出 alert,這其實超級不實用的,有太多應用就是只使用到單核心會操到滿載,例如虛擬化下的 VM,可能在 16 核心的機器,只分配給 1~2 核心,這台 VM 要是滿載,就可能發出警報,但事實上還有 14 核心是閒置的,所以必須要統計所有核心的加總平均用量才對。

上網找了一下別人的作法,找到這個討論串 https://www.reddit.com/r/networking/comments/3snq7v/what_are_some_good_custom_alert_rules_for_librenms/

內文用到的方式,最後是直接塞 SQL 了,但缺點是無法於WEB UI 中修改 rule,一旦修改,該 SQL 就又被取代了,這樣彈性大大降低,我自己也試了很多方法發現都無法突破,一直糾結在怎麼組合 SQL .... 但最後還是讓我找到一個一勞永逸的方式了,就是建立一個 VIEW 就好囉。

CREATE VIEW hrDeviceProcessorAvg AS select `librenms`.`hrDevice`.`device_id` AS `device_id`,round(avg(`librenms`.`hrDevice`.`hrProcessorLoad`),0) AS `hrProcessorLoad` 
from `librenms`.`hrDevice` where (`librenms`.`hrDevice`.`hrDeviceType` = 'hrDeviceProcessor') 
group by `librenms`.`hrDevice`.`device_id`

這段於 mysql 內執行會建立一個檢視表叫 hrDeviceProcessorAvg ,內容很簡單,就是將所有核心使用量平均起來

使用方式也很簡單,可以看以下截圖就知道了

那最後還要不要去管自訂 macros  ? 答案是完全不用的。

3 則評論在 librenms alert rule 解決無法統計所有核心加總的平均用量.

  1. 不好意思,最近剛好也在摸這套監控,也遇到一樣CPU監控問題

    目前已依您的方式建立view,但想建立alert rule時一直沒辦法找到hrDeviceProcessorAvg 這個條件

    請教您我是否有遺漏的哪個步驟呢?

    謝謝您。

發佈留言