New RelicとPagerDutyを連携して自動診断を実行してみる

[New Relic Advent Calendar 2022](https://qiita.com/advent-calendar/2022/newrelic)の21日目の記事です。
## はじめに
New Relic には[公式のIntegration](https://docs.newrelic.com/docs/alerts-applied-intelligence/notifications/notification-integrations/#pagerduty)が用意されているため、簡単にPagerDutyと連携させることができます。
New RelicからPagerDutyにアラートを送り、自動診断ジョブを実行する流れを例に、設定方法を説明します。
## 2通りのIntegration方法
**Account Integration:**
- PagerDutyの1つのアカウントに存在する全Serviceを、1つのNew Relic Destinationで利用できるようにする方法
- [Global Orchestration](https://qiita.com/ymotomu/items/1edf89eb77a03f8b64e3)は利用できず、[Service Orchestration](https://qiita.com/ymotomu/items/29495cd968f9c23d1939)のみ

**Service Integration:**
- PagerDutyの特定のIntegration-KeyとNew Relic Destinationを1:1で紐付ける方法
- [Service Orchestration](https://qiita.com/ymotomu/items/29495cd968f9c23d1939)に加えて、[Global Orchestration](https://qiita.com/ymotomu/items/1edf89eb77a03f8b64e3)が利用可能
- API Keyではなく、ServiceのIntegration Keyだけで利用できるため、AdminやAccount Owner等の権限がなくても利用可能

本記事ではService Integrationを利用します。
## 1) PagerDutyでIntegration-Keyを発行する
[Global Orchestration](https://qiita.com/ymotomu/items/1edf89eb77a03f8b64e3)(推奨)または[Service Orchestration](https://qiita.com/ymotomu/items/29495cd968f9c23d1939)を利用して、Integration-Keyを発行してください。

## 2) New RelicでDestinationを設定する
Alerts & AI > Destinations を開き、Add a destinationからPagerDutyを選択、Service Integrationタブを開きます。
- **Service name**: 送り先をnew relic上で識別するためのサービス名を入力
- **Integration-Key**: 1)で作成したIntegration-Keyを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/d311cb87-6fd6-51aa-fb3c-22ab00884934.png)

## 3) New RelicでPolicyを設定する
Alerts & AI > Alert Policies を開き、"+ New alert policy" をクリックします。
Create alert policy画面で、Policy nameを記入し、 Incident Groupingの粒度*を選択したら、"Set up notifications" をクリックします。

*: PagerDutyのAIOps(Alert Grouping機能)を利用する場合は、粒度は細かくしておくことを推奨します。PagerDuty側でインシデント全体の状況が把握し易くなり、多数のアラートが発生した場合でも集約して管理が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/6f864ce8-cb2d-4052-7d33-a04195091d50.png)


Add channelでPagerDutyを選択します。
Edit notification message画面で、アラートの送付先とアラートに含めるデータを設定します。
- **PagerDuty destination**: 2)で作成したDestinationを選択

"Send test notification"をクリックすると、PagerDutyにテストアラートを送ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/7ff99ea7-c52f-e689-6c1b-b530dbb630b1.png)

PagerDuty上で、テストアラートによるインシデントが起票されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/98ab95dd-492c-bd85-0ccf-38e153e2709d.png)
## 4) PagerDutyでEvent Orchestrationを設定する
このアラートをPagerDutyで受信した場合に、自動診断ジョブが実行されるよう、Event Orchestrationを設定します。

Services > Service Directory からアラートを受信するServiceを選択します。
Settingタブ内のEvent Managementセクションを表示します。
- "View Event Orchestration Rules" をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/609c0648-e124-df14-ec15-a4d1bf4689bc.png)


"+ New Rule" をクリックし、自動診断を実行するアラートの条件を指定します。
- `If events match certain conditions` アラートに含まれるデータを条件に利用します。
- `event.custom_details['Alert Policy Names']` 今回はCustom Details内のAlert Policy Namesを参照します
- `matches` 今回は完全一致を利用。他に部分一致や正規表現なども使えます。
- `alert policy FE - us-east-1` Alert Policy Namesの値を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/86a9feb6-3426-5c5b-8495-19e792a80816.png)

"Next" をクリックし、条件に一致した際に実行するActionを指定します。
- Process Automationから、別途作成しておいた自動診断のジョブを選択し、Saveをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/57ebd034-a425-22e3-ec73-67676c820669.png)
Event OrchestrationでService Ruleが作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/fdd5603b-c277-6fba-d46e-99fd5ba42f8d.png)
## 動作確認
New Relicからテストアラートを送ると、PagerDutyでインシデントが起票され、自動診断ジョブが実行されました。
![IncidentTimeline.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/cff2cc82-afb0-346b-375b-c893d562c45a.jpeg)

## 参考リソース
- [New Relic PagerDuty Integration](https://docs.newrelic.com/docs/alerts-applied-intelligence/notifications/notification-integrations/#pagerduty)
- [PagerDuty API Access Keys](https://support.pagerduty.com/docs/api-access-keys)
- [PagerDuty Event Orchestration](https://support.pagerduty.com/docs/event-orchestration#service-orchestrations)
- [PagerDuty 設定ガイド](https://qiita.com/ymotomu/items/e6d13e5284a62e3a1100)
- [システム障害を未然に防ぐ「インシデント管理・対応」とは](https://www.pagerduty.co.jp/blog/what-is-incident-response)
* [PagerDuty - 14日間 無料トライアル](https://www.pagerduty.co.jp/lp/free-trial/)