1 トリガーによるイベント相関
概要
トリガーベースのイベント相関は、1つのトリガーによって報告された個別の問題を相関させることができます。
通常、OKイベントは1つのトリガーによって作成されたすべての問題イベントをクローズできますが、より詳細なアプローチが必要な場合もあります。たとえば、ログファイルを監視する場合、ログファイル内の特定の問題を検出し、それらを一括ではなく個別にクローズしたい場合があります。
これは、PROBLEMイベント生成モードパラメータが複数に設定されているトリガーの場合です。このようなトリガーは通常、ログ監視やトラップ処理などに使用されます。
Zabbixでは、タグ付けに基づいて問題イベントを関連付けることができます。タグは値を抽出し、問題イベントの識別を作成するために使用されます。これを利用して、タグの一致に基づいて問題を個別にクローズすることもできます。
つまり、同じトリガーがイベントタグによって識別される個別のイベントを作成できます。したがって、問題イベントは1つずつ識別され、イベントタグによる識別に基づいて個別にクローズできます。
仕組み
ログ監視では、次のような行に遭遇することがあります。
Line1: Service 1 stopped
Line2: Service 2 stopped
Line3: Service 1 was restarted
Line4: Service 2 was restarted
イベント相関のアイデアは、Line1の問題イベントをLine3の解決に、Line2の問題イベントをLine4の解決にマッチさせ、これらの問題を1つずつクローズできるようにすることです。
Line1: Service 1 stopped
Line3: Service 1 was restarted #Line 1の問題がクローズ
Line2: Service 2 stopped
Line4: Service 2 was restarted #Line 2の問題がクローズ
これを行うには、これらの関連するイベントに「Service 1」や「Service 2」などのタグを付ける必要があります。これは、タグ値を抽出するためにログ行に正規表現を適用することで実現できます。イベントが作成されると、それぞれ「Service 1」と「Service 2」でタグ付けされ、問題を解決にマッチさせることができます。
設定
item
始めに、例えばログファイルを監視するような項目を設定するのがよいでしょう:
log[/var/log/syslog]

item が設定された状態で、設定変更が反映されるまで1分ほど待ってから、Latest dataにアクセスして、
item がデータ収集を開始したことを確認します。
トリガー
アイテムが動作している状態では、トリガーを設定する必要があります。ログファイル内のどのエントリに注意を払うべきかを決めることが重要です。たとえば、次のトリガー式は 'Stopping' のような文字列を検索し、潜在的な問題を示します。
find(/My host/log[/var/log/syslog],,"regexp","Stopping")=1
文字列 "Stopping" を含む各行を障害として扱うようにするには、トリガー設定で Problem event generation mode も 'Multiple' に設定してください。
次に、復旧式を定義します。次の復旧式は、"Starting" という文字列を含むログ行が見つかった場合に、すべての障害を解決します。
find(/My host/log[/var/log/syslog],,"regexp","Starting")=1
そのため、すべての障害だけでなく、対応する根本原因の障害が確実にクローズされるようにすることが重要です。そこでタグ付けが役立ちます。
トリガー設定でタグを指定することで、障害と復旧を対応付けることができます。次の設定を行う必要があります。
- Problem event generation mode: Multiple
- OK event closes: All problems if tag values match
- イベント照合に使用するタグ名を入力する

- ログ行からタグ値を抽出するようにタグを設定する

正しく設定できていれば、Monitoring > Problems で、アプリケーションごとにタグ付けされた障害イベントと、それに対応する復旧を確認できます。

設定ミスが起こり得るため、無関係な障害に対しても類似したイベントタグが作成される可能性があります。以下のケースを確認してください。
-
インデックス付きマクロは常にトリガー設定の Expression フィールドを参照し、Recovery expression は参照しません。 たとえば、復旧イベントでは、{ITEM.VALUE1} は復旧時点における problem expression 内の最初のアイテムの最新値に解決されます。 復旧式が別のアイテムに基づいており、復旧時までに problem expression のアイテム値が変化している場合、イベントのタグが異なり、相関付けされません。
-
2つのアプリケーションが同じログファイルにエラーメッセージと復旧メッセージを書き込む場合、メッセージ形式が異なるときは、{ITEM.VALUE} マクロからサービス名、たとえば service A と service B を抽出するために、タグ値に別々の正規表現を使って、同じトリガー内で2つの service タグを異なるタグ値で使用したいと考えるかもしれません。しかし、正規表現に一致しない場合は、これは想定どおりに動作しない可能性があります。 一致しない正規表現は空のタグ値を返し、障害イベントと OK イベントの両方で空のタグ値が1つでもあれば、それらは相関付けられてしまいます。 そのため、service A の復旧メッセージが誤って service B のエラーメッセージをクローズしてしまう可能性があります。
-
実際のタグとタグ値は、トリガーが発火したときにのみ表示されます。 使用した正規表現が無効な場合は、黙って *UNKNOWN* 文字列に置き換えられます。最初の *UNKNOWN* タグ値を持つ障害イベントを見逃すと、同じ *UNKNOWN* タグ値を持つ後続の OK イベントが、クローズすべきでない障害イベントをクローズしてしまう可能性があります。
-
ユーザーがタグ値として、マクロ関数を使わずに {ITEM.VALUE} マクロを使用する場合、255文字の制限が適用されます。ログメッセージが長く、最初の255文字が特定性の低い内容である場合、無関係な障害に対しても類似したイベントタグが生成される可能性があります。