2018年8月14日 星期二

[專案更新]PHP Server Monitor 支援 Telegram 與繁體中文語系更新



開源伺服器監視系統 PHP Server Monitor 是一款輕巧的系統監視工具,功能雖然沒有 LibreNMS 這麼豐富,但是用來架在外點或是做為 LibreNMS 本身狀態檢查,是一款剛剛好的套件。

原本 PHP Server Monitor 的推播通知只支援 Pushover,直到前陣子它釋出新版本 v3.3.1 支援了 Telegram 通知能力,我終於可以將他與 LibreNMS 一起使用相同的通知服務,而且更加方便。

更新方式相當簡單,下載新版本覆蓋後,再執行一次 install.php 更新資料庫即可完成,可參閱相關說明。






繁體中文


過去我曾經製作過中文語系檔,這次依然為新版再次提供(不過之前是放在我的 GitHub 專案上,沒有提交回去),下圖是 Telegram 通知設定畫面。

繁體中文語系介面



這次最新的繁體中文語系檔,已經提交回官方團隊,預計在下一次新版本釋出時即會內建。

若您想先更新至 v3.3.1 並立即套用繁體中文檔,可先下載我提交中的分支版本。







結論

PHP Server Monitor 功能貴精不貴多,做為外部監控或 LibreNMS 的輔助可以說是非常適合,尤其本次又加入了 Telegram 支援,實用性大為提升。







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:


造成無法發送的元兇


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




結論

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

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