web-dev-qa-db-ja.com

文字列タイプSNMPOIDのイベント/アラートをZenossに追加するにはどうすればよいですか?

SNMPを介して文字列として報告されている特定のアプリケーションのステータスがあります。

すべてが期待どおりに機能している場合、その監視は空の文字列を報告し、一部のデータソースに問題がある場合は、影響を受けるデータソースの名前を含む文字列を報告します。

その文字列が空でないときはいつでも、Zenossのイベントコンソールにアラート/情報として表示したいと思います。

問題は、SNMPタイプのデータソースを監視テンプレートに追加するたびに、数値を想定することです。

アイデアは、値がいつ変更されるかを確認するためだけにStatusThresholdを使用することでした。

この設定を行うと、イベントコンソールにイベントが表示されなくなります。

私の理解では、しきい値はRRDデータベースの値(数値のみ)に対して評価されるため、文字列は一貫して「NaN」に変換されます。

Zenossの監視テンプレートインターフェイスは、文字列を処理する直感的な方法を示していません。どうすればそれができますか?

4
Carlos Lima

考えられる解決策の1つは非常に単純であることが判明しましたが、インターネットを検索すると、答えられないか、別のアプローチをとるか、最初から別の問題になる、多くの同様の質問が生成されます。

Zenossは、Nagiosプラグインと統合する機能を提供します。この統合がどのように機能するかわからない場合は、注意を引くことはできません。

基本的には、成功の場合は終了コード0(イベントのクリア)、エラーの場合は1、2、または3(イベントの生成)、およびSTDOUTで適切にフォーマットされた文字列を返す限り、任意のコマンドを呼び出すことができます。

その情報を利用して、snmpgetを使用してSNMPデータを読み取り、それを解析して、イベントに表示するメッセージを出力する簡単なスクリプトを作成できます。

単純で一般的な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;

それをzenossサーバーに$ZENHOME/libexec/string_monitorとして保存し、chmod +x $ZENHOME/libexec/string_monitorとして保存します

次に、[監視テンプレート]で、COMMANDタイプのデータソースを追加し、次のように[コマンドテンプレート]フィールドに入力します。

string_monitor ${here/manageIp} <OID> "Error reported on:"

Zenossに慣れていない場合は、次の点に注意してください。

Zenossサーバーと多数のコレクターを使用するセットアップの場合、これはメインサーバーからではなく、デバイスが割り当てられているコレクターから呼び出されるため、すべてのコレクターでスクリプトを使用できるようにしてください。コレクターでstring_monitorを呼び出そうとしても、そこにない場合は、イベントコンソールに「コード:2-メッセージ:シェルビルトインの誤用」というイベントが発生します。

$ZENHOME/libexec/string_monitorが見つからなかったというエラーの場合、スクリプトに問題があることを簡単に示唆できるため、これは非常に誤解を招く恐れがあります。 :-)

これは、データソースの設定時に[テスト]ボタンを使用する場合に特に混乱する可能性があります。その場合、リクエストは代わりにメインサーバーから行われ、機能しているように見え、代わりにコンソールに上記のエラーが表示されます。

また、プロセスを高速化するために、コレクターSudo -i -uzenossにSSH接続してzencommand run -d your.targetdevice.com -v 10を実行することもできます。

これにより、そのデバイスでフルランが生成され、イベントがイベントコンソールに表示されます(空ではなかった場合)。

動作させた後、スクリプトからZenossに実際の数値データを渡すこともできます。印刷される行の形式は次のとおりです。

Error string to display|failing=7 warning=31 good=24

失敗、正常、警告はそのデータソースのデータポイントとして渡され、MinMaxしきい値を使用するか、グラフィックをプロットできます。

簡単なスタートとして、最小限の/ダミーのスクリプトで動作させ、そこから拡張することをお勧めします。

#!/usr/bin/env Perl
use strict;
use warnings;
use 5.010;
say "We got an error|my=1 sample=6 values=10";
exit 1;
3
Carlos Lima