PagerDuty 設定ガイド (トリアージ編2) - Alert Groupingでアラートノイズを削減する

[PagerDuty Advent Calendar](https://qiita.com/advent-calendar/2023/pagerduty) 12日目の記事です。
ノイズ削減機能の1つ、Alert Groupingについて説明します。
![triage_noisereduction2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/6e83c022-905a-41c2-5e0a-590ebe8ae705.png)

## アラートをグループ化して扱うメリット
以下はグループ化されたアラートの例です。1つのインシデントに5つのアラートが紐付けられています。
![grouped_alerts2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/ded90912-2ec2-4aad-26b7-a622646cf9cc.png)

もしAlert Groupingの機能がなかった場合、このアラートの数だけ通知が行われます。インシデントへの対応はすでに開始しているにもかかわらず、アラートが発生するたびに担当者の電話やアプリが鳴り、アラートの内容を確認する必要が出てきます。

また大量のアラートが発生した際には、深刻なアラートの見落としや対応の遅れにも繋がります。

関連するアラートをグループ化し、1つのインシデントとして管理することで、余計な通知や担当者の手間を減らし、重要なインシデントへの対応を速やかに行うことができます。

## Alert Groupingの設定
Alert Groupingの設定は[Service](https://qiita.com/ymotomu/items/3cb2d8898857cdcbab02)毎に行います。
既存Serviceの設定を変更する場合は Services > Service Directory > {サービス名} を開き、Settingsタブ内のReduce Noise欄でEditをクリックします。
![configure_reduce_noise.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/877940d8-820f-34c8-9a39-82a237c0e2fb.png)

AIによるGrouping(推奨)を行う場合は、Intelligentにチェックを入れます。
Intelligent以外の方法では、Alert Content(アラートに含まれるフィールドを指定し、そのフィールドの値が一致したものをグループ化)とTime only(一定時間内に受信したアラートをグループ化)が利用できます。

rolling windowは同一インシデントにまとめるアラートの最大時間間隔を指定します。以下の例では、直近で受信したアラートと現在受信したアラートの受信時間の差が60分以内であれば、1つのインシデントにグループ化します。
当該Serviceで過去にアラートを受信していれば、推奨の値が "recommended" として表示されます。
![congigure_alert_grouping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/aa15758c-6b32-62ee-f48a-63694ffc79f7.png)

Previewをクリックすると、過去45日間に受信したアラートについてIntelligent Alert Groupingでどの程度アラートを削減できたか(インシデントにまとめられたか)を確認できます。
![alert_grouping_preview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/9c5c4f55-1c38-5121-aa03-129fc3c7fdfd.png)

## AIにフィードバックを行い、Grouping精度を高める
Intelligent Alert Groupingでは、「アラートの類似性」と「ユーザーからのフィードバック」を基に、グループ化のルールをAIが管理しています。

例えば以下の例では、"Response Time Alert..."の3つはアラートに含まれる情報の類似性からAIが1つのグループにまとめるべきと判断しています。一方で、その他2つはアラートに含まれる情報が全く異なるため、元々はグループ化されていませんでした。これらはユーザーからのフィードバックによってグループ化するよう学習したものです。
![grouped_alerts2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/ccccd9ce-dbec-65e9-37f1-e13be95f12d4.png)

複数のインシデントをチェックボックスで選択し、Merge Incidentsボタンをクリックすると、1つのインシデントのまとめることができます。Intelligent Alert Groupingでは、この操作からどのアラートをグループ化すべきか学習します。
![merge_incidents.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/2f6f1021-d64b-af4a-9868-c395da1aa3dd.png)

また、1つのインシデントにまとめたアラートを別々のインシデントとして扱うよう、フィードバックを行うこともできます。
インシデント詳細画面で、アラートのプルダウンメニューから"Move to a new incident"を選ぶと、新しいインシデントを起票し、そのインシデントにアラートを紐付けます。"Move to an existing incident"では、既存の別インシデントを選択し、そのインシデントにアラートを紐づけます。
![move_alerts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/fbd596de-a3ca-c973-cc5e-2c369bb3aad4.png)

## グループ化のルールをAIで管理するメリット
Alert Content(Content-Based)モードを利用し、グループ化のルールを人を管理することもできます。しかし、この方法では管理が煩雑になり、徐々にルールと運用が乖離してしまうなどの問題が起こる場合があります。
現場でインシデント対応を行う担当者が、ルールをきちんと理解した上で、日々の運用と並行してルールを更新し続けるのが難しいためです。

AIを利用したIntelligent Alert Groupingでは、Groupingのルールが現在どうなっているのかについての知識は必要ありません。また、現場の担当者はどのアラートをまとめるべきかについては良く理解しているため、適切なフィードバックを行うことができます。

AIの支援を活用することで、労力をかけずにルールを常に最新で適切なものに保つことができます。


## FAQ
### EventとAlertとIncidentの違いについて教えてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/31deedfe-ad7e-103f-aa25-734050f4e101.png)

**Event**は、監視ツールからPagerDutyへ送信するデータの最小単位であり、ある時点における監視項目の状態です。
監視ツールは、監視項目が閾値を超えると、HTTPS(Event API)またはEmailでEventを送ります。Eventには監視項目毎にユニークな値(dedup_key)が付与されます。

**Alert**は、監視ツールにおける監視項目に該当します。
(例:あるサーバーのCPU使用率、WebサイトのHTTPレスポンスタイム等)
同一のdedup_keyを持つEventは、同一の監視項目の状態変化として、Alert内のAlert Logに時系列で記録されます。

以下はあるAlertの詳細画面です。
同一Alertに3つのEventが記録され、最新のEventはResolvedになっていたため、AlertのステータスもResolvedに更新されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/86d7e1d3-488e-fa05-bafd-45d2174cd432.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/ff054e6e-2a34-322e-e19d-69814f90fa95.png)

**Incident**は、「対応が必要な課題」です。1つのIncidentに、関連する複数のAlertをまとめて管理することが可能です。
IncidentのステータスをResolvedに変更すると、関連する全てのAlertもResolvedに変更されます。
逆に、Incidentに紐づく全てのAlertがResolvedになると、IncidentもResolvedになります。

以下では、1つのIncidentに5つのAlertがまとめられています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2777160/6302686a-9373-200b-3546-9ef9b3f61bde.png)
参考: [イベントとアラートとインシデントの違いとは？](https://qiita.com/tomof-pd/items/447b5378d9f057355441)

### Eventを送りましたが、インシデントが起票されません。アラート一覧にも見つかりません。
同一のdedup_keyを持つEventは、1つのAlertにまとめられ、Alert詳細画面のAlert Logに記録されます。Triggered状態のAlertの中に、同じdedup_keyをもつものがないか確認ください。

新たにAlertを作成するには、既存Alertの状態をResolvedに変更するか、異なるdedup_keyを付与してEventを送ってください。

なお、EmailでEventを送る場合には、Emailの件名がdedup_keyとして使われます。そのため、複数のEmail Eventを同一の件名で送ると、1つのAlertにまとめられます。
件名を変更して、再度送信してください。

参考: [件名が同じEmailを異なるアラートとして扱う](https://qiita.com/ymotomu/items/0d3ac9a83b4a927aee1c#%E4%BB%B6%E5%90%8D%E3%81%8C%E5%90%8C%E3%81%98email%E3%82%92%E7%95%B0%E3%81%AA%E3%82%8B%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%81%86)

### Content-Based Alert Groupingを設定したのですが、グループ化されません。
Email Integrationでは、Content-Based Alert Groupingを利用できません。
Event APIを利用してEventを送ってください。

## PagerDuty設定ガイド 目次
[検知編](https://qiita.com/ymotomu/items/f9e8de2dfa94394df54c) | **[トリアージ編](https://qiita.com/ymotomu/items/1a40022feabae53e85c9)** | [動員編](https://qiita.com/ymotomu/items/e6d13e5284a62e3a1100) | 解決編 | 学習編
1. [一次対応を自動化する](https://qiita.com/ymotomu/items/1a40022feabae53e85c9)
1. [Alert Groupingでアラートノイズを削減する] << イマココ
1. [Auto Pauseで一過性アラートの通知を削減する](https://qiita.com/ymotomu/items/66aab8eb8d04bd59ac67)
1. [Event Orchestrationでアラートへの対処を自動化する](https://qiita.com/ymotomu/items/0d3ac9a83b4a927aee1c)
1. [診断や復旧作業を自動化する](https://qiita.com/ymotomu/items/f93fc956e0c4e4642516)

## 参考リソース
* [PagerDuty AIOps](https://support.pagerduty.com/main/lang-ja/docs/aiops)
    * [Intelligent Alert Grouping](https://support.pagerduty.com/main/lang-ja/docs/intelligent-alert-grouping)
    * [Content-Based Alert Grouping](https://support.pagerduty.com/main/lang-ja/docs/content-based-alert-grouping)
* [Event APIv2](https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgw-events-api-v2-overview)
    * [dedup_key](https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgx-send-an-alert-event#alert-de-duplication)
* [システム障害を未然に防ぐ「インシデント管理・対応」とは](https://www.pagerduty.co.jp/blog/what-is-incident-response)
* [PagerDuty 導入事例](https://www.pagerduty.co.jp/customers/)
* [PagerDuty - 14日間 無料トライアル](https://www.pagerduty.co.jp/lp/free-trial/)