Datadogのグラフにデプロイタイミングを表示する方法
Datadogのグラフをみていると、いつアプリケーションがデプロイされたのか気になることがあります。 「レスポンスタイムが急に悪くなってるけどデプロイ影響?」「エラーレートが跳ねるタイミングがあるけどデプロイ影響?」など。 そこでDatadogのグラフにデプロイタイミングを表示する方法を紹介します。
1, Event Overlays機能を使う
以下の画面のように、表示したいDatadog Eventのクエリを入力します。
するとEvent発生日時がグラフ上に縦線で表示されます。
シンプルな方法ですが、デプロイするタイミングでDatadogにEventを送信する必要があります。 デプロイフローに追加が必要なのでできればDatadog内で完結したいです。
2, Show Overlays機能を使う
※これを使うには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の実行には料金がかかります。 ワークフロー実行100件あたり$12.50 なので、デプロイを大量に行っている会社では注意が必要です。
Workflow Automationはなかなか夢が広がる機能だなと感じていて、 https://app.datadoghq.com/workflow/blueprints (要Datadogログイン) に使い方例があるので見てみると面白いと思います。
まとめ
Datadogのグラフにデプロイタイミングを表示する方法を紹介しました。
なんとかDatadogだけで完結してデプロイタイミングを表示できないか考えていたので、 time_between_deployments
メトリクスとWorkflow Automationを組み合わせることでできて楽しかったです。