PagerDutyのRulesets / Event RuleからEvent Orchestrationへの移行で試行錯誤しました

## はじめに
タイトルの通り、Rulesets/Event RuleのEOLに伴い、Event Orchestrationへの移行を検討しました。検証中にいくつか制約に引っかかり試行錯誤しましたので、初歩的な内容になりますが、いくつか紹介したいと思います。

## 参考にした資料
主に以下の資料を参照しました。
Event Orchestrationの概要・使い方などは、以下をご参照ください。
### 公式ドキュメント
[Event Orchestration](https://support.pagerduty.com/main/lang-ja/docs/event-orchestration)
### PagerDutyさんの記事
[PagerDuty 設定ガイド (トリアージ編4) - Event Orchestrationでアラートへの対処を自動化する](https://qiita.com/ymotomu/items/0d3ac9a83b4a927aee1c)

## 前提
Service Event Ruleを使用している場合は、以下の通り簡単にService Orchestrationに移行できます。
[Service Orchestrationへの切り替え
](https://support.pagerduty.com/main/lang-ja/docs/event-orchestration#switch-to-service-orchestrations)

ただ、Global Event Ruleについては、簡単に切り替えることはできず、手動でService Orchestrationに移行する必要があるようです。

## 1. ルールセットの制限
Orchestration Rulesは、縦横に複数のEvent Ruleを作成することができます。
そして、縦に作っていく一連のルールのグループをルールセットと呼ぶようです。
そのルールセットの制限として、一つのルールセットには最大で25個までしかルールを作成できません。

![スクリーンショット 2024-12-11 12.55.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956351/df17ffad-a8e6-1ef1-1545-a798c50d8f30.png)

[ルールセットの制限](https://support.pagerduty.com/main/lang-ja/docs/event-orchestration#:~:text=%F0%9F%93%98-,%E3%83%AB%E3%83%BC%E3%83%AB,-%E3%82%BB%E3%83%83%E3%83%88%E3%81%AE%E5%88%B6%E9%99%90)


## 2. ルールのネスト
定義したいルールが多い場合、縦に25個しかルールを作成できないので、ルールをネストする（横に広げる）など工夫する必要があります。
ルールをネストする機能は、条件を管理しやすくなるので便利だと感じました。

![スクリーンショット 2024-12-11 12.58.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956351/e9c22e86-c538-7fea-d340-2a16f249955b.png)

ただ、ルールをネストする機能については、プランを`Advanced Event Orchestration`にする必要があります。プランが`Basic Event Orchestration`の場合は利用できません。

[Event Orchestrationの価格
](https://support.pagerduty.com/main/lang-ja/docs/event-orchestration#event-orchestration-pricing-tiers:~:text=%E3%81%94%E8%A6%A7%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82-,Event,-Orchestration%E3%81%AE%E4%BE%A1%E6%A0%BC)

## 3. Conditionsでの時間ベースの条件指定
Event Ruleを作成する際、Conditionsで条件を指定できます。

![スクリーンショット 2024-12-11 12.39.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956351/b6ba4d03-246e-106c-df80-53ab05ad1f83.png)

ただ、以下のConditionを選択した場合、GUIではAND条件が設定でないため、[PCL](https://developer.pagerduty.com/docs/f0c61ae0f06f1-pcl-overview)で定義する必要があります。
- On a recurring weekly schedule: 週次
- During a scheduled date range: 特定の期間
- Depends on event frequency: Eventの受信頻度


実際に、Conditionで`On a recurring weekly schedule`を選択し、条件ブロックを追加すると、以下の通り自動的に`OR`となります。

![スクリーンショット 2024-12-11 12.41.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956351/62bf0544-af45-32cd-b4cd-a97973cf2dfa.png)

例えば、以下のように文字列マッチと時間ベースの条件を`and`で指定したい場合には、PCLで定義する必要があります。

`インシデントのタイトルに「XXX」という文字列を含む`  and  `特定の期間`

![スクリーンショット 2024-12-11 12.40.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956351/612e8150-e65c-0af8-e178-b0a84c5c07eb.png)
 
なお、PCLについても、文字列の長さなど[制約](https://developer.pagerduty.com/docs/f0c61ae0f06f1-pcl-overview#limits:~:text=void%E3%80%81when%E3%80%81while-,%E5%88%B6%E9%99%90,-%E4%BB%A5%E4%B8%8B%E3%81%AF%20PCL)があります。

## 4. Conditionsの制限
ルールの中で条件ブロックを作成するにあたっては、以下の制限に留意する必要があります。
- 1つのルール内に最大25個の条件ブロックを作成できる
- 1つの条件ブロックに最大64個の演算子(例:AND ,OR )、または最大2048バイト(例:PCLを使用している場合)を設定することができる

![スクリーンショット 2024-12-11 12.49.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3956351/cb440134-ceef-ba96-5402-703b54076122.png)

[Conditionsの制限](https://support.pagerduty.com/main/lang-ja/docs/event-orchestration-examples#:~:text=%F0%9F%93%98-,%E3%82%B3%E3%83%B3%E3%83%87%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3,-%E3%81%AE%E5%88%B6%E9%99%90)

## さいごに
元々Rulesetsの定義が少ないサービスではあまり関係ない制約もありますが、たくさんのRulesetsを定義しているサービスもあると思います。
実際に私が対応したサービスでは数百のRulesetsがあったため、Event Orchestrationでどう定義していくか、条件をまとめられないか検討することとなりました。

内容的には既にご存じの方が多いと思いますが、少しでも役に立てば幸いです。
最後までご覧いただきありがとうございました！