跳到主要內容
節省工具箱Jason Tools
經驗分享

LibreNMS 的 Address & Ports 頁面無法正常顯示問題

Jason Cheng 瀏覽 4,788 次
LibreNMS 的 Address & Ports 頁面無法正常顯示問題
本文目錄
  1. 問題原因
  2. 手動處理
  3. 結論
  4. 參考資料

我所使用的 LibreNMS,自某天開始忽然有幾個功能開起來內容都是空空如也,而這幾個功能都是我使用頻率相當高的頁面,無法顯示內容對我來說影響甚大。

問題原因

我發現在以下這幾個頁面,原本應該顯示資料表格的都變成了空白,如圖本文標題圖片一樣。

  • IPv4 Address
  • IPv6 Address
  • MAC Address
  • ARP Address
  • All Ports

我以為是更新了某個版本才發生,所以到 LibreNMS 官方討論區提出問題,而開發團隊也很快給出建議,請我查看 librenms.log 與開啟瀏覽器的開發者工具 AJAX 部份,看看是否有線索。

librenms.log 部份看起來並無異常,在瀏覽器開發者工具上,有發現可疑的部份:

瀏覽器開發者工具發現問題 (1)
瀏覽器開發者工具發現問題 (1)
瀏覽器開發者工具發現問題 (2)
瀏覽器開發者工具發現問題 (2)

看到這裡,我已經意會到問題是出在上面兩張圖中第一圖的打叉處,在「ups2」這個後面被斷行,導致相關指令碼異常無法繼續執行。因此造成資料其實都有載入到使用者的瀏覽器端,但後面資料無法被顯示的問題。

關於斷行的證據,還可以參考這兩張圖:

名稱後方多了一個空格 (1)
名稱後方多了一個空格 (1)
名稱後方多了一個空格 (2)
名稱後方多了一個空格 (2)
Capture Debug 顯示的換行結果
Capture Debug 顯示的換行結果

這種 SNMP sysName 被換行的情況少之又少,因為正常情況下,SNMP 不應該有帶著換行字元的 sysName 存在。

這次發生問題的裝置是 MegaTec NetAgent II,它是用來搭配 UPS 使用的套件,原本使用正常,更新韌體後才發生會送出換行字元的問題。

手動處理

雖然已經提供了問題原因至官方討論區,但我已經等不及官方修復,先自己動手修了。

目前的作法是針對資料庫撈出資料後,以 replace 函式將換行字元給處理掉,套用後確實解決了無法顯示的問題,有遇到同樣問題的朋友,可以先下載替換使用,請至本文參考資料的第四個連結處。

我也已經將我修改的部份提交 Pull Request 至官方團隊,不過官方團隊表示對於修改 SQL 語法的方式不建議,所以我會再另外以 SNMP Poller 時或 Web 頁面部份的語法做替換,再提交 PR 回去,可查看參考資料第二項。

[2019/03/08 補充]
已經採用新的作法,從源頭 Poller 時就把不該有的換行字元處理掉,讓存進來的 sysName、sysLocation、sysContact 是正確格式,可查看參考資料第三項。

結論

開源的好處,就是在於遇到問題可以不必等開發團隊修復才能使用,而是可以自己動手做,並且在提交回饋的過程中與開發團隊互動,不斷學習到更好的技巧與方式。

參考資料

延伸閱讀