Sonar では、スキャン開始時や完了時等に通知を出すことができます。(詳細は Kompira Sonar 基本マニュアル > 設定手順 > スキャンの設定と実行 > スキャンのオプション > 通知 を参照してください。)
しかし webhook で通知を行う場合、通知を受け取りたいシステムによっては Sonar から送信する情報と受信する側が扱う情報の形式が異なることがあります。
情報の形式が異なると、通知を行っても情報が上手く渡らず結果的に通知が届かない可能性があります。
今回は、 AlertHub を使用して情報の形式を変換し仲介することで、Sonar の通知を Slack へ送る方法をご紹介します。
AlertHub の受信スロットを作成する
Sonar から送信した通知を AlertHub で受け取るための受信スロットを作成します。
画面横の AlertHub メニューから「受信スロット」をクリックし、画面右上の「+」ボタンをクリックします。
ダイアログが表示されるため、下記の通り入力します。
- Webhook を選択します
- 任意の表示名を入力します
- 保存をクリックします
受信スロットが作成され、一覧に表示されます。
表示名をクリックして受信スロットの詳細画面に遷移し、Sonar と連携するための URL を取得します。
Sonar の通知設定を行う
Sonar から webhook による通知を送信する設定を行います。
画面横の Sonar メニューから「ネットワーク」をクリックし、通知を行いたいネットワークの表示名をクリックします。
スキャンタブに移動し画面左の「通知」をクリックした後、右上の「WEBHOOK」をクリックします。
ダイアログが表示されるため、下記の通り入力します。
- 最初に作成した AlertHub の受信スロットの URL を貼り付けます
- 任意の表示名を入力します
- 通知が欲しいタイミングを選択します
- 保存をクリックします
Slack と連携する
AlertHub から Slack に通知を送るため、Slack にメッセージを送信するための Webhook URL を取得します。
Webhook URL の取得方法は、Slack のドキュメント を参照してください。
AlertHub の設定を行う
仲介役となる AlertHub の設定を行います。
スコープを作成する
スコープを作成します。
画面横の AlertHub メニューから「スコープ」をクリックし、画面右上の「+」ボタンをクリックします。
ダイアログが表示されるため、下記の通り入力します。
- 任意の表示名を入力します
- 保存をクリックします
ルールを作成する
ルールを作成します。
画面横の AlertHub メニューから「ルール」をクリックし、画面右上の「+」ボタンをクリックします。
ダイアログが表示されるため、下記の通り入力します。
- 任意の表示名を入力します
- 最初に作成した受信スロットを選択します
画面をスクロールし、「イベント(対象スコープを直接指定)」の「+」をクリックします。
ダイアログが表示されるため、以下の通り入力します。
- 「直接指定」を選択します
- 作成したスコープを選択します
- 作成ボタンをクリックします
イベントの編集画面が表示されるため、以下の通り入力します。
- 任意の深刻度名を入力します
- 「0」と入力します
- プルダウンより「にする」を選択します
最後に、ルール作成画面を一番下までスクロールし保存ボタンをクリックします。
トリガーを作成する
トリガーを作成します。
画面横のメニューから「スコープ」をクリックし、作成したスコープをクリックします。
スコープの詳細画面に遷移するため、「トリガー」タブをクリックし、画面右端の「+」をクリックします。
ダイアログが表示されるため、任意の表示名を入力します。
画面をスクロールし、「パラメーター加工フロー」の「+」をクリックします。
以下のダイアログが表示されるため、「フィールドを JSON としてパースする」を選択し、作成ボタンをクリックします。
パラメーター加工フローの編集画面が表示されるため、以下の通り入力します。
message.content.body
と入力します- 任意のフィールド名を入力します
最後に「実行」にて作成したアクションを選択し、保存ボタンをクリックします。
アクションを作成する
アクションを作成します。
画面横のメニューから「アクション」をクリックし、画面右上の「WEBHOOK」ボタンをクリックします。
ダイアログが表示されるため、以下の通り入力します。
- 任意の表示名を入力します
- 先で取得した Slack へ通知するための Webhook URL を入力します
- リクエスト本文に記載したい内容を入力します
- 保存ボタンをクリックします
今回はパラメーター加工フローにて、JSON 形式にパースした Sonar の通知内容を scan
という一時フィールドに保存しています。
そのため、一時フィールド scan
に保存されている各要素について {{scan.example.exammple}}
のように指定しています。
通知内容の設定については、Kompira AlertHub 基本マニュアル > 設定の流れ > アクションの作成 > 通知内容の設定 を参照してください。
Sonar から送信されるリクエストボディについては、AlertHub の「メッセージ」メニューより確認が可能です。
動作確認を行う
以上で一連の設定が完了となりますので、動作確認を行います。
通知設定を行ったネットワークでスキャンを行います。
AlertHub 上でイベントが発生しアクションが動いたことが確認できます。
実際に Slack でもスキャン開始時と完了時の通知を受信することができました。