如何在 Zenoss 上為字元串類型的 SNMP OID 添加事件/警報?
我通過 SNMP 將特定應用程序的狀態報告為字元串。
當一切都按預期工作時,該監視報告一個空字元串,並且當某些數據源出現問題時,它會報告一個帶有受影響數據源名稱的字元串。
我想將該字元串顯示為 Zenoss 事件控制台上的警報/資訊,只要它不為空。
問題是,每當我將 SNMP 類型的數據源添加到監視模板時,它都會採用數值。
這個想法是使用 StatusThreshold 來查看值何時發生變化。
進行該設置後,事件控制台中不會出現任何事件。
據我了解,門檻值是根據 RRD 數據庫中的值評估的,該值僅是數字,因此字元串始終變為“NaN”。
Zenoss 的監控模板界面沒有顯示處理字元串的直覺方式。怎麼可能呢?
一種可能的解決方案非常簡單,但在網際網路上搜尋會產生很多類似的問題,這些問題要麼沒有得到回答,要麼最終採取了不同的方法,或者一開始就是一個不同的問題。
Zenoss 提供了與 Nagios 外掛集成的能力,如果您不知道這種集成是如何工作的,這可能不會引起您的注意。
基本上,這意味著您可以呼叫任意命令,只要它返回成功(清除事件)的退出程式碼 0 和錯誤(生成事件)的退出程式碼 1、2 或 3,以及 STDOUT 上格式正確的字元串。
有了這些資訊,您可以編寫一個簡單的腳本,使用 讀取您的 SNMP 數據
snmpget
,對其進行解析並列印您希望在事件中出現的消息。一個簡單而通用的 Perl 範例可以是:
#!/usr/bin/env perl use strict; use warnings; use 5.010; my ( $target, $oid, $msg ) = @ARGV; my $value = `snmpget -v1 -c <comunity> $target $oid`; $value =~ /STRING: "([^"]*)"/; exit 0 unless $1; say "$msg $1"; exit 1;
將其保存
$ZENHOME/libexec/string_monitor
在您的 zenoss 伺服器上,然後chmod +x $ZENHOME/libexec/string_monitor
然後在監控模板上,添加 COMMAND 類型的數據源並填寫命令模板欄位,如下所示:
string_monitor ${here/manageIp} <OID> "Error reported on:"
如果您不熟悉 Zenoss,請記住以下幾點:
如果您有一個 zenoss 伺服器和許多收集器的設置,這將從您的設備分配到的收集器呼叫,而不是從您的主伺服器呼叫,因此請記住在所有收集器上都有可用的腳本。當它嘗試呼叫
string_monitor
收集器但它不存在時,您最終會在事件控制台上看到一個事件,顯示為“程式碼:2 - 消息:濫用 shell 內置”
$ZENHOME/libexec/string_monitor
這是非常具有誤導性的,因為當錯誤未被發現時,很容易暗示您的腳本存在問題。:-)如果您在設置數據源時使用“測試”按鈕,這可能會特別令人困惑,在這種情況下,請求將從主伺服器發出,它似乎可以工作,然後在控制台上顯示上述錯誤。
此外,為了使您的過程更快,您可能希望 ssh 進入收集器,
sudo -i -uzenoss
然後執行zencommand run -d your.targetdevice.com -v 10
這應該會在該設備上生成完整的執行,並且您的事件應該出現在事件控制台上(假設它不是空的)。
在你讓它工作之後,也可以將實際的數字數據從你的腳本傳遞到 Zenoss,列印行的格式是:
Error string to display|failing=7 warning=31 good=24
失敗、良好和警告將作為該數據源上的數據點傳遞,您可以使用 MinMax Thresholds 或在其上繪製圖形。
作為一個簡單的開始,我建議讓它使用最小/虛擬腳本並從那裡擴展:
#!/usr/bin/env perl use strict; use warnings; use 5.010; say "We got an error|my=1 sample=6 values=10"; exit 1;