🐾

マイクロサービスでの分散トレーシング - AWS X-Ray vs DataDog

2025/01/31に公開

headerImage

概要

マイクロサービスアーキテクチャではサービス間の依存関係が複雑化し、デバッグやパフォーマンス管理が難しくなります。本記事では、分散トレーシングの必要性を整理した上で、代表的なツールであるAWS X-RayDataDogを比較検証します。さらに、FunctionA → SQS → FunctionBという簡易的なサンプルアプリケーションを例に、実際にトレーシングを試す際のポイントを紹介します。

imageOfMicroservice
https://www.splunk.com/ja_jp/data-insider/what-is-distributed-tracing.html


1. はじめに:マイクロサービスと分散トレーシングの重要性

マイクロサービスは、アプリケーションを小さなサービスに分割することでスケーラビリティや開発効率を高められるアーキテクチャです。しかし同時に、サービス間通信の可視化や性能監視、障害原因の特定が難しくなるという課題があります。
分散トレーシングを導入することで、以下のメリットが期待できます:

  • サービス間の呼び出しの可視化
    どのサービスがどのエンドポイントを呼び出しているかを把握しやすくなる
  • 問題箇所の特定が容易
    レイテンシが高い箇所、エラーが発生しているサービスを早期に切り分け可能
  • サービス全体のパフォーマンス向上
    ボトルネックを把握し、改善施策を打ちやすい

distributedtracing
https://www.jaegertracing.io/docs/1.33/architecture


2. マイクロサービスでのデバッグ・トレーシングの課題

分散トレーシングが重要な背景には、マイクロサービス特有の以下の課題があります:

  1. ログが分散しやすい
    各サービスが独立して動作するため、ログもバラバラになりがち。集約や分析に時間がかかる。
  2. 障害ポイントの切り分けが困難
    ネットワーク遅延やサービス間の依存が増えると、単体テストだけでは不十分。
  3. 可観測性(Observability)の確保
    全体の状態を把握するためのメトリクス、ログ、トレースが必要。なかでもトレースは「どこに何が起きているか」を可視化するうえで重要。

3. AWS X-RayとDataDog、この2つに絞る理由

分散トレーシングツールは数多く存在しますが、この記事では特に以下の理由からAWS X-RayDataDogの2つを取り上げます。

AWS X-Ray

aws_xray

  • AWSとの親和性が高い
    サーバレス(AWS Lambda)やECS/Fargateなどとの統合がシンプルで、導入が容易。
  • 料金体系がわかりやすい
    AWSサービスと合わせてコスト検討がしやすい。
  • サービスマップでの可視化
    LambdaやAPI Gatewayとの連携で、依存関係を簡単に把握できる。

DataDog

datadog

  • マルチクラウドやオンプレミス環境を含む統合的な監視を得意とする
    AWS以外のGCP、Azure、オンプレミスとも連携可能。
  • 幅広い機能を一元管理
    ログ管理やインフラ監視、セキュリティ機能などを一括で扱う。
  • タグベースでのきめ細かいモニタリング
    多数のカスタムダッシュボードを構築しやすい。

4. 主要機能の比較

比較項目 AWS X-Ray DataDog
可視化機能 サービスマップ(Service Map)による依存関係可視化 Service Map、監視ダッシュボードの高度なカスタマイズ
インストゥルメンテーション SDKを通じた自動/手動トレーシングが中心 自動インストゥルメンテーション、Agent 経由のトレーシング
サポート範囲 AWS環境内が中心(EC2, ECS, Lambdaなど) AWS、GCP、Azure、オンプレミスなど多様な環境
メトリクス連携 CloudWatchと連携しやすい ダッシュボードで多数の外部サービス連携
ログとの統合 CloudWatch Logsとシームレスに連携 Log Management 機能で一元管理(有料オプション)
UI/操作性 シンプルだが拡張性は限定的 高度なUIでカスタマイズ可能

5. サンプルアプリケーションによるトレーシングデモ

ここでは、AWS Lambdaを使ったサーバレス構成のシンプルなアプリケーションを例に、分散トレーシングをどのように導入・可視化するかを見ていきます。

5.1 アーキテクチャ概要

今回扱うサンプルアプリケーションは以下のようなフローを想定します:

[API Gateway] -> (FunctionA) -> [SQS] -> (FunctionB)

  1. FunctionA

    • API Gateway経由でリクエストを受け取り
    • リクエストの内容をSQSキューに登録し、成功/失敗のレスポンスを返す
  2. SQS

    • 非同期でメッセージを管理し、Lambdaの処理をトリガーする
  3. FunctionB

    • SQSのイベントトリガーで呼び出され、メッセージ内容を処理(DB書き込みなど)
    • 処理結果をログに出力、または別のサービスへ通知

このように、FunctionA → SQS → FunctionBという典型的なイベント駆動のフローをトレース対象とします。
architecture


5.2 AWS X-Rayでのトレーシングのポイント

  1. LambdaレイヤーまたはX-Ray SDKの導入

    • AWS LambdaランタイムにX-RayのエージェントやSDKを組み込む。Node.js/Python/Javaなど、言語ごとに導入手順は多少異なる。
    • Lambda関数設定で**「Active Tracing(アクティブトレーシング)」**を有効化することが重要。
  2. Service Mapでの可視化

    • X-Rayでは、API Gateway、SQS、FunctionA、FunctionBが自動でサービスマップに表示され、各コンポーネントの依存関係を俯瞰できる。

xray01

  • イベントドリブンなフローでも、どの部分に時間がかかっているか、どこでエラーが発生しているかを一目で把握可能。
    xray02
  1. トレース情報の詳細分析
    • API Gateway → FunctionAの処理時間、FunctionBの起動時間、コールドスタートの有無などを細かく確認できる。
    • コールチェーンを全体的に把握することで、エラーやレイテンシ増加の原因を特定しやすい。
    • エラーの発生個所を把握しドリルダウンすることでエラーの箇所・原因を追跡可能(詳細レベルはX-RAY SDKで情報をどこまで出力するかに依存する)

xray03

xray04

  1. 考慮点
    • サーバレス中心のアプリケーションならほぼ自動で依存関係をトレースできるが、細かいログ管理や独自メタデータの保存はCloudWatch Logs側で行う。
    • リージョンや複数AWSアカウントを跨ぐ場合は、X-Rayのサービスマップをどのように統合するか検討が必要。

5.3 DataDogでのトレーシングのポイント

  1. Lambda層 or エージェントのセットアップ

    • DataDogはCloudFormationで連携用のセットアップを行う。以前はLambda-Layerによる組み込みによる実現だったが現在はライブラリ(ddTrace, datadog_lambdaなど)しており、これをLambdaに組み込むことで自動インストゥルメンテーションが可能。
    • コンテナ(ECS/Fargateなど)を併用している場合は、DataDog Agentをインストールし、そこからトレースを収集する方法もある。
  2. サブミッションとタグ付け

    • DataDogでは、サービス名・環境(env)・バージョンなどのタグを付けて分析可能。
    • SQSメッセージ単位の情報を紐づけることで、特定のリクエストやバッチがどのように処理されたかを追跡できる。
  3. ダッシュボードでの可視化

    • DataDog APMの「Service Map」機能を使って、API GatewayやLambda、SQSなどを一元表示できる。

datadog01

  • メトリクスやアラート、ログ分析も一箇所で管理するため、SRE/DevOpsチームでの運用効率が向上。
    datadog02
    datadog03
    datadog04
  1. 考慮点
    • マルチクラウドやオンプレミスを含む大規模環境でメリットが大きいが、料金体系はモジュール単位になるため費用が膨らむ可能性がある。
    • APM、ログ管理、インフラ監視など多機能を活用するほど高い可視化・運用効果が得られるが、同時に学習コストも考慮が必要。

6. 費用比較とコスト最適化

AWS X-Ray

  • トレース量に応じた課金
    「トレースごとのリクエスト数+利用量」による。詳しくはAWS X-Rayの料金表を参照。
  • ログやメトリクスとの一括管理
    同じAWSリソースで統合管理でき、運用コストをまとめやすい。

DataDog

  • モジュールごとの料金体系
    APM、ログ管理、インフラ監視など機能ごとにライセンス費用が発生。
  • 運用負荷削減によるメリット
    一元的にモニタリングできるため、ツールを分散させた際の管理コストを削減できる。

7. 使いどころ比較

シナリオ AWS X-Ray が適している場合 DataDog が適している場合
AWSに特化した環境 ほとんどのインフラがAWS上で完結しており、他クラウドとの連携が少ないケース 大規模・ハイブリッド環境の場合やAWS外のリソースも含めて統合監視したい場合
サーバレス中心のアーキテクチャ LambdaやAPI GatewayなどAWSのサーバレスサービスを主軸にしているプロジェクトは、X-Rayとの統合がシンプル Lambdaも使いつつ、GCP Cloud FunctionsやAzure Functionsなども同時に利用し、マルチクラウドを展開している場合
運用チームの体制 AWSコンソールをメインで扱い、CloudWatchなど既存のAWSサービスと連携することで一元管理したい 専任のSRE/DevOpsチームがいて、複数ツールをまとめて扱うプラットフォームを構築したい場合
大規模・複数クラウド AWSのみで大規模に構築するシナリオならX-Rayでも対応可能。ただしオンプレや他クラウド対応は限定的 GCPやAzure、オンプレミスなど多様な環境を一つのダッシュボードで管理したい場合

8. まとめ

マイクロサービスにおける分散トレーシングは、複雑に絡み合うサービス間の可視化とパフォーマンス最適化のために不可欠です。AWS環境を主軸としたサーバレスアーキテクチャならAWS X-Rayが導入しやすく、一方でDataDogはマルチクラウドやオンプレミスを含めた大規模環境で高い柔軟性を発揮します。

商用製品であるDataDogは当然ながら非常にリッチであることは言うまでもありません。ただ、X-RAYに比べかなりのコストが追加になるでしょう。分散トレースを含めシステム正常性・メトリクス・分析・オブザーバビリティなど統合することがシステムにとって必要なのかは、システムの特性や運用チームのスキルにも大きく依存するため導入は慎重にしたほうが良いかもしれません。

今回のサンプルアプリケーション(FunctionA → SQS → FunctionB)のように、Lambdaによるイベント駆動型アーキテクチャでも分散トレーシングツールを組み込むことで、各ステップの可視化や問題特定が容易になります。費用や運用体制を踏まえ、以下の点を検討するとよいでしょう。

  • AWSネイティブか、マルチクラウドか
    AWSだけで完結するならX-Ray、複数のプラットフォームを運用するならDataDogが有力。
  • 導入・運用コスト
    ツール選定にはライセンス費用だけでなく、チームの学習コスト・運用負荷も考慮する。
  • 組織の成熟度・専門性
    大規模なSREチームがある場合はDataDogのような多機能プラットフォームが便利だが、小規模チームならX-Rayのシンプルさが魅力。

参考リンク

Discussion