2

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

しばらくの間、値が変更される瞬間については忘れましょう (これはアトミック操作ではないため、システムは実際のエラーではない一貫性のない状態を短時間表示する可能性があります)。過去価値。

重要なのは、2 つのアイテム (実際には 2 つのミラー ホスト上の同じアイテム) の文字列値が等しいかどうかを比較できる Zabbix トリガー式をどのように記述するかということです。

細かいマニュアルによると、私が実際に確認したように、標準の演算子=#は数値でのみ機能するため、自然な{host1:myitem[param].last(0)} # {host2:myitem[param].last(0)}. change()またはなどの関数diff()は、異なる時点での同じアイテムの値のみを比較できます。などの関数regexp()は、アイテムの値を定数文字列/正規表現とのみ比較できます。別のアイテムの値とは比較できません。これは非常に制限的です。

カスタム アイテムが実行するスクリプトに比較ロジックを移動することもできますが、少し面倒で洗練されていないため、可能であれば、Zabbix トリガー内にこのロジックを含めることをお勧めします。

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

4

3 に答える 3

2

回避策:

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

以前に受信した値以降にサーバーの1つだけが変更を確認すると、イベントがトリガーされます。

Zabbixマニュアルから、

change(float、int、str、text、log)
最後の値と前の値の差を返します。文字列の場合:
0-値は等しい
1-値は異なる

于 2012-03-13T21:25:11.010 に答える