2021年6月9日 星期三

[經驗分享] LibreNMS 搭配 check_mk 硬碟溫度讀取異常問題處理

 


LibreNMS 除了以 SNMP 取得訊息外,還可以在目標監測裝置上搭配 check_mk agent 增加更詳盡的數據。

不過,最近新增加幾部主機進來 LibreNMS 監測時,卻發現 check_mk 所取得的硬碟溫度資訊都出現錯誤,本篇記錄手動解決此問題的過程。





問題狀況

最近我加購了幾部小主機,安裝為 Proxmox VE 後也加入 LibreNMS 監測,但卻發現 check_mk 回報的硬碟資訊異常,有一部正常,兩部異常。


硬碟溫度數據異常


為了要能夠完整掌握硬碟溫度資訊,所以開始花點時間追查這個問題,並試圖解決。










解決方式

由於這幾部小主機都沒有支援 ipmi,所以可明確判定問題是出在 check_mk 讀取硬碟溫度時出現的錯誤,而 check_mk 讀取硬碟溫度相關的程式位於 /usr/lib/check_mk_agent/local/hddtemp 這支程式裡面。


check_mk hddtemp 程式修改前


剛開始在追查時,原本以為是因為沒有安裝 parallel 這支程式所造成的問題,但經過反覆驗證後,發現問題是在「主機有兩顆以上的磁碟」時發生,所以能夠確認問題原因是發生在上圖中黃色箭頭之處 ${hddtemp} -w -q ${disks} 2>/dev/null

當有兩顆磁碟具有溫度資訊時,在 ${disks} 的語法裡面會變成兩筆資料,當它丟給 hddtemp (/usr/sbin/hddtemp,真的讀取溫度用的程式,不是 check_mk 附的腳本) 這支取得溫度資訊的程式時,格式錯誤致無法擷取溫度資訊。


我發現 hddtemp 要吃多個磁碟的話,是同一行用空格分隔即可,因此我把該行修改為 $($hddtemp -w -q $disks 2>/dev/null) ,如下圖:



check_mk hddtemp 程式修改後


經過修改以後,在下次輪詢時即可擷取到正確的溫度資訊,重新寫回到數據與圖表上。




硬碟溫度數據已可正常擷取



註:

因為避免被自動格式轉換問題,check_mk 中間的底線被我更換為全形,使用時請您修改回半形的底線。