この記事は「もくもく会ブログリレー」 17日目の記事です。

導入目的

個人で使う用途や、身内で Minecraft のサーバーを運用しているケースなど
Discord へ New Relic のアラートを通知させたいケースがあると思います。

そういう方へ向けて New Relic のアラートを Discord へ通知させる方法を紹介します。

通知方法

Discord への通知は Slack のように New Relic 側では対応していないため
Webhook を用いることで Discord へ通知させることができます。


そのため作業の流れとしては、Discord 側で Webhook の設定を行った上で
New Relic の Workflow を設定する必要があります。

Discord側での設定

先述した通り、まず Discord 側で Webhook の設定を行う必要があるため
アラートを通知したいDiscord のサーバーの [ サーバー設定 ] から [ 連携サービス ] を押下します。

その上で、[ ウェブフックを作成 ] を押下することで Webhook を作成することができます。
そして作成後に、 Webhook で Discord へポストする際の名前・画像・チャンネルを定義することができます。

最後に [ ウェブフックURLをコピー ] を押下し、Webhook の URL を控えておきましょう。
New Relic 側の操作で必要になります。

これで Discord 側の操作は完了です。

New Relic側での設定

New Relic での設定は Discord への送信部分に関わる Workflows と Destinations についてのみ
解説を行います。アラートの設定部分に関してはこの記事では説明を行いません。

左ペインから [ Alerts ] > [ Workflows ] の順に押下することで Workflows の画面へ遷移するため
Workflows の画面の右上にある [ Add a workflow ] を押下することで Workflow を作成することができます。

そうすると、Workflow の作成画面に遷移するため、[ workflow 名 ]と [ Filter data ] を入力し
[ Notify ] から [ Webhook ] を選択することで Webhook の設定を行うことができます。

その上で [ Add a destination ] を押下すると、Destinations の作成画面へ遷移し、
ここで Webhook の設定を行うことができるため、以下を入力します。

設定項目 設定値 デフォルト値
Webhook name Destinations の識別子
Endpoint URL [ Discord側での設定 ] で控えた Webhook のURL
Authorization No authorization No authorization

設定後に [ Save destination ] を押下し、設定を保存します。
保存後、Webhook テンプレートの設定画面に遷移するため、Webhook テンプレートの設定を行います。

デフォルトの状態だと、Discord の仕様に則っておらず Discord へ送信することができないため
Discord 仕様に更新をする必要があります。
Discord の Webhook の仕様についてはこちらを参考にしてください。

今回は、必要最低限にどの重要度のどのアラートが上がったのかを把握するために
このような Webhook テンプレートを用意しました。必要に応じてカスタマイズしてください。

{
  "username": "New Relic",
  "avatar_url": "画像のURL",
  "embeds": [
    {
      "title": {{ json annotations.title.[0] }},
      "url": {{ json issuePageUrl }},
        "fields": [
            {
              "name": ":warning:Severity",
              "value": {{ json priority }},
              "inline":true
            },
            {
              "name": ":red_circle:State",
              "value": {{ json state }},
              "inline":true
            }
          ]
    }
  ]
}

設定後に [ Send test notification ] を押下することでテストを行うことができます。
設定が問題なければ Discord へ通知されます。

テスト後に [ Save message ] を押下することで Webhook テンプレートの設定が保存され
Workflow の設定画面に戻るため [ Activate workflow ] を押下することで、Workflow が作成されます。

これで New Relic 側の設定も完了したため、[ Alert Policies ] との紐付けができていれば
アラートが Webhook から Discord へ通知が行われます。

動作確認

アラートの設定を行い、実際にアラートを発砲させることでDiscord へアラートを通知させることができました。

個人で使う用途の場合、Slack より Discord を使ってるケースが多いかと思うので参考にしてみてください!

最後に

明日の記事の担当は 檜山 さんの 「AWS CloudFormation IaC ジェネレーター 生成されたコードが正常にデプロイできるまでにやるべきすべてのエラー対処」 です!
これを機に、 IaC ジェネレーターの知見を広げて活用していきましょう!

引き続き、「もくもく会ブログリレー」を楽しんでください!