本記事の目的
AlertHub は、アラートメッセージを集約して必要なアラートだけを通知します。
本記事では、AlertHub 上でアラートを集約する流れと、その設定方法を具体例に沿って紹介しています。
本記事に記載されている設定と動作確認を行うことで、 AlertHub の設定の基本的な流れを理解することができます。
アラート集約要件の例
今回の例では、以下のような状況を想定してアラートをAlertHubで集約するように設定します。
・とあるWebサーバーを担うホストに対し、HTTPリクエスト応答の有無について監視を行っている
・監視からアラートが通知される
監視状況の確認
監視から通知されるアラートメッセージが、どのような仕様で送信されているかを確認します。
ここでは、以下の仕様でアラートメッセージが送信されているものとします。
・異常が発生した場合にアラート通知が行われ、以降は復旧するまで異常は通知されない ・異常から復旧した場合にアラート通知が行われる
また、アラートメッセージはWebhookによって以下のJSONが送信されるものとします。
{ "text": "http {TRIGGER.STATUS}", "host": "{HOST.NAME1}", "trigger": "{TRIGGER.NAME}", "severity": "{TRIGGER.SEVERITY}", "datetime": "{EVENT.DATE} {EVENT.TIME}" }
監視アラートの集約方法の決定
AlertHub におけるアラートの集約方法と後続処理を決定します。
ここでは、以下の様な集約を行うものとします。
・異常が発生してアラートを受信し、1分間以内に復旧アラートを受信しなかった場合に障害発生として Webhook を送信する ・異常のアラートを受信して1分間以上経過した後に復旧した場合に回復として Webhook を送信する
Webhook では以下の JSON を送信するものとします。
{ "text": "[{{message.content.data.text}}]\n HOST:{{message.content.data.host}}\n SEVERITY:{{message.content.data.severity}}\n TRIGGER:{{message.content.data.trigger}}\n EVENT.DATETIME:{{message.content.data.datetime}}" }
設定例
上記で決定した集約要件に従って、それを実現するための設定をAlertHubの各要素に対して行います。
受信スロット
アラートメッセージを受信する受信スロットを作成します。
受信スロット画面で、右上の「+」をクリックし受信スロットを新規作成します。
種別は「Webhook」を選択し、表示名に任意の受信スロットの名称を入力して「保存」をクリックします。
作成後に受信スロットの表示名をクリックすることで、受信スロットが webhook を受け取るための URL が確認できます。
監視から通知するアラートの送信先を受信スロットに表示されている URL に設定します。
動作確認時に使用するためにメモしておいてください。
アクション
アクションは、AlertHub でアラートを集約した後の通知を実行する機能です。
メール・Webhook・Pigeon のいずれかを選択し作成できます。
アクション画面で、 「WEBHOOK」をクリックします。
下のようなダイアログに、以下の通り入力します。
- 「表示名」に任意の表示名を入力します
- 「Webhook URL」にアクションの送信先の URL を入力します
- 「HTTPメソッド」に「POST」を選択します
- 「リクエスト本文」に送信したいリクエスト内容を入力します
- 必要に応じて「HTTPヘッダ」を入力します
- 「保存」をクリックします
「リクエスト本文」は、 {{message.content.data.[プロパティ名]}}
と記述することで、受信したアラートメッセージの JSON のフィールド値を含めることができます。
詳細は、Kompira AlertHub 基本マニュアル > 設定の流れ > アクションの作成 > 通知内容の設定 を参照してください。
ここでは、 Webhook の送信先を Slack の Incoming Webhook として「Webhook URL」に指定し、 「リクエスト本文」には以下を指定しています。
{ "text": "[{{message.content.data.text}}]\n HOST:{{message.content.data.host}}\n SEVERITY:{{message.content.data.severity}}\n TRIGGER:{{message.content.data.trigger}}\n EVENT.DATETIME:{{message.content.data.datetime}}" }
スコープ
スコープは、深刻度を監視して 正常 / 警戒 / 障害 などの状態を管理します。
スコープには、プロセス / サーバなどのホスト / ネットワーク機器 / サービス / データセンター など、用途に応じて様々な粒度の要素を設定することが可能です。
ここでは、ホストのWebサーバーをスコープとして設定することとします。
スコープ画面で、右上の「+」をクリックしスコープを新規作成します。
下のようなダイアログに、以下の通り入力します。
- 「表示名」に任意の表示名を入力します
- 「障害判定閾値」を設定します
- 「警戒判定閾値」を設定します
- 必要に応じて「深刻度自動復旧の有効化」にチェックを入れます
- 4 でチェックを入れた場合、深刻度復旧時間を設定します
- 「保存」をクリックします
「表示名」は後の検索性などを考慮して、観点の種別、ホスト名、監視の種別を含めています。
「障害判定閾値」「警戒判定閾値」は、スコープのステータスを変化させる深刻度の閾値です。
深刻度が指定した値に達した場合にスコープが該当のステータスとなります。
「深刻度自動復旧の有効化」は、 スコープのステータスが「障害」や「警戒」となった後、深刻度が変化しないまま一定時間が経過した場合、ステータスを自動で「正常」に戻す機能です。
ルール
ルールは、受信したアラートメッセージの内容からどのようにスコープの深刻度を変化させるかを判断する機能です。
ルール画面で、右上の「+」をクリックしルールを新規作成します。
「表示名」に任意の表示名を入力し、「受信スロット」には事前に作成した受信スロットを選択します。
処理フロー
処理フローは、受信したアラートがどのような場合にスコープの深刻度を変化させるかを判断します。
処理フローでは、アラートメッセージから JSON のフィールド値を指定して判定することができます。
JSON のフィールド値は、 message.content.data.[プロパティ名]
という形式で指定します。
詳細は、Kompira AlertHub 基本マニュアル > 設定の流れ > フィールドの指定方法 を参照してください。
ここでは、障害アラートを処理するため以下のように設定しています。
設定した各処理フローについて説明します。
もし message.content.data.host が vo-demo-wp2 と等しい場合
この処理フローでは、 ホストの該当判定を行っています。
アラートメッセージ内の host
の値が現在設定しているスコープと一致していることを確認するフローです。
「フィールドを文字列比較する」を選択し、 「フィールド(message.content.data.host
)が文字列(vo-demo-wp2
)とオペレータ(と等しい
)で一致したメッセージを許可する」 と設定しています。
もし message.content.data.trigger が HTTP を包含した場合
この処理フローでは、 アラート種別の判定を行っています。
アラートメッセージ内の trigger
の値に「HTTP」の文字列が含まれていることを確認するフローです。
「フィールドが文字列を含むかどうか確認する」を選択し、「 フィールド(message.content.data.trigger
)が文字列(HTTP
)を含むメッセージを許可する 」と設定しています。
もし message.content.data.text が PROBLEM を包含した場合
この処理フローでは、 アラート種別の判定を行っています。
アラートメッセージ内の text
の値に「PROBLEM」の文字列が含まれていることを確認するフローです。
「フィールドが文字列を含むかどうか確認する」を選択し、 「フィールド(message.content.data.text
)が文字列(PROBLEM
)を含むメッセージを許可する」と設定しています。
イベント
イベントは、スコープの深刻度をどのように変化させるかを判断します。
イベントでは、深刻度名を設定することができます。
深刻度名は、名前を直接入力して指定するか受信したアラートメッセージを深刻度名として指定することも可能です。
詳細は 、Kompira AlertHub 基本マニュアル > 設定の流れ > フィールドの指定方法 を参照してください。
ここでは、以下の通り指定しました。
「作成」をクリックすると入力欄が表示されるため、以下の通り入力します。
- 任意の深刻度名を入力します
- 深刻度の数値を入力します
- プルダウンから「にする/増やす/減らす」を選択します
ここでは、以下の通り設定しました。
同様に回復アラートを処理するためのルールを以下の様に設定します。
トリガー
トリガーは、スコープの深刻度が変化した際に、アクションを実行するか判断します。
スコープ画面から、事前に作成したスコープの表示名をクリックします。
スコープ詳細画面で、トリガータブを選択し右上の「+」をクリックしてトリガーを新規作成します。
トリガーでは、「表示名」「実行条件」「関連メッセージ」「パラメーター加工フロー」「実行」が設定可能です。
今回は、 「表示名」「実行条件」 「実行」の部分を設定します。
まず、任意の表示名を入力します。
続いて、実行条件を設定します。
ここでは、「異常を検知してから1分間回復しなかった場合に障害通知を送信する」ことを想定して以下の通り設定します。
実行条件の内容について説明します。
スコープステータスが正常と等しくない
この実行条件では、 ステータスが「正常」ではないことの判定を行っています。
「スコープステータスを指定値と比較する」を選択し、「スコープステータスが正常 と等しくない
」と指定します。
60秒経過後、スコープステータスが正常と等しくない
この実行条件では、 1分後にもステータスが「正常」となっていないことの判定を行っています。
「一定時間経過後のスコープステータスを指定値と比較する」を選択し、「60
秒経過後、 スコープステータスが正常 と等しくない
」と指定します。
最後に、「実行」を設定します。
「アクション」を選択し、事前に作成したアクションを選択します。
以上の障害通知と同様に、1分間異常が継続した後に回復通知を送信するために、トリガーを以下のように設定します。
動作確認
上記の設定が全て完了したら、アラートメッセージを実際に送信して動作を確認します。
受信スロットで最初に作成した URL に対して HTTP リクエストを送信します。
以下は curl コマンドで障害アラートを送信する例です。
curl -X POST -H 'Content-Type: application/json' -d "{ \"text\": \"HTTP PROBLEM\", \"host\": \"vo-demo-wp2\", \"trigger\": \"HTTP\", \"severity\": \"warning\", \"datetime\": \"9999/99/99 99:99:99\" }" https://receiver.cloud.kompira.jp/webhook/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
回復アラートの場合は以下の例のように送信します。
curl -X POST -H 'Content-Type: application/json' -d "{ \"text\": \"HTTP OK\", \"host\": \"vo-demo-wp2\", \"trigger\": \"HTTP\", \"severity\": \"warning\", \"datetime\": \"9999/99/99 99:99:99\" }" https://receiver.cloud.kompira.jp/webhook/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
※HTTPリクエストの送信には、talend などの Chrome 拡張機能なども有効活用できます。
ここで、送信した HTTP リクエストによって以下のような結果になれば動作確認は完了となります。
HTTPリクエスト | 結果 | スコープ |
---|---|---|
障害アラートを送信し、 1分以上経過した後に回復アラートを送信 |
障害アラート送信の1分後にSlackへ障害通知が送られ、 その後回復通知が送られる |
深刻度が「0」→「1」、 「1」→「0」へ推移している |
障害アラートを送信し、 1分以内に回復アラートを送信 |
Slackへは何も通知されない | 深刻度が「0」→「1」、 「1」→「0」へ推移している |