異常が1分以内に回復したらアラート発生の通知が必要ない

アラートが発生しても一定時間内に障害から回復した場合は通知が不要な場合の具体例を記載します。

今回は、アラート発生から一定の時間以上経過した場合の障害通知とその後に回復した場合の回復通知が送信されるように設定します。

設定のポイント

障害通知用と回復通知用のルールとトリガーをそれぞれ設定します。

ルール

受信するアラートの webhook メッセージを判断材料として利用し、障害通知用ルールを以下の通り作成します。

今回は、受信するアラートのリクエストボディに status という項目がありその値を比較する想定で設定しています。

アラートのステータスが error の場合、深刻度を上げる設定です。

  • 処理フローの設定
    • 「フィールドが文字列を含むかどうか確認する」:message.content.data.statuserror を包含「した」場合
  • イベントの設定
    1. 「イベント(対象スコープを直接指定)」で「直接指定」を選択
    2. 深刻度名 障害通知1「増やす」

回復通知用ルールを以下の通り作成します。

障害通知と逆で、リクエストボディの statuserror でなかったの場合、深刻度を 0 に戻します。

  • 処理フローの設定
    • 「フィールドが文字列を含むかどうか確認する」:message.content.data.statuserror を包含「しなかった」場合
  • イベントの設定
    1. 「イベント(対象スコープを直接指定)」で「直接指定」を選択
    2. 深刻度名 障害通知0「にする」

トリガー

障害通知用と回復通知用のトリガーをそれぞれ作成し、実行条件を以下の通り設定します。

  • 障害通知用
    • 「スコープステータスを指定値と比較する」:スコープステータスが「正常」「と等しくない」
    • 「一定時間経過後のスコープステータスを指定値と比較する」:60 秒経過後、スコープステータスが「正常」「と等しくない」

障害通知アラートが発生した後、60 秒後もスコープの深刻度が変化していない場合に障害通知を送信する設定です。
アラートを複数件受信し深刻度が一定値とならないことを考慮し、スコープステータスにて判断しています。

  • 回復通知用
    • 「スコープステータスを指定値と比較する」:スコープステータスが「正常」「と等しい」
    • 「指定条件を満たす直近のイベント件数を指定値と比較する」:過去 60 秒間に「深刻度の変化量」が 1「以上の」イベントが 0「と等しい」回数発生した

回復通知は障害通知アラートの発生から 60 秒以内に回復した場合は送信しないようにしたいため、回復前の 60 秒間に異常が発生しなかった(=異常が発生したのは 60 秒より前である)ことを条件として設定しています。

受信スロットの作成

受信スロットを作成します。

画面横のメニューから「受信スロット」をクリックし、画面右上の「+」ボタンをクリックします。

ダイアログが表示されるため、以下の通り入力します。

  1. Webhook を選択します
  2. 任意の表示名を入力します
  3. 保存をクリックします

受信スロットが作成され、一覧に表示されます。

表示名をクリックして受信スロットの詳細画面に遷移し、監視システムと連携するための URL を取得します。

スコープの作成

スコープを作成します。

画面横のメニューから「スコープ」をクリックし、画面右上の「+」ボタンをクリックします。

ダイアログが表示されるため、以下の通り入力します。

  1. 任意の表示名を入力します
  2. 警戒判定閾値を1と設定します
  3. 障害判定閾値に任意の数値を設定します
  4. 「深刻度自動復旧の有効化」のチェックは未入力のままにします
  5. 保存をクリックします

ルールの作成

ルールを作成します。

今回は、障害通知と回復通知をそれぞれ処理するため、2 つのルールを作成します。

まず、障害通知を受信した際のルールを設定します。

画面横のメニューから「ルール」をクリックし、画面右上の「+」ボタンをクリックします。

ダイアログが表示されるため、以下の通り入力します。

  1. 任意の表示名を入力します
  2. 最初に作成した受信スロットを選択します

処理フローの設定

「処理フロー」の「+」をクリックします。

ダイアログが表示されるため、「フィールドが文字列を含むかどうか確認する」を選択し、作成ボタンをクリックします。

処理フローの編集画面が表示されるため、以下の通り入力します1

  1. message.content.data.status と入力します
  2. error と入力します
  3. プルダウンより「した」を選択します

イベントの設定

「イベント(対象スコープを直接指定)」の「+」をクリックします。

ダイアログが表示されるため、以下の通り入力します。

  1. 「直接指定」を選択します
  2. 作成したスコープを選択します
  3. 作成ボタンをクリックします

イベントの編集画面が表示されるため、以下の通り入力します。

  1. 任意の深刻度名を入力します
  2. 「1」と入力します
  3. プルダウンより「増やす」を選択します

ルール作成画面を一番下までスクロールし保存ボタンをクリックします。

続いて、回復通知を受信した際のルールを作成します。

障害通知の際と同様に、画面右上の「+」ボタンをクリックします。

ダイアログが表示されるため、以下の通り入力します。

  1. 任意の表示名を入力します
  2. 最初に作成した受信スロットを選択します

処理フローの設定

「処理フロー」の「+」をクリックします。

ダイアログが表示されるため、「フィールドが文字列を含むかどうか確認する」を選択し、作成ボタンをクリックします。

処理フローの編集画面が表示されるため、以下の通り入力します。

  1. message.content.data.status と入力します
  2. error と入力します
  3. プルダウンより「しなかった」を選択します

イベントの設定

「イベント(対象スコープを直接指定)」の「+」をクリックします。

ダイアログが表示されるため、以下の通り入力します。

  1. 「直接指定」を選択します
  2. 作成したスコープを選択します
  3. 作成ボタンをクリックします

イベントの編集画面が表示されるため、以下の通り入力します。

  1. 障害通知の際と同様の深刻度名を入力します
  2. 0 と入力します
  3. プルダウンより「にする」を選択します

ルール作成画面を一番下までスクロールし保存ボタンをクリックします。

アクションの作成

アクションを作成します。

今回は、障害通知と回復通知の 2 つについてアクションを作成します。

画面横のメニューから「アクション」をクリックし、画面右上の「WEBHOOK」ボタンをクリックします。

ダイアログが表示されるため、以下の通り入力します。

  1. 任意の表示名を入力します
  2. 外部のアプリケーションへ通知するための Webhook URL を入力します
  3. リクエスト本文に記載したい内容を入力します
  4. HTTP ヘッダーを指定します
  5. 保存ボタンをクリックします

通知内容の設定については、Kompira AlertHub 基本マニュアル > 設定の流れ > アクションの作成 > 通知内容の設定 を参照してください。

同様に、回復通知も作成します。

トリガーの作成

トリガーを作成します。

今回は、障害通知と回復通知をそれぞれ発生させるため、2 つのトリガーを作成します。

まず、障害を通知する際のトリガーを設定します。

画面横のメニューから「スコープ」をクリックし、スコープの作成 で作成したスコープをクリックします。

スコープの詳細画面に遷移するため、「トリガー」タブをクリックし、画面右端の「+」をクリックします。

ダイアログが表示されるため、任意の表示名を入力します。

実行条件の設定

「実行条件」の「+」をクリックします。

ダイアログが表示されるため、「スコープステータスを指定値と比較する」を選択し、作成ボタンをクリックします。

実行条件の編集画面が表示されるため、以下の通り入力します2

  1. プルダウンより「正常」を選択します
  2. プルダウンより「と等しくない」を選択します

もう一度「実行条件」の「+」をクリックします。

「一定時間経過後のスコープステータスを指定値と比較する」を選択し、作成ボタンをクリックします。

実行条件の編集画面が表示されるため、以下の通り入力します2

  1. 60 秒と入力します
  2. プルダウンより「正常」を選択します
  3. プルダウンより「と等しくない」を選択します

最後に、「実行」にて アクションの作成 で作成したアクションを選択し、保存ボタンをクリックします。

続いて、回復通知を行う際のトリガーを作成します。

障害通知の際と同様に、トリガーの画面右端の「+」をクリックし任意の表示名をクリックます。

実行条件の設定

「実行条件」の「+」をクリックします。

「スコープステータスを指定値と比較する」を選択し、作成ボタンをクリックします。

実行条件の編集画面が表示されるため、以下の通り入力します3

  1. プルダウンより「正常」を選択します
  2. プルダウンより「と等しい」を選択します

もう一度「実行条件」の「+」をクリックします。

「指定条件を満たす直近のイベント件数を指定値と比較する」を選択し、作成ボタンをクリックします。

実行条件の編集画面が表示されるため、以下の通り入力します3

  1. 60 秒と入力します
  2. プルダウンより「深刻度の変化量」を選択します
  3. 1 と入力します
  4. プルダウンより「以上の」を選択します
  5. 0 と入力します
  6. プルダウンより「と等しい」を選択します

最後に、「実行」にて アクションの作成 で作成したアクションを選択し、保存ボタンをクリックします。

以上で、AlertHub 上の設定は終了です。

動作確認

動作確認を行います。

実際にアラートを飛ばしてみると、黄色網掛け部分の通り、1 分以内に深刻度が回復した場合はアクションが発生しませんでした。

一方、下図の赤枠部分の通り、1 分以内に回復しなかった場合とその後回復した場合にはアクションが発生しました。

通知先のアプリケーションでも、アクションの内容を確認することができました。

1

今回は、受信するアラートのリクエストボディに status という項目がありその値を比較する想定で設定しています。
アラートのステータスが「error」の場合、深刻度を上げる設定です。

2

障害通知アラートが発生した後、60 秒後もスコープの深刻度が変化していない場合に障害通知を送信する設定です。
アラートを複数件受信し深刻度が一定値とならないことを考慮し、スコープステータスにて判断しています。

3

回復通知は障害通知アラートの発生から 60 秒以内に回復した場合は送信しないようにしたいため、回復前の 60 秒間に異常が発生しなかった(=異常が発生したのは 60 秒より前である)ことを条件として設定しています。