DatadogでSendGridのEvent Webhookを環境別に監視する方法

前提

Webサービスやアプリのメール送信にSendGridを利用していて、かつ、複数環境(ex. 本番/ステージング/開発 ...)を運用しているケースを想定します。 SendGridはメールに関するイベントが発生すると、事前に登録しておいたURLにその内容をPOSTしてくれます。

参照: sendgrid.kke.co.jp

Datadogはこの仕組みを使って、SendGrid Integrationを提供しており、これによってSendGrid上で発生したイベントをDatadogで監視することができます。

参照: docs.datadoghq.com

このとき、Datadogに転送されるイベントがどの環境で発生したのかを確認できるようにしたい、というのが今回の内容です。 この記事で紹介する方法は、サブユーザを使わなくても設定可能です。

結論

1) Datadog > Integrations > SendGrid > CONFIGURE > Logs Collectionにて、API Keyを'Create New'します。

datadog-sendgrid-integration
datadog-sendgrid-integration

2) Copy URLします。

datadog-sendgrid-integration-post-url
datadog-sendgrid-integration-post-url

3) CopyしたURLに環境識別用のtagをクエリーパラメータとして追加します。

https://http-intake.logs.ap1.datadoghq.com/api/v2/logs?dd-api-key=ddxxxxxxxxxxxxxxxxxxxxxxxxxx&ddsource=sendgrid&ddtags=env:production

4) 3で得たURLをSendGrid > Settings > Mail Settings > Event Webhooks > Create New webhookにて設定します。

sendgrid-create-new-webhook
sendgrid-create-new-webhook

1~4の手順を各環境ごとに実施します。

解説

Datadogが発行するWebhook URLをそのまま使うと環境別の監視ができなくなってしまいます。 Datadogが発行するWebhook URLをよくよく見てみると、DatadogのSend logsエンドポイントとなっています。 公式ドキュメントにあるように、クエリパラメータにddtagsを設定できるので、これを活用すれば良いというわけですね!

さいごに

ddtagsを設定できるということは、今回の要件を満たすだけでなく、より詳細なイベントの分類もできそうですね。