New Relic のアラートを Webhook とワークフローを使ってMicrosoft Teamsに通知

　New RelicのアラートをMicrosoft Teamsに通知する方法を紹介します。従来の Webhook URL を使った方法が EOL を迎えるため、Teams のワークフロー機能を使用して連携する方法です。

https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/
 
 　New Relicのアラート機能は、システムの異常やパフォーマンスの低下を即座に検知するための強力なツールです。Microsoft Teamsはチームコミュニケーションの効率を高めるために広く利用されています。この2つを連携させることにより、運用チームは迅速に問題へ対処できるようになります。

New Relic の公式ドキュメントでも設定方法が公開されています。あわせてご確認ください。

https://docs.newrelic.com/docs/alerts/get-notified/new-relic-webhook-for-microsoft-teams-workflow/

# 今回のポイント
この記事で紹介しているポイントは、次の２つです。
1. **Teamsへアラートを連携する新しい方法を知る**
 Teamsでワークフローの設定を有効化してWebhookでNew Relicのアラートを連携する方法を紹介します。
2. **Teamsで表示するメッセージのカスタマイズ方法がわかる**
 Adaptive Card を使って Teams で表示するメッセージをカスタマイズする方法を紹介します。

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

:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::

## 設定のステップ
1. Microsoft Teams での ワークフロー の有効化
2. New Relic でのアラート設定

# Microsoft Teams での ワークフロー の有効化
まず、 Microsoft のドキュメントを参考に Microsoft Teams で ワークフローを有効化することから始めましょう。

https://support.microsoft.com/ja-jp/office/create-incoming-webhooks-with-workflows-for-microsoft-teams-8ae491c7-0394-4861-ba59-055e33f75498

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

3\. 「Webhook 要求が受信されたときにチャットに投稿する」選択します

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/54f7ac72-fbf1-5a44-4759-efaa4705e9f6.png">

4\. ワークフローに名前を付け、作成します

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/8c4d30e0-1197-f5a3-c109-c7502a7227ac.png">

5\. Webhook を受信するチームとチャネルを選択して**ワークフロー**を追加します

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/523012c3-20f9-dcb8-16c1-c9a31d12a229.png">


6\. 作成できると Webhook で使用するワークフローURLが表示されるためコピーしておきます

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/1f1a2d9d-fc9d-7d20-0d25-d9d1103ba336.png">

# 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 を貼り付けます
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/594c8a5c-4145-7636-5760-d60fd5ade343.png">

5\. 「Use authorization」の設定は必要ないため、「Save destination」をクリックして保存します

## Workflow の設定
### Workflow設定の流れ
1. 「ENRICH & NOTIFY」 の 「Workflows」 をクリックします
1. 「Add a workflow」 をクリックして新しい Wokflow を作成します
1. 「Filter data」 で通知するアラートの条件を設定します。今回は Priority が 「CRITICAL」のものを通知する設定にします
![img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/3ba6637a-9bb3-743f-13d5-a1f756f3dfc7.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/93c5ce8e-838d-7f93-9bd7-91d95c5a9a36.png)

1. TemplateをカスタマイズしてPayloadの設定を行います。詳細は後ほど紹介します
1. 「Save message」をクリックし設定内容を保存します
1. 「Notify」 に Webhook が追加されていることが確認できたら、「Activate　workflow」をクリックしてworkflowの設定は完了です

### Payloadの設定

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

:::note warn
従来方式で Webhook を設定している場合は、Payloadの内容を変更する必要があるため注意してください。
:::

```json:Webhookで設定するPayload
{
	"type": "message",
	"attachments": [
		{
			"contentType": "application/vnd.microsoft.card.adaptive",
			"version": "1.0",
			"content": {
				"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
				"type": "AdaptiveCard",
				"body": [
					{
						"type": "TextBlock",
						"size": "Medium",
						"weight": "Bolder",
						"text": {{ json annotations.title.[0] }}
					},
					{
						"type": "TextBlock",
						"text": {{ json issuePageUrl }},
						"wrap": true
					},
					{
						"type": "FactSet",
						"facts": [
							{
								"title": "Priority",
								"value": {{ json priority }}
							},
							{
								"title": "Created date",
								"value": {{#timezone createdAt 'Asia/Tokyo'}}{{/timezone}}
							},
							{
								"title": "Updated date",
								"value": {{#timezone updatedAt 'Asia/Tokyo'}}{{/timezone}}
							},
							{
								"title": "Status",
								"value": {{ json state }}
							}
						]
					}
				],
				"actions": [
					{
						"type": "Action.OpenUrl",
						"title": "View in New Relic",
						"url": {{ json issuePageUrl }}
					}
				]
			}
		}
	]
}
```
すると 「Preview」に連携される通知内容が表示されます。

```json:変数が置換された通知内容
{
	"type": "message",
	"attachments": [
		{
			"contentType": "application/vnd.microsoft.card.adaptive",
			"version": "1.0",
			"content": {
				"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
				"type": "AdaptiveCard",
				"body": [
					{
						"type": "TextBlock",
						"size": "Medium",
						"weight": "Bolder",
						"text": "SyntheticCheck query deviated from the baseline at least once in 5 minutes on 'synthetics duration'"
					},
					{
						"type": "TextBlock",
						"text": "https://radar-api.service.newrelic.com/accounts/1/issues/xxxxxxx-xxxxx-xxxx-xxxx-xxxxxxx?notifier=SLACK",
						"wrap": true
					},
					{
						"type": "FactSet",
						"facts": [
							{
								"title": "Priority",
								"value": "CRITICAL"
							},
							{
								"title": "Created date",
								"value": "2024-11-12 15:08:28 JST"
							},
							{
								"title": "Updated date",
								"value": "2024-11-12 15:18:21 JST"
							},
							{
								"title": "Status",
								"value": "ACTIVATED"
							}
						]
					}
				],
				"actions": [
					{
						"type": "Action.OpenUrl",
						"title": "View in New Relic",
						"url": "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 のチャネルに通知が届けば成功です。
![TeamsMessage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/4bdf1283-a6e1-5ad1-825b-434a8977cc08.png)

この記事では Adaptive Cards の形式で通知しています。ワークフローで設定できるWebhookの受信では Adaptive Cards で受信する前提で用意されています。Adaptive Cards の内容をカスタマイズする際は、こちらのドキュメントをご確認ください。

https://adaptivecards.io/designer/

:::note warn
上記のツールで作成した JSON をそのまま貼り付けてもエラーになるため注意してください。
Body部分のみをコピーして使用してください。
:::

### カスタマイズと最適化
　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 フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/66d6a010-e4fe-4004-a09b-c01eaad5a614.png)](https://newrelic.com/jp/contact-sales)