webhook メッセージの内容を AlertHub 上で扱いたい
AlertHub は、アラートを webhook メッセージにより受信し、リクエストボディの内容を参照したり情報を加工して使用できます。
AlertHub では、リクエストボディが JSON 形式且つ Content-Type が application/json
であれば、メッセージの情報をフィールドにパースできます。
今回は、Content-Type が application/json
でない場合に JSON の情報をパースする具体例を記載します。
例として受信するアラートの webhook メッセージは以下の通りです。
{
"network": {
"networkId": "a22da125-6d20-4949-b271-XXXXXXXXX",
"displayName": "sample",
"becomeStableAfter": 7,
"becomeOutdatedAfter": 30
},
"task": {
"taskId": "de85e95e-8116-4eb1-a186-XXXXXXXXXX",
"namespace": "sonar",
"method": "scan",
"reference": {
"snapshotId": "867a6477-b950-41e3-a201-XXXXXXXXXX"
},
"status": "succeeded",
"startedAt": "2023-06-01T07:14:19Z",
"terminatedAt": "2023-06-01T07:15:02Z",
"createdAt": "2023-06-01T07:14:18Z",
"createdBy": "1b38e14f-7abb-49f0-9c6f-XXXXXXXXXX"
}
}
設定のポイント
ルールとトリガーにおいて JSON パースを行い、処理の判断や通知内容で使用できるようにします。
ルール
処理フローとイベントを以下の通り設定します。
- 処理フロー
- フィールドを JSON としてパースする:
message.content.body
を JSON パースして一時フィールドbody
に保存する
- フィールドを JSON としてパースする:
- イベント
- 深刻度の指定方法を「受信データのパスで指定」:深刻度名
body.example
と指定する
- 深刻度の指定方法を「受信データのパスで指定」:深刻度名
メッセージの内容を使ってルールで条件判断するため、処理フローでは JSON パースを行います。
上記では、処理フローで JSON パースしたリクエストボディの中身を body
という一時フィールドに保存しています。
そのため、イベントでは一時フィールドの値を指定し body.example
というように body
を頭に付けて指定します。
トリガー
パラメーター加工フローを以下の通り設定します。
- フィールドを JSON としてパースする:
message.content.body
を JSON パースして一時フィールドscan
に保存する
メッセージの内容をアクションで使うため、JSON パースを行います。
ルールの一時フィールドに保存した値は、アクションの内容には使用できないため改めて JSON パースを行います。
今回は、パラメーター加工フローにて scan
という一時フィールドに保存しているため、アクションでは scan.example
のように値を指定します。
受信スロットの作成
受信スロットを作成します。
画面横のメニューから「受信スロット」をクリックし、画面右上の「+」ボタンをクリックします。
ダイアログが表示されるため、以下の通り入力します。
- Webhook を選択します
- 任意の表示名を入力します
- 保存をクリックします
受信スロットが作成され、一覧に表示されます。
表示名をクリックして受信スロットの詳細画面に遷移し、監視システムと連携するための URL を取得します。
スコープの作成
スコープを作成します。
画面横のメニューから「スコープ」をクリックし、画面右上の「+」ボタンをクリックします。
ダイアログが表示されるため、以下の通り入力します。
- 任意の表示名を入力します
- 警戒判定閾値に任意の数値を設定します
- 障害判定閾値に任意の数値を設定します
- 必要に応じて「深刻度自動復旧の有効化」にチェックを入れ、復旧時間を指定します
- 保存をクリックします
ルールの作成
ルールを作成します。
画面横のメニューから「ルール」をクリックし、画面右上の「+」ボタンをクリックします。
ダイアログが表示されるため、以下の通り入力します。
- 任意の表示名を入力します
- 最初に作成した受信スロットを選択します
処理フローの設定
「処理フロー」の「+」をクリックします。
ダイアログが表示されるため、「フィールドを JSON としてパースする」を選択し、作成ボタンをクリックします。
処理フローの編集画面が表示されるため、以下の通り入力します。
- プルダウンより
message.content.body
を選択します - 任意のフィールド名を入力します
ここでは、イベントでリクエストボディの中身を指定できるように JSON パースし body
という一時フィールドに保存しています。
イベントの設定
「イベント(対象スコープを直接指定)」の「+」をクリックします。
ダイアログが表示されるため、以下の通り入力します。
- 「受信データのパスで指定」を選択します
- 作成したスコープを選択します
- 作成ボタンをクリックします
イベントの編集画面が表示されるため、以下の通り入力します。
- 任意の深刻度名をパスで指定します
- 「1」と入力します
- プルダウンより「増やす」を選択します
今回は、処理フローの設定 で JSON パースしたリクエストボディの中身を body
という一時フィールドに保存しています。
そのため、リクエストボディの値を指定する際には、body.example.example
というように body
を頭に付けて指定します。
ルール作成画面を一番下までスクロールし保存ボタンをクリックします。
アクションの作成
アクションを作成します。
画面横のメニューから「アクション」をクリックし、画面右上の「WEBHOOK」ボタンをクリックします。
ダイアログが表示されるため、以下の通り入力します。
- 任意の表示名を入力します
- 外部のアプリケーションへ通知するための Webhook URL を入力します
- リクエスト本文に記載したい内容を入力します1
- HTTP ヘッダーを指定します
- 保存ボタンをクリックします
通知内容の設定については、Kompira AlertHub 基本マニュアル > 設定の流れ > アクションの作成 > 通知内容の設定 を参照してください。
トリガーの作成
トリガーを作成します。
画面横のメニューから「スコープ」をクリックし、スコープの作成 で作成したスコープをクリックします。
スコープの詳細画面に遷移するため、「トリガー」タブをクリックし、画面右端の「+」をクリックします。
ダイアログが表示されるため、任意の表示名を入力します。
実行条件の設定
「実行条件」の「+」をクリックします。
ダイアログが表示されるため、「深刻度の増減を比較する」を選択し、作成ボタンをクリックします。
実行条件の編集画面が表示されるため、プルダウンより「増えた」を選択します。
パラメーター加工フローの設定
「パラメーター加工フロー」の「+」をクリックします。
ダイアログが表示されるため、「フィールドを JSON としてパースする」を選択し、作成ボタンをクリックします。
実行条件の編集画面が表示されるため、以下の通り入力します。
- 処理フローの設定と同様に
message.content.body
を指定します - 任意のフィールド名を入力します
アクションの内容に受信したリクエストボディの値を記載するため、トリガーのパラメーター加工フローにて再度 JSON パースを行います。
ルールの一時フィールドに保存した値は、アクションの内容には使用できないため注意してください。
今回は、パラメーター加工フローにて scan
という一時フィールドに保存しているため、アクションでは scan.example.example
のように値を指定しています。
画面を下にスクロールし「実行」にて アクションの作成 で作成したアクションを選択し、保存ボタンをクリックします。
以上で、AlertHub 上の設定は終了です。
動作確認
動作確認を行います。
実際にアラートを送信してみると、リクエストボディの中から対象の値を取り出して深刻度名に埋め込めました。
受信したアクションからも、同様に必要な値を取り出して記載できたことが確認できました。
アクション内での値の指定については、パラメーター加工フローの設定 で保存した値を使用します。