New RelicのアラートをWebhookを使ってMicrosoft Teamsに通知する

:::note alert
Incoming Webhook で Microsoft Teams に New Relic のアラートを連携する方法は、Incoming Webhook がEOLを迎えるため、使用できなくなります。現在使用している場合は、**2025年1月31日**までに新しい方法へ移行する必要があります。
:::

https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/

　New Relic に Microsoft Teams の Incoming Webhook を使用した設定がある場合は、Alert の Workflows や Destinations の画面で下記のメッセージが表示されています。
 
![message.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/b8f7f829-4fc2-b48e-8f8e-a15bf8e1da4e.png)
 
 表示されている場合は設定を確認しましょう。廃止される Incoming Webhook を使用していれば下記の形式の URL が設定されています。
```
https://<TenantName>.webhook.office.com/webhookb2/~
```
:::note info
**New Relic のアラートを Microsoft Teams に連携する新しい方法は下記の記事で紹介しています。**
:::
https://qiita.com/MarthaS/items/b9dde1ae8c49f5d6e711

# はじめに
 New Relicのアラート機能は、システムの異常やパフォーマンスの低下を即座に検知するための強力なツールです。一方、Microsoft Teamsはチームコミュニケーションの効率を高めるために広く利用されています。この記事では、New RelicのアラートをMicrosoft Teamsに通知する方法を簡単に解説します。これにより、運用チームは迅速に問題へ対処できるようになります。

:::note info
最新のアップデートの詳細はこちら。　[New Relic アップデート一覧](https://newrelic.com/jp/blog/nerdlog/new-relic-update "New Relic アップデート一覧")
:::

　New Relic は、無料アカウントでも利用できます。是非永久無償ライセンスを[こちら](https://newrelic.com/jp/sign-up-japan)から試してみてください。

https://newrelic.com/jp/sign-up-japan

## 設定のステップ
1. Microsoft Teams での Webhook URL の設定
2. New Relic でのアラート設定

# Microsoft Teams での Webhook URL の設定
まず、 Microsoft のドキュメントを参考に Microsoft Teams で Webhook URL を設定することから始めましょう。

https://learn.microsoft.com/ja-jp/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet

1\. Teams で、通知を受け取りたいチャネルを選択します
2\. チャネル名の横にある「その他のオプション」(...)をクリックし、「チャネルの管理」を選択します
<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/a216d7b1-c968-b586-7d87-3c7c29aed840.png">

3\. 「コネクタ」の「編集」クリックして、「Webhook」を検索して「Incoming Webhook」選択し、「追加」をクリックします
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/fcd7eb74-763b-ac29-5281-89393cf405ad.png">
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/1f6f78fe-404c-231a-3a63-d0e9f7f2e649.png">

4\. Webhook に名前を付け、作成します。これにより、 Webhook URL が生成されます。この URL をコピーしておきましょう
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/bc638281-26fc-4484-2579-9a768920e02f.png">

5\. Webhook URL は、「Incoming Webhook」の構成から確認することもできます

# New Relic でのアラート設定
次に、 New Relic でアラートの「Destination」と「Workflow」を設定し、先ほどの Webhook URL に通知を送るようにします。

## Destination の設定
1. New Relic にログインし、メニューから「Alerts & AI」に移動します
2. 「ENRICH & NOTIFY」の「Destinations」をクリックします
3. 「Add a destination」で「Webhook」を選択してクリックします
4. 「Webhook name」を入力し、「Endpoint URL」に、 Microsoft Teams の Webhook URL を貼り付けます
![スクリーンショット 2024-03-20 5.27.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/4ca937d3-c51e-393d-413f-fa4660635226.png)
5. 「Use authorization」の設定は必要ないため、「Save destination」をクリックして保存します

## Workflow の設定
### Workflow設定の流れ
1. 「ENRICH & NOTIFY」 の 「Workflows」 をクリックします
1. 「Add a workflow」 をクリックして新しい Wokflow を作成します
1. 「Filter data」 で通知するアラートの条件を設定します。今回は Priority が 「CRITICAL」のものを通知する設定にします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/46de591d-fb0b-d47b-7e47-91135e86efb9.png)

1. 「Notify」 の 「Add channel」 から 「Webhook」 を選択します
1. 「Destination」 から 先ほど作成した Microsoft Teams の destination を選択します
![destinationの選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/46c081a6-97ec-9e13-2d6c-2a89fa0f69c1.png)
1. TemplateをカスタマイズしてPayloadの設定を行います。詳細は後ほど紹介します
1. 「Save message」をクリックし設定内容を保存します
1. 「Notify」 に Webhook が追加されていることが確認できたら、「Activate　workflow」をクリックしてworkflowの設定は完了です

### Payloadの設定
Webhookでどういった内容が通知されるかはPayloadの設定内容によって決まります。
下記の内容を「Template」にコピー＆ペーストして内容を確認してみましょう。

```json:Webhookで設定するPayload
{
    "@type": "MessageCard",
    "@context": "http://schema.org/extensions",
    "summary": "New Relic Alert",
    "sections": [{
        "activityTitle": {{ json annotations.title.[0] }},
        "activitySubtitle": {{ json issuePageUrl }},
        "facts": [
        {
            "name": "Priority",
            "value": {{ json priority }}
        },
        {
            "name": "Created date",
            "value": {{#timezone createdAt 'Asia/Tokyo'}}{{/timezone}}
        },
        {
            "name": "Updated date",
            "value": {{#timezone updatedAt 'Asia/Tokyo'}}{{/timezone}}
        },
        {
            "name": "Status",
            "value": {{ json state }}
        }
        ],
        "markdown": true
    }],
    "potentialAction": [{
        "@type": "OpenUri",
        "name": "Learn More",
        "targets": [{
            "os": "default",
            "uri": {{ json issuePageUrl }}
        }]
    }]
}
```
すると 「Preview」に連携される通知内容が表示されます。

```json:変数が置換された通知内容
{
    "@type": "MessageCard",
    "@context": "http://schema.org/extensions",
    "summary": "New Relic Alert",
    "sections": [{
        "activityTitle": "website-monitoring | simple-browser-monitor | http://XXXXXXXXXXXXXXXX.amazonaws.com:8080/ - Success query result is < 25.0 on 'Service Levels default alert condition'",
        "activitySubtitle": "https://radar-api.service.newrelic.com/accounts/1/issues/xxxxxxx-xxxxx-xxxx-xxxx-xxxxxxx?notifier=SLACK",
        "facts": [
        {
            "name": "Priority",
            "value": "CRITICAL"
        }, 
        {
            "name": "Created date",
            "value": "2024-03-20 12:43:07 JST"
        }, 
        {
            "name": "Updated date",
            "value": "2024-03-20 12:47:53 JST"
        },
        {
            "name": "Status",
            "value": "ACTIVATED"
        }
        ],
        "markdown": true
    }],
    "potentialAction": [{
        "@type": "OpenUri",
        "name": "Learn More",
        "targets": [{
            "os": "default",
            "uri": "https://radar-api.service.newrelic.com/accounts/1/issues/xxxxxxx-xxxxx-xxxx-xxxx-xxxxxxx?notifier=SLACK"
        }]
    }]
}
```

### 通知のテストと確認
　設定が完了したら、テスト通知を送信して、Microsoft Teamsで正しく表示されるかを確認しましょう。New Relic の workflow　設定ページで「Send a test notification」をクリックすると、テスト通知を送信できます。Teams のチャネルに通知が届けば成功です。
![スクリーンショット 2024-03-21 9.10.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/11c959d4-56ce-a6f6-b5e7-b5bfbc590ef8.png)

このサンプルではカードの形式で通知しています。内容をカスタマイズする際は、こちらのドキュメントをご確認ください。

https://learn.microsoft.com/ja-jp/microsoftteams/platform/task-modules-and-cards/cards/cards-reference#connector-card-for-microsoft-365-groups

### カスタマイズと最適化
　Microsoft Teams で受け取る通知の内容は、Workflow の Filter と Payload の設定内容でカスタマイズできます。例えば、Filterの設定で特定の条件や閾値を満たしたときにのみ通知を送るように設定することが可能です。また、Payload の設定をカスタマイズすることでチームのニーズに合わせて、必要な情報が通知されるように最適化できます。
　Payload の設定をカスタマイズする際は、template に `{{` を入力すると表示される補完機能を活用するのが便利です。設定可能な変数の候補を表示してくれます。
![Payloadの補完機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/ae4a55b0-ab4b-2c61-559a-b92f691978c7.png)

 　Payload のカスタマイズについては[こちらのブログ](https://newrelic.com/jp/blog/how-to-relic/workflow-rich-webhook)でも紹介されています。

https://newrelic.com/jp/blog/how-to-relic/workflow-rich-webhook

# まとめ
　New RelicのアラートをMicrosoft Teamsに通知する設定は、運用チームがシステムの問題に迅速に対処するための効率的な手段です。この記事で紹介したステップに従えば、簡単に設定を行うことができます。問題が発生した際には、運用チームが即座に通知を受け取り、迅速な対応が可能になります。

:::note info
最新のアップデートの詳細はこちら
[New Relic アップデート一覧](https://newrelic.com/jp/blog/nerdlog/new-relic-update  "New Relic アップデート一覧")
:::
:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::