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を使ったほうがいいかと思いました。