AlertHub で受信した複数のメッセージを集約する

関連メッセージ機能による複数メッセージの集約

AlertHub では、トリガーの実行条件で受信メッセージを時間集約することが可能です。

その際に、経過時間内にイベントを発生させたメッセージの情報をアクションで利用するための機能として関連メッセージが利用できるようになりました。

関連メッセージの動作

関連メッセージは、トリガーの実行条件で以下の時間経過を伴う条件を使用した場合に利用できます。

実行条件名関連メッセージとする時間方向
指定条件を満たす直近のイベント件数を指定値を比較するイベント発生以前の時間
一定時間経過後のイベントのフィールドを指定値と比較するイベント発生以後の時間
一定時間経過後の指定した名前を持つ深刻度の値を指定値と比較するイベント発生以後の時間
一定時間経過後のスコープステータスを指定値と比較するイベント発生以後の時間

ここでは以下の様な設定をした場合を例に動作を説明します。

- 「変化前の深刻度」が「0」「と等しい」値である
- 深刻度が「増えた」
- 「60」秒経過後、「最新の深刻度」が「1」「以上の」値である

上記の場合、深刻度が「0」から増加するイベントが発生した後に、60秒待機して深刻度が依然として「1」以上だった場合にアクションが実行されることとなります。
ここで、60秒待機している間に同じスコープで発生したイベントに関わるメッセージを「関連メッセージ」として扱うことができます。

なお、トリガーの実行条件に合致してアクション実行の起因となったイベントを発生させたメッセージも関連メッセージに含まれます。

アクションでの関連メッセージ情報の設定

アクションでは関連メッセージの件数とそれぞれのメッセージ内容を利用することができます。

関連メッセージ件数の設定例

メールアクションの件名に関連メッセージの件数を含める場合は以下の様な設定となります。「relatedMessageCount」を記述すると、実際にメールが送信される際には関連メッセージ件数に置き換えられます。

メールアクションの件名に設定した例

[{{relatedMessageCount}}]件の異常を検知しました

関連メッセージが3件ある場合、送信されるメールの件名は以下の様になります。

[3]件の異常を検知しました

関連メッセージ内容の設定例

個々の関連メッセージの情報を含める場合は以下の様な設定となります。

relatedMessages」にはメッセージの情報が配列形式で保持されており、{{#relatedMessages}}{{/relatedMessages}}で囲った箇所がメッセージの件数分繰り返されて展開されます。

メールで受信したメッセージの件名と作成日時をメールアクションの本文に一覧表示させるよう設定した例

{{#relatedMessages}}
- {{content.subject}} [{{metadata.date}}]
{{/relatedMessages}}

ルールの設定などで指定可能なメッセージ情報を示す「message.content.subject」「message.content.data.xxxx」などの情報を、「message」を省いた記述で指定することができます。

関連メッセージが 3件ある場合、送信されるメールの本文は以下の様になります。

- 1件目のメッセージの件名 [2022-01-01T01:00:00+09:00]
- 2件目のメッセージの件名 [2022-01-01T02:00:00+09:00]
- 3件目のメッセージの件名 [2022-01-01T03:00:00+09:00]

なお、「relatedMessages」は個々の関連メッセージの情報を持ちますが、関連メッセージの件数が多い場合は100件が上限となります。「relatedMessageCount」は関連メッセージの実際の件数を持ちます。

関連メッセージが1,000件だった場合には、「relatedMessages」によって展開される情報は100件までとなりますが、「relatedMessageCount」の値は「1000」となります。

関連メッセージフィルター

関連メッセージ機能の基本動作では、実行条件で指定された経過時間内に発生した全てのイベントに関わるメッセージが関連メッセージとなります。
トリガー内で関連メッセージのフィルターを設定することで、イベントの内容を条件にして関連メッセージを絞り込むことができます。

「関連メッセージフィルター」を有効化した上で「+」ボタンをクリックすると、下記のポップアップが表れます。
使用したいフィルターを選択し、作成をクリックすると、詳細の設定ができるようになります。

以下では各フィルターの設定について説明します。

深刻度の増減を判定する

単純に深刻度の増減によってイベントを限定したい場合に使用します。
プルダウンより、増えた場合か減った場合かを選択します。

イベントの深刻度名を起点イベントの深刻度名と比較する

トリガーが動作する起点となったイベントの深刻度名と同じ深刻度名でイベントを限定したい場合に使用します。
プルダウンより、等しいか等しくないかを選択します。

イベントの深刻度名を指定値と比較する

イベントが起こったスコープの深刻度名を指定してイベントを限定したい場合に使用します。

  1. 「S1」に指定したい深刻度名を入力します。
  2. プルダウンより、「S1」と等しい場合か等しくない場合かを選択します。
イベントのフィールドを指定値と比較する

単純に深刻度の数値によってイベントを限定したい場合に使用します。

  1. プルダウンより、どの数値に着目するかを選択します。
  2. 「N1」に任意の数値を入力します。
  3. プルダウンより、「N1」で設定した数値と比較してどうなった場合にアクションを実行させるかを選択します。

複数メッセージを集約する設定例

実際に複数の受信メッセージを集約してアクションを実行させる設定例を紹介します。

1分間に受信した複数のメッセージを機器単位で集約する

Webhook で「message.content.data.hostname」に機器を示す情報、「message.content.data.trigger」に監視項目を示す情報が含まれた以下の様なメッセージを受信する前提とします。

{
    "hostname": "ホストA",
    "ip": "192.168.1.1",
    "trigger": "ping",
    "status": "error",
    "datetime": "2022-03-31 00:00:00"
}

ルールでは以下の様に機器単位でスコープに振り分けて1つの深刻度を加算するようにします。

スコープへの振り分けはスコープ属性を活用します。
スコープ属性の利用方法はこちらの記事を参考にしてください。

メッセージの集約は以下の様にトリガーで設定します。

①の実行条件では集約を開始する起点となるイベントを、
「変化前の深刻度が0と等しい」と「深刻度が増えた」の条件で指定しています。
また、集約する時間間隔と条件を、
「60秒経過後、最新の深刻度が1以上の値である」で指定しています。
②では、関連メッセージを深刻度を増加させたもののみに絞り込む条件を指定しています。

このトリガー設定では以下の様にメッセージが該当します。
関連メッセージは深刻度が増えたことを条件としているため、回復通知などの深刻度が増加しないメッセージは対象となりません。

アクションでは以下の様に設定することで、件数や複数メッセージの情報を含めることができます。

アクションの設定
機器[{{message.content.data.hostname}}]で複数件の異常を検知しました。

件数:{{relatedMessageCount}} 件

検知異常一覧:
{{#relatedMessages}}
- {{content.data.trigger}}異常
{{/relatedMessages}}
実際の文面
機器[ホストA]で複数件の異常を検知しました。

件数:4 件

検知異常一覧:
- ping異常
- cpu異常
- ping異常
- ping異常

1分間に受信した複数のメッセージを機器と監視項目の組み合わせで集約する

Webhook で 「message.content.data.hostname」に機器を示す情報、「message.content.data.trigger」に監視項目を示す情報、「message.content.data.datetime」に検知日時が含まれた以下の様なメッセージを受信する前提とします。

{
    "hostname": "ホストA",
    "ip": "192.168.1.1",
    "trigger": "ping",
    "status": "error",
    "datetime": "2022-03-31 00:00:00"
}

ルールでは以下の様に機器単位でスコープに振り分けて監視項目単位で深刻度を加算するようにします。

メッセージの集約は以下の様にトリガーで設定します。

①の実行条件では集約を開始する起点となるイベントを、
「深刻度名がpingと等しい」「変化前の深刻度が0と等しい」と「深刻度が増えた」の条件で指定しています。
また、集約する時間間隔と条件を、
「60秒経過後、深刻度pingが1以上の値である」で指定しています。
②では、 関連メッセージを深刻度名が ping で深刻度を増加させたもののみに絞り込む条件を指定しています。

このトリガー設定では以下の様にメッセージが該当します。
関連メッセージは深刻度名と深刻度が増えたことを条件としているため、この例では ping の異常通知が対象となります。

アクションでは以下の様に設定することで、件数や複数メッセージの情報を含めることができます。

アクションの設定
機器[{{message.content.data.hostname}}]で複数件の{{message.content.trigger}}異常を検知しました。

件数:{{relatedMessageCount}} 件

検知異常一覧:
{{#relatedMessages}}
- {{content.data.trigger}}異常 [{{content.data.datetime}}]
{{/relatedMessages}}
実際の文面
機器[ホストA]で複数件のping異常を検知しました。

件数:3 件

検知異常一覧:
- ping異常 [2022-03-31 00:00:00]
- ping異常 [2022-03-31 00:00:05]
- ping異常 [2022-03-31 00:00:10]
トリガーの設定バリエーション

トリガーの設定において、②の条件では「イベントの深刻度名を起点イベントの深刻度名と比較する」を利用して以下のように指定し、①の条件に該当した起点となるイベントと深刻度名が等しい「ping」のイベントのみに絞り込むことも可能です。

このトリガー設定では、上述の設定と同じメッセージが該当し、アクションの文面も同様になります。

TOP