Datadog APM のデプロイ追跡でコードデプロイを監視 | Datadog

Datadog APM のデプロイ追跡でコードデプロイを監視

Author Danny Park
Author Jonathan Epstein

Published: October 6, 2020

継続的なインテグレーションとデリバリー (CI/CD) パイプラインは現代のソフトウェア開発とコードデプロイの基本となりつつあります。CI/CD のプラクティスを導入することで、チーム内でのコードデプロイをより迅速かつ効率的に実施できます。しかし、この手法の導入によりさまざまな新しい課題が生まれるのも事実です。質の低いコードデプロイはダウンタイムの主な原因となるほか、収益ないし顧客からの信頼喪失にもつながります。コードデプロイは複雑かつ多面的な作業であり、問題が検知されたときには以前のバージョンに戻すことが難しく、顧客側に影響を与えてしまうということも少なくありません。

この問題の解決をサポートするために、Datadog の分散トレーシング&APMデプロイ追跡機能が追加されました。デプロイ追跡では、統合タグである Datadog の予約済み ‘version’ タグを使用して、該当するコードのバージョンのインフラストラクチャーアセット、トレース、トレースメトリクス、 プロファイル、ログに基づいて自動的にパフォーマンスデータを集約します。これにより、開発者はコードデプロイのパフォーマンスを既存のライブコードと比較し、新しいコードが適切に動作しているか、およびバージョン間で新たなエラーが出現していないかを検証できます。Datadog APM でデプロイ追跡を行うことで、問題が検知された場合にデプロイデータをすばやくリリース候補版へとロールバックしてサービスの機能停止を回避することができるため、これまでは課題が多かったモダンなデプロイ戦略の採用を行うことも可能となります。

デプロイ追跡の概要

Datadog の ‘version’ タグはすべての文字列値を許容するため、semver や Git SHA 値など、チームがどのバージョンをお使いの場合でもスムーズにデプロイ追跡を実行できます。Datadog APM のデプロイ追跡は過去 30 日以内にデプロイされたすべてのバージョンを追跡し、より大きな枠組みで継続的なデプロイ分析をサポートします。また、Datadog でバージョン間での RED (リクエスト、エラー、継続時間) メトリクスを視覚化する有用なグラフを自動生成することもできます。これを活用することで、サービスおよびエンドポイント内における問題を、深刻な障害に至る前に事前に特定することができます。

バージョンデプロイのタグ付けが完了後、Datadog の設定不要のダッシュボードを使用してそれらを視覚的に追跡することができます。

また、デプロイ追跡は Datadog のその他システムと完全に統合しているため、デプロイ追跡のメトリクスから関連するログ、トレース、メトリクス、プロファイルなど、アプリケーションや下位のインフラストラクチャーでのより詳細なコンテキストが得られるモニタリングデータへとシームレスに移動することができます。

この機能の特徴は以下の通りです。

  • リクエストおよびエラー率に基づいて、デプロイで新たな種類のエラーが発生するタイミングを特定
  • メトリクス集計比較機能を使用して、エンドポイントの HotFix が実際に問題の修復を行っていることを検証
  • 古いエンドポイントが非推奨に設定されていることを検証

以下のセクションでは、Datadog APM を使用して、以下のようなモダンなデプロイ戦略を導入しながらコードデプロイを監視する方法についてご紹介します。

  • カナリアデプロイ
  • ブルー/グリーンデプロイ
  • シャドウデプロイ

カナリアデプロイ

カナリアデプロイは新しいコードをユーザーまたはホストのサブセットに予防的なテストとしてデプロイし、問題が発生した場合にアプリケーション全体が被る影響を最小限に抑えようとする手法です。カナリアデプロイが期待通りに動作したら、お使いの環境の次のサブセットに新しいバージョンをデプロイすることができます。 以下のスクリーンショットにある 2 種類のグラフは、6 時間にわたるリクエストの合計数とサービスエラーの割合の変化をバージョンごとに示したものです。新しいバージョンがロールアウトされると、最初のカナリアはホストのサブセットにデプロイされ、サービスエラーが急増します。このため新しいバージョンがロールバックとなり、その後より新しいバージョンがリリースされます。このときのエラー率はベースラインとなるエラー率と一致しており、フルデプロイを安全に実施できることを意味します。

新しいバージョンが単一のカナリアとしてデプロイされ、エラー率が急上昇。カナリアがロールバックされ、問題が解決したらより新しいバージョンのカナリアがデプロイされます。エラーが急増しない場合、この最終バージョンは安全でフルデプロイが可能であるとみなされます。

ブルー/グリーンデプロイ

ブルー/グリーンデプロイは 2 つ (またはそれ以上) のほぼ同一のサービスクラスターを同時に実行する手法です。これらのクラスターの違いは、新しいコードであるか機能追加版かという点のみです。トラフィックのルートは双方のホストグループへと設定され、新しいコードを持つホストグループ (「グリーン」グループ) はスタンバイ状態となります。すべてのテストが完了し、新しいバージョンが安全だと判断されたら、既存のホストグループ (「ブルー」グループ) がスタンバイに設定され、もう一方のグリーングループが本番バージョンとして使用されます。こうすることで、何らかの問題が発生した場合はブルー (安定) グループにすぐにロールバックし、問題発生後のダウンタイムを回避することができます。

ブルー/グリーンデプロイではともにライブ環境にある 2 つのバージョンを比較することができます。この画像は両方のバージョンがデプロイを通じてほぼ同じ数のリクエストを受信している状態を表しています。

以下の表は、ブルー/グリーンデプロイ中にバージョン間で出現した新たなエラーを示しています。コードのプッシュを担当するチームは、この情報を使用してフルデプロイ前にエラーを追跡および修復することができます。新たなエラーが比較的少ない場合も、ブルー/グリーンデプロイを本番環境の負荷と全く同じ状態で実行することで、トラブルシューティングを実行するのに十分なデータを取得できます。

同等のトラフィックを両方のバージョンにルートさせることで、新しいコードのパフォーマンスを比較して新規のエラーを検知できます。この画像は、ブルー/グリーンデプロイ中にバージョン間で検知されたエラー種類の変化を表しています。

シャドウデプロイ

シャドウデプロイは、実稼働準備が整った環境から新バージョンの環境へとリアルなユーザートラフィックを非同期的にコピーし、ユーザーとの個別のやり取りなしに新しい環境のテストを実施する手法です。シャドウデプロイではライブ環境でエラーを発生させてしまうリスクを負うことなくリアルなユーザー行動のシミュレーションを実施できるため、重要なアップデートのロールアウトを行う場合、またダウンタイムやパフォーマンス障害などのリスクを取りたくない場合に特に有用です。シャドウデプロイはグリーン/ブルーデプロイと同じくトラフィックのルートを 2 つの異なる環境に設定しますが、この場合はいずれかひとつのみがライブ環境となります。

デプロイ追跡の設定と利用

お使いの環境からアプリケーションのパフォーマンスデータを取り込むには、まず Datadog Agent をホストのインスタンスとコンテナにインストールし、Datadog APM とトレーシングを設定します。アプリケーションのインスツルメンテーション手順について、詳しくはドキュメントを参照してください。すべての要素の構成が完了したら、Datadog がサービスからトレースを収集し、 Services ビューで RED メトリクスをすぐに使えるグラフの形で可視化します。 こうすることで、新しいコードデプロイの際には ‘version’ タグを利用して RED メトリクスをバージョン別にすばやく分割し、それぞれの相対的なパフォーマンスを深堀りして「バージョン別のエラー率」、「バージョン別のリクエスト合計数」といったカスタム比較グラフを生成できるようになります。

デプロイをもっと手軽に

デプロイ追跡は Datadog の APM 機能を拡張し、コードデプロイの追跡と制御をこれまでになく簡単にするツールです。デプロイの隅々まで深堀りするだけでなく、ビルドパイプラインのステータス監視ツールとのインテグレーションを通じて、アプリケーションの開発ライフサイクル全体を可視化することができます。Datadog を既にご利用のお客様は、ご契約中のサービスでデプロイ追跡を今すぐ使用いただけます。まだ Datadog をご利用でない場合は、をお試しください。