2012-03-13 26 views
2

私はZabbixを使用してアプリケーションを監視しており、文字列値を返すカスタム項目を定義しています。アイテムの値は実際にはチェックサムなので、文字は[0-9a-f]のみです。私のアプリケーションの2つのミラーコピーは、冗長性のために2つのサーバー上で実行されています。私は両方のマシンからアイテムの値を取るトリガーを作成したいと思うし、それらが同じでない場合は起動します。Zabbixトリガで2つの文字列型項目の値が等しいかどうかを確認します。

値が変更された瞬間を忘れてしまいましょう(原子操作ではないため、システムが矛盾した状態になることがありますが、実際のエラーではありません)。以前のいくつかの値を見て

要点:2つのアイテム(実際には2つのミラーホスト上の同じアイテム)の文字列の値が等しいかどうかを比較できるZabbixトリガ式を書き込む方法は?

両方the fine manualによると、私が実践で確認したように、標準の演算子=#は数値だけでは動作し、私はちょうど自然{host1:myitem[param].last(0)} # {host2:myitem[param].last(0)}を書き込むことはできません。 change()diff()などの関数は、異なる時点で同じアイテムの値のみを比較できます。 regexp()のような関数は、アイテムの値を定数文字列/正規表現と比較するだけで、他のアイテムの値と比較することはできません。これは非常に限定的です。

私のカスタムアイテムが実行するスクリプトに比較ロジックを移動することはできましたが、ちょっと面倒でエレガントではありません。もし可能であれば、私のZabbixトリガー内にこのロジックを置くことをお勧めします。

おそらく上記の制限にもかかわらず、誰かが回避策を考え出すことができますか?

答えて

2

回避策:

{host1:myitem[param].change(0)} # {host2:myitem[param].change(0)} 

サーバの一つだけが、以前に受信した値からの変更を見て、イベントがトリガされます。

のZabbixマニュアルから、

変化(フロート、int型、STR、テキスト、ログ)
は最後と前回値の差を返します。文字列の場合 :
0 - 値が
1等しい - 値が、私は信じてい

+0

ありがとうございます、これは正しい方向へのステップのようですが、値の監視が開始された時点で値が既に異なる場合は、これがトリガーされません。より小さい欠点は、値が変更された瞬間にイベントがトリガされますが、その後にトリガはOKに戻ります(値は異なりますが、変更されていない)。 –

0

を異なる、と私はこれを行うには正しい方法で算出したアイテム経由であることを、これにこのEXACTような状況に苦しんでいます。

複数の項目値(文字列の差異、範囲内の数値など)の計算された比較を実行するトリガーではなく(まだ!)新しいITEMを作成したいとします。

あなたがそのアイテムを持ったら、その計算であなたが誘発できる値を与えてください。あなたは、arrhythmic操作と一緒に計算でANYトリガー関数を使用することができます。

これは非常に制限されているため、機能リクエストを提出しましたが、ほとんどのトリガー式は数値または0/1ブールに評価されます。

私は私の問題の解決策があると思います。ウェブページからバージョン番号をトラッキングしています。 v2.0.1では、文字列の値を複数の数値に変換するために、計算されたアイテムに文字列の意味と正規表現を使用することができます。これらは比較する簡単なことでしょう。

しかし、これはまた、複雑で痛いものです。

私のアドバイスが必要な場合は、トリガー式のコードを自分自身または開発者に見て、単純な文字列比較のためにパッチを送信できるかどうかを確認してください。 (差分、長さ、数値への可能な変換(バイナリや16進数の組み合わせなど)

私は自分自身でパッチを作成しようとしていますが、あまり監視していないので時間がありませんzabbixは強力ですが、いくつかの大きな欠点があります。私はまだそれが最善の監視システムだと信じています。

簡単な答え:誰かがパッチを書くまで、UserParameterを作成します。

0

文字列ではなく数値を返すようにアイテムを変更することができます。アイテムは[0-9a-f]文字のみを使用しているチェックサムであるため、16進数で書かれた数字です。したがって、チェックサムを10進数に変換する必要があります。

チェックサムが大きいので、変換前に数値(符号なし)タイプの場合は16進数を8文字に制限する必要があります。それとも、より高い精度を望むならば、あなたはフロートを使用することができます(しかし、それはより多くの仕事になります):

数値(符号なし) - 64ビットの符号なし整数
数値(フロート) - 浮動小数点数
負の値ことができます保存する。
許容範囲(MySQLの場合):-999999999999.9999〜999999999999.9999(double(16,4))。

私はZabbixが文字列のハッシュを計算し、数値として返す関数.hashedUnsigned()を持つことを望みます。このような関数は簡単に書くことができます。

関連する問題