Snmp

如何在 Zenoss 上為字元串類型的 SNMP OID 添加事件/警報?

  • April 9, 2013

我通過 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;

引用自:https://serverfault.com/questions/497708