Datadogのグラフにデプロイタイミングを表示する方法

Datadogのグラフをみていると、いつアプリケーションがデプロイされたのか気になることがあります。 「レスポンスタイムが急に悪くなってるけどデプロイ影響?」「エラーレートが跳ねるタイミングがあるけどデプロイ影響?」など。 そこでDatadogのグラフにデプロイタイミングを表示する方法を紹介します。

1, Event Overlays機能を使う

docs.datadoghq.com

以下の画面のように、表示したいDatadog Eventのクエリを入力します。

するとEvent発生日時がグラフ上に縦線で表示されます。

シンプルな方法ですが、デプロイするタイミングでDatadogにEventを送信する必要があります。 デプロイフローに追加が必要なのでできればDatadog内で完結したいです。

2, Show Overlays機能を使う

docs.datadoghq.com

※これを使うにはAPMを導入し、さらにVersion情報を送る必要があります。

ダッシュボード画面の右上のShow Overlaysをクリックします。 そしてChangesを選択し、Serviceからデプロイタイミングを知りたいサービスを選択します。

すると以下のようにデプロイタイミングが表示されます。

手軽でよいですが、

  • ダッシュボードによってはShow Overlaysが表示されない
  • Show this widget in full screen(ボタン) をおしてグラフを拡大表示するとデプロイタイミングの縦棒が表示されない

という課題があります。

3, Workflow Automationを使ってデプロイEventを自動で作成する

※これを使うにはAPMを導入し、さらにVersion情報を送る必要があります。

さて、本題です。

https://docs.datadoghq.com/ja/tracing/services/deployment_tracking/ docs.datadoghq.com

を読むと 「サービスの新しいデプロイが検出されるたびに、Deployment Tracking は time_between_deployments メトリクスの値を計算し、新しいデプロイとその前の最新バージョンのデプロイの間の秒数として計算されます。」とあります。そのためtime_between_deployments メトリクスを監視すればデプロイタイミングが分かります。

問題はEventをどう生成するかですが、DatadogのWorkflow Automationという機能を使います。

Workflow Automationはマイナーな機能かもしれませんが、非常に面白い機能です。 Workflow AutomationはIFTTTやZapierと似ていて、「トリガー」と「アクション」からなります。

トリガーには例えば以下が選べます

詳しくは ワークフローをトリガーする を参照ください。

アクションは、DatadogのEvent生成などDatadogへのアクションはもちろん、AWSなどのクラウドプロバイダー、SlackやGitHubなどのSaaS ツールへのアクションができます。 アクションの一覧は アクションカタログ を参照ください。

今回やりたいデプロイタイミングでDatadog Eventを生成するためには、

1, 以下の設定でworkflowを作成しておく

トリガーに「Monitor, Incident, or Security signal」を選択、アクションに「Datadog Create event」を選択

2, Monitorで time_between_deployments メトリクスを監視し0より大きい値になった場合、workflowをトリガーする

これでデプロイタイミングでDatadog Eventが生成されます。

あとは 1, Event Overlays機能を使うで紹介したやりかたでデプロイタイミングを表示すればOKです。

このやり方のデメリットとしては、「Monitorで監視する都合上、デプロイタイミングを監視したいだけなのにWarn/Alert扱いになる」のでちょっとだけ気持ち悪い点です。

Workflow Automationはなかなか夢が広がる機能だなと感じていて、 https://app.datadoghq.com/workflow/blueprints (要Datadogログイン) に使い方例があるので見てみると面白いと思います。

まとめ

Datadogのグラフにデプロイタイミングを表示する方法を紹介しました。 なんとかDatadogだけで完結してデプロイタイミングを表示できないか考えていたので、 time_between_deployments メトリクスとWorkflow Automationを組み合わせることでできて楽しかったです。