EventBridgeを介してDatadogとIncident Managerを連携させてみる
背景
Datadogで発生したアラートをもとにオンコールしたい場合、PagerDutyを使うのが一番簡単ですが、Incident Managerを使うともっと安価にオンコールが実現できるのではということで、連携してみました。
連携の概要
Datadog → EventBridge → Incident Manager → オンコール
事前準備
DatadogでEventBridgeのIntegrationを有効化します。
https://app.datadoghq.com/account/settings#integrations/amazon-event-bridge をConfigurationの部分を読むか以下のドキュメントを参考にします。 (Datadog IAM Roleに events:CreateEventBus権限を付与するのを忘れないように)
docs.datadoghq.com
設定
まずにIncident Managerから連絡先、エスカレーションプラン、対応プランの設定をします。
ここは特に迷うところはないと思います。
次にEventBridgeの設定をします。ここがちょっと分かりづらい。
EventBridgeのルールの画面にいき、イベントバスにaws.partner/datadog.com/datadogを選択、ルールの作成ボタンを押す。
ルールの作成画面では、
イベント一致パターンでサービスごとの事前定義パターンを選び、サービスプロバイダーにサービスパートナーを選び、サービス名にDatadogを選ぶ。
カスタムイベントバスまたはパートナーイベントバスにはaws.partner/datadog.com/datadogを選ぶ。
ターゲットを選択では、Incident Manager レスポンスプランを選び、レスポンスプランに作成済みのプランを選択する。
で、作成ボタン押してルールの作成が完了。
最後にDatadogのアラートの設定をします。
通知文に、 @awseventbridge-datadog のように@awseventbridge-<event bus name>が指定できるのでします。
注意点
Datadogからアラートを発生させたのに、Incident Managerのインシデントがオープンにならない場合、CloudTrailをみると原因が分かるケースがあります。
CloudTrailのイベント履歴画面に行き、イベント名にStartIncidentと入力します。以下のように一致が見つかりませんと出ますが嘘なのでそのままEnterキーを押すと検索結果がでます。
イベント履歴の詳細をみると、'triggerDetails.rawData' failed to satisfy constraint: Member must have length less than or equal to 4000"のようなエラー文が出てるのが分かります。どうやらDatadogから送られてくるデータが多すぎるようです。
その場合は、EventBridgeのターゲットを選択の入力の設定で、Incident Managerに送る情報量を減らすとよいです。
この入力の設定は分かりづらいのですが、以下のブログなどを参考にすると分かりやすいかと思います。
EventBridgeの入力トランスフォーマーでSNSのメール通知内容を整形してみた
感想
fujiwaraさんのツイートにもあるのですが、インシデントが開いていると同じインシデントにまとまってしまうのがネックですね。 またIncident Managerの画面からどういったアラートなのかぱっとみ分かりづらいというのもあります。Mackerel → EventBridge → Incident Manager というのもできたんだけど、インシデントが開いているうちは1個にまとまっちゃうのがいいのか悪いのか、という感じだな
— fujiwara (@fujiwara) 2021年5月20日
個人的には素直にPagerDutyを使ったほうがいいかと思いました。