2018年8月12日 星期日

[問題處理]LibreNMS 1.42 版 Alert 功能異常



開源網路裝置管理系統 LibreNMS 簡單易用,而且可以每天自動從 GitHub 自動更新至最新版,進展快速。

不過,就在最近發生一件慘案,更新至 1.42 以後,原本我有整合 Telegram 做即時的 Alert 警報推播就失效了。



嚴重了,我每天都依靠推備警報來判斷目前的系統運作狀況,忽然沒了 Telegram 丟出來的訊息,看似平靜,但卻害怕這會是暴風雨前的寧靜。


情況追查


試過更新版本還是沒有解決問題,在 Alert Transport 處,做 Test 發送卻是正常的,這表示 整合 Telegram 機制本身沒問題,是將警報推出之前出了問題。


收不到警報推播令人害怕


既然如此,在 WebUI 上能做的已經沒有了,回到 CLI 來看一下輸出的資訊,節錄一小段。
Alert 發送
# /opt/librenms/alerts.php
Start: Fri, 03 Aug 2018 10:30:56 +0800
ClearStaleAlerts():
RunFollowUp():
RunAlerts():
Issuing Alert-UID #40852/1: telegram => ^[[A
string(21) "API '' returned Error"
string(8) "Params: "
string(152) "Return: {"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Unsupported start tag \"xxx@xxx.com.tw\" at byte offset 120"}"
ERROR: HTTP Status code 400;
Issuing Alert-UID #40723/1:
In alerts.inc.php(394) : eval()'d code line 11:
  Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

確實有錯誤。


處理問題一


在查看資料後,其中一個問題是 1.42 版起,Alert Template 的作法改了,宣告變數的方法不同,所以更新上來後提供了一個 Update Template 的按鈕幫我們轉換,但是這個轉換按鈕有問題,造成 Template 內容有誤,所以警報出不出去。

新的宣告法正確是 {{ $value['string'] }},但轉換後會少缺符號 $value['string']

相關資訊可以參考這一篇:



好了,本以為高枕無憂,那知還是無法發送........



處理問題二


還是無法發送有點惱人,回頭看看錯誤訊息還有沒有線索,確實有看到一點。

Unsupported start tag \"xxx@xxx.com.tw\" at byte

看起來跟 Email 有關,去查遍所有設定與測試都還是無法解決,直到後來發現帳號有個欄位裡面有 Email:


造成無法發送的元兇


測試一下,把紅線部份的字全刪掉,警報即可恢復運作。




結論

想不到啊..... 是個小小問題卻搞到無法送出警報訊息。

這個問題已提報開發單位參考,之後的版本應該會修正此問題。