SNMPを介して文字列として報告されている特定のアプリケーションのステータスがあります。
すべてが期待どおりに機能している場合、その監視は空の文字列を報告し、一部のデータソースに問題がある場合は、影響を受けるデータソースの名前を含む文字列を報告します。
その文字列が空でないときはいつでも、Zenossのイベントコンソールにアラート/情報として表示したいと思います。
問題は、SNMPタイプのデータソースを監視テンプレートに追加するたびに、数値を想定することです。
アイデアは、値がいつ変更されるかを確認するためだけにStatusThresholdを使用することでした。
この設定を行うと、イベントコンソールにイベントが表示されなくなります。
私の理解では、しきい値はRRDデータベースの値(数値のみ)に対して評価されるため、文字列は一貫して「NaN」に変換されます。
Zenossの監視テンプレートインターフェイスは、文字列を処理する直感的な方法を示していません。どうすればそれができますか?
考えられる解決策の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;