AWS X-Rayによる分散トレーシングとサービスマップの概念

DVA-C02 D4 トラブルシュート徹底解説(2025年最新)|X-Ray・CloudWatch Logs Insights

AWS X-Rayによる分散トレーシングとサービスマップの概念
目次

1. D4「トラブルシュート・最適化」出題範囲と配点

本記事は「AWS DVA-C02 試験対策」シリーズの Vol4 です。
DVA-C02(AWS Certified Developer – Associate)は、AWSサービスを使って実践的なアプリケーション開発・運用ができる開発者向けの資格です。

本記事が扱う D4「Troubleshoot and Optimize AWS Services(AWSサービスのトラブルシュートと最適化)」は配点18%、LMS問題バンク換算74問 を占めます。

D4 がほかのドメインと大きく異なるのは、SAA-C03(Solutions Architect – Associate)では出題されないドメイン であることです。
つまり、D4はDVA-C02固有の「開発者視点でのトラブルシュート能力」を問う内容であり、試験における差別化ポイントになります。
X-Ray による分散トレーシング、CloudWatch Logs Insights によるログ分析、EMF によるカスタムメトリクス、SDK例外処理といった実践的な観点が中心です。

D4で得られること(本記事の全体像)

  • 可観測性の三本柱(ログ・メトリクス・トレース)と対応AWSサービス(§2)
  • CloudWatch Logs Insights のクエリ構文とログ分析(§3)
  • EMF(Embedded Metrics Format)によるカスタムメトリクスの埋め込み方法(§4)
  • X-Ray のサービスマップ・Segments/Subsegments・Annotations の使い分け(§5)
  • HTTPエラーコードとAWS SDK例外・リトライ戦略(§6)
  • SQS/SNS のトラブルシュート(DLQ・可視性タイムアウト)(§7)
  • Lambda/API Gateway の並行性最適化(§8)
  • SNS サブスクリプションフィルターによる選択的配信(§9)
  • CloudWatch Alarms の設計と複合アラート(§10)

1-1. D4 の出題領域(公式タスクステートメント)

公式試験ガイドは D4 を2つのタスクステートメントで定義しています。

タスクステートメント内容
4.1 AWSサービスのトラブルシュート問題の根本原因特定・ログ/トレース/メトリクスを活用したデバッグ
4.2 AWSサービスの最適化パフォーマンス・コスト・スケーラビリティの改善

「何がおかしいかを見つけ、どう直し、どう改善するか」という一連の流れを問うのが D4 の本質です。
まず可観測性の全体像を把握し、各ツールの役割分担を整理しましょう。

2. 可観測性の三本柱(ログ・メトリクス・トレース)

分散システムで問題を発見・解決するには、「可観測性(Observability)」が不可欠です。
可観測性はシステムの内部状態を外部から観測できるかどうかを示す概念であり、実践の場では ログ・メトリクス・トレース の三本柱で実現します。

可観測性三本柱と対応AWSサービス
可観測性の三本柱(ログ・メトリクス・トレース)と対応AWSサービス
役割主なAWSサービス
ログ(Logs)何が起きたかの記録(イベント・エラーメッセージ)CloudWatch Logs、Logs Insights
メトリクス(Metrics)数値で表わす状態(CPU使用率・エラー率・レイテンシ)CloudWatch Metrics、EMF
トレース(Traces)リクエストがシステムを流れた経路の追跡AWS X-Ray

三本柱はそれぞれ異なる問いに答えます。
「いつ何のエラーが発生したか」はログ、「どのくらいの頻度でエラーが起きているか」はメトリクス、「あのAPIコールがどこで遅くなっているか」はトレースで解析します。
DVA-C02 の試験では「どのサービスを使えばこの問いに答えられるか」を問う問題が頻出です。

2-1. CloudWatch の役割

Amazon CloudWatch は AWS における可観測性の中心的なサービスです。
ログ(CloudWatch Logs)・メトリクス(CloudWatch Metrics)・アラーム(CloudWatch Alarms)を一元的に提供します。
Lambda・API Gateway・SQS・ECS などほぼすべての AWS サービスが、デフォルトで CloudWatch にメトリクスを送信します。
カスタムアプリケーションのデータも PutMetricData API や EMF で取り込めます。

2-2. X-Ray の役割

AWS X-Ray はトレーシングに特化したサービスです。
マイクロサービスや Lambda 関数間のリクエストフローを可視化し、ボトルネックや障害発生箇所を特定します。
X-Ray は他の可観測性ツール(CloudWatch Application Signals など)とも連携し、分散システム全体の可観測性を高めます。

3. CloudWatch Logs Insights とログ分析

CloudWatch Logs Insights は、CloudWatch Logs に保存されたログデータを 専用のクエリ言語 でリアルタイムに分析するサービスです。
複数のロググループをまたがってクエリを実行でき、エラーの特定・傾向分析・集計が素早く行えます。

3-1. Logs Insights クエリ構文

Logs Insights のクエリは6つのコマンドで構成されます。

コマンド用途
fields表示するフィールドを指定fields @timestamp, @message
filter条件に合うログを絞り込むfilter @message like /ERROR/
stats集計処理(count/sum/avg/min/max)stats count(*) by bin(5m)
sort並び替えsort @timestamp desc
limit結果件数を制限limit 20
parse非構造化ログからフィールドを抽出parse @message "* * *" as time, level, msg

よく使うパターン: エラー件数を5分ごとに集計する場合は次のように書きます。

fields @timestamp, @message
| filter @message like /ERROR/
| stats count(*) as errorCount by bin(5m)
| sort @timestamp desc

3-2. ロググループ横断クエリ

Logs Insights は複数のロググループを同時にクエリできます。
マイクロサービスが複数の Lambda 関数に分散している場合に、複数のロググループをまとめて分析できるため、問題の特定が格段に速くなります。
コンソールでは最大50個のロググループを同時選択できます。

3-3. サブスクリプションフィルター(Logs → 別サービスへのリアルタイム転送)

特定のログパターンに一致したログを、リアルタイムで別サービスへ転送する機能です。

転送先ユースケース
Amazon Kinesis Data Streams大量ログのストリーミング処理
Amazon Kinesis Data FirehoseS3/Redshift/OpenSearch への永続化
AWS Lambdaログトリガーでアラート・変換処理

サブスクリプションフィルターはロググループごとに最大2件設定できます。
ログの転送には若干の遅延(数秒〜数十秒)が生じるため、リアルタイム性が重要な場合は考慮が必要です。

4. カスタムメトリクスとEMF(Embedded Metrics Format)

4-1. PutMetricData によるカスタムメトリクス

AWS サービスが自動送信するメトリクスでカバーできない指標は、アプリケーション側から PutMetricData API を使って CloudWatch に送信できます。
例えば、ビジネスKPI(注文件数・決済成功率)やアプリ固有の処理時間などが対象です。

カスタムメトリクスは 標準解像度(1分単位)高解像度(1秒単位) の2種類があります。
高解像度メトリクスはコストが高くなりますが、Lambda関数の短時間スパイクなどを細かく捕捉できます。

4-2. EMF(Embedded Metrics Format)の仕組み

EMF は、ログに JSON 形式でメトリクスデータを埋め込むことで、別途 API 呼び出しなしに CloudWatch Metrics を生成する仕組みです。
Lambda 関数のログとして出力するだけでメトリクスが自動的に作成されるため、コードをシンプルに保てます。

EMF の JSON 構造は次のようになります。

{
  "_aws": {
 "Timestamp": 1700000000000,
 "CloudWatchMetrics": [
{
  "Namespace": "MyApp/Orders",
  "Dimensions": [["FunctionName", "Environment"]],
  "Metrics": [
 { "Name": "OrderProcessingTime", "Unit": "Milliseconds" },
 { "Name": "OrderCount", "Unit": "Count" }
  ]
}
 ]
  },
  "FunctionName": "process-order",
  "Environment": "production",
  "OrderProcessingTime": 123,
  "OrderCount": 1
}

_aws.CloudWatchMetrics ブロックにメトリクスの定義を書き、残りのフィールドに実際の値を入れるのが基本構造です。
EMF は CloudWatch Logs エージェントが自動的に検知し、メトリクスを生成します。

4-3. EMF の利点

比較項目PutMetricDataEMF
API 呼び出し必要不要(ログ出力のみ)
バッチ送信最大20メトリクス/回ログ出力時に自動処理
ログとの関連付け手動同じログストリームで自動紐付け
コストメトリクス数に課金ログ保存コストのみ

Lambda 関数では EMF ライブラリ(aws-embedded-metrics)を使うことで、EMF 形式の出力を簡単に実装できます。

5. X-Rayによる分散トレーシング(サービスマップ・アノテーション)

AWS X-Ray は、マイクロサービスや Lambda 関数を含む分散アプリケーションのリクエストフローを追跡・可視化するサービスです。

X-Ray分散トレーシングとサービスマップ
AWS X-Rayによる分散トレーシングとサービスマップの概念

5-1. Trace・Segment・Subsegment の関係

X-Ray のデータ構造は階層化されています。

概念説明
Trace(トレース)1つのリクエストがシステム全体を流れた記録の全体
Segment(セグメント)各サービス(Lambda関数・EC2など)での処理単位
Subsegment(サブセグメント)セグメント内の細分化(DynamoDB呼び出し・HTTP呼び出しなど)

例えば、API Gateway → Lambda → DynamoDB という流れを追う場合、API Gateway と Lambda でそれぞれ Segment が生成され、Lambda から DynamoDB への呼び出しが Subsegment として記録されます。

5-2. Annotations と Metadata の違い

X-Ray のトレースデータにはカスタムデータを付加できます。
試験で最も問われる違いは次の点です。

種別インデックスフィルタリング用途
Annotationsインデックス化される可(GetTraceSummaries でフィルタ)ユーザーID・注文IDなど検索対象
Metadataインデックス化されない不可デバッグ用の詳細データ(大きなオブジェクト)

検索・絞り込みが必要なデータは Annotations、詳細なデバッグ情報は Metadata に格納します。
Annotations は文字列・数値・真偽値のみ対応で、Metadata は任意の JSON オブジェクトを格納できます。

5-3. サンプリングルール

X-Ray はすべてのリクエストをトレースするとコスト・パフォーマンスへの影響が大きくなるため、サンプリングによりトレース対象を絞ります。

デフォルトのサンプリングルールは「毎秒最初の1リクエスト + 以降の5%」です。
カスタムサンプリングルールを使うと、特定のパスやサービスのみ100%トレースするといった細かい制御が可能です。

5-4. Lambda での X-Ray 有効化

Lambda 関数で X-Ray トレースを有効にするには、コンソールまたは SAM/CloudFormation の設定で TracingConfig: Active を指定します。
Active モードは自動的にトレースをサンプリングし、PassThrough は上流サービスのサンプリング判定に従います。
X-Ray SDK をコードに統合することで、Subsegment の追加やアノテーションの付加も行えます。

6. HTTPエラーコードとSDK例外の対応表

AWS API を利用するアプリケーションでは、HTTP ステータスコードと AWS SDK 例外の対応関係を正確に理解することがトラブルシュートの基本です。

6-1. 主要な HTTP エラーコード

コード種類意味対処
400クライアントエラーリクエストパラメータ不正入力バリデーション修正
401クライアントエラー認証情報なし認証情報の確認
403クライアントエラーアクセス拒否(IAMポリシー)IAMポリシーの確認
404クライアントエラーリソース不存在リソース名・ARNの確認
429クライアントエラースロットリング(リクエスト過多)Exponential Backoff・バースト制限確認
500サーバーエラーAWSサービス内部エラーリトライ・AWSステータス確認
502サーバーエラー不正なゲートウェイ応答Lambda/ECSのレスポンス形式確認
503サーバーエラーサービス一時利用不可リトライ
504サーバーエラーゲートウェイタイムアウトLambda タイムアウト設定・処理時間最適化

試験の頻出ポイント: 403 は IAMポリシー・SCP・VPCエンドポイントポリシーによるアクセス拒否、429 はスロットリング(API Gateway・Lambda・DynamoDB)を意味します。

6-2. AWS SDK 例外とリトライ戦略

AWS SDK は自動的にリトライしますが、例外の種類によって適切な対処が異なります。

例外発生条件対処
ThrottlingExceptionAPIコールレートの超過Exponential Backoff + Jitter
ProvisionedThroughputExceededExceptionDynamoDB キャパシティ超過Auto Scaling 設定・バースト制御
RequestLimitExceededEC2 API コール制限呼び出し頻度の削減
ServiceUnavailableExceptionサービス一時停止リトライ(遅延あり)
ValidationExceptionパラメータ検証エラーリトライ不要・入力修正

Exponential Backoff + Jitter: リトライ間隔を指数的に増やしつつ、ランダムなジッター(ゆらぎ)を加えることで、複数クライアントのリトライが同時に集中することを防ぎます。
AWS SDK はデフォルトでこの戦略を実装しています。

7. SQS/SNSのトラブルシュート(DLQ・可視性タイムアウト)

7-1. SQS のトラブルシュートポイント

SQS(Simple Queue Service)のトラブルシュートで最も重要な概念は 可視性タイムアウト(VisibilityTimeout)DLQ(Dead Letter Queue) です。

可視性タイムアウト(VisibilityTimeout):
コンシューマーがメッセージを受信すると、そのメッセージは一時的に他のコンシューマーから見えなくなります(非表示状態)。
非表示の時間が可視性タイムアウトで、デフォルトは30秒、最大12時間です。
可視性タイムアウトより処理時間が長くなると、同じメッセージが再配信されて重複処理が発生します。

症状原因対処
メッセージが重複処理される可視性タイムアウトが短い処理時間より長い値に設定
メッセージが消えないコンシューマーがDeleteMessageしていない処理成功後の削除コード確認
メッセージが蓄積するコンシューマーのスループット不足コンシューマー数・スケールアウト
DLQにメッセージが溜まる処理エラーが繰り返し発生エラーログ確認・コードのバグ修正

DLQ(Dead Letter Queue):
最大受信回数(maxReceiveCount)を超えたメッセージを DLQ に転送します。
DLQ を設定することで、処理不能メッセージを本キューから分離し、エラー分析・再処理が容易になります。

7-2. SQS キュータイプの使い分け

キュータイプ配信順序重複ユースケース
Standardベストエフォートあり(重複の可能性)高スループット・順序不問
FIFO保証(グループ内)なし(Exactly-once)順序重要・金融処理

FIFO キューはスループットが Standard より低く(デフォルト300TPS)、コストも高くなります。
Lambda との統合では、FIFO キューの場合 MessageGroupId ごとに順序保証した処理が行われます。

7-3. SNS の配信トラブルシュート

SNS がサブスクライバーに配信できない場合のポイントです。

トラブル原因対処
SQS に届かないSQSアクセスポリシーでSNSの送信を許可していないSQSリソースポリシーにSNS許可追加
HTTP/HTTPSエンドポイントに届かないエンドポイントが確認(subscribe確認)されていないSubscription確認手順の実施
Lambdaが呼ばれないLambdaリソースポリシーが未設定SNSからのInvokeFunction許可を追加
フィルターで除外されているサブスクリプションフィルターポリシーが不一致メッセージ属性とフィルター内容の照合

8. Lambda/APIの並行性最適化

8-1. Lambda 並行性の種類

Lambda の並行性には3つの設定があります。

設定説明用途
アカウントレベル同時実行リージョン内の全Lambda関数合計デフォルト1,000(上限緩和可)
予約済み同時実行(Reserved Concurrency)特定関数の最大同時実行数を確保・制限重要関数の保護、他関数への影響制限
プロビジョニング済み同時実行(Provisioned Concurrency)実行環境をウォームアップ済み状態で事前確保コールドスタート解消

コールドスタート問題: Lambda 関数は初回(または一定時間後の)実行時に実行環境の初期化が発生します(コールドスタート)。
プロビジョニング済み同時実行を使えば実行環境をウォームアップ状態で保持でき、リクエスト到着時から即座に処理を開始できます。

8-2. スロットリング(TooManyRequestsException)

Lambda の同時実行制限に達すると、新しいリクエストは ThrottleError(HTTP 429) が返されます。
Lambda の呼び出し方によって挙動が異なります。

呼び出し方式スロットリング時の挙動
同期(RequestResponse)429 TooManyRequestsException を即時返却
非同期(Event)最大6時間リトライ(エクスポネンシャルバックオフ)
イベントソース(SQS・Kinesis)キューまたはシャードにリトライ(ブロッキング)

8-3. API Gateway のスロットリング

API Gateway にはリクエストレートのスロットリング設定があります。

設定デフォルト説明
スロットリングレート(Rate)10,000 req/secステージ・メソッドレベルで設定可
バーストレート(Burst)5,000一時的なスパイクへの許容
使用量プラン(Usage Plan)未設定API Key ごとのクォータ制御

スロットリングを超えたリクエストには 429 Too Many Requests が返されます。
使用量プランとAPIキーを組み合わせることで、テナント(顧客)ごとに異なるリクエスト制限を設けられます。

8-4. Lambda コールドスタートの最適化

コールドスタートを軽減するための主な手法です。

  1. プロビジョニング済み同時実行の設定: 最も確実な解決策ですがコストが発生します
  2. デプロイパッケージのサイズ削減: 初期化時間の短縮(不要な依存関係を除外)
  3. ランタイム選択: Python/Node.js は Java/C# より起動が速く、コールドスタートの影響を受けにくい傾向があります
  4. Lambda SnapStart(Java向け): スナップショットからの高速起動(Java 11 以降)
  5. VPC 設定の見直し: VPC 内 Lambda では初期化時に ENI アタッチの処理を経る場合があります(現在は大幅に改善済み)

9. SNSサブスクリプションフィルター

SNS のサブスクリプションフィルターポリシー(Subscription Filter Policy)は、メッセージ属性(MessageAttributes)に基づいてサブスクライバーへの配信を制御する機能です。

9-1. フィルターポリシーの仕組み

フィルターポリシーは JSON 形式で記述し、サブスクリプション単位で設定します。
ポリシーに一致するメッセージのみがそのサブスクライバーに配信されます。

フィルターポリシーを設定した場合、ポリシーに一致しないメッセージはそのサブスクライバーには配信されません
フィルターポリシーがない場合はすべてのメッセージが配信されます。

9-2. フィルターポリシーの記述例

{
  "store": ["example_corp"],
  "event": [{"anything-but": "order_cancelled"}],
  "price": [{"numeric": [">=", 100, "<=", 500]}],
  "premium_user": ["true"]
}
フィルタータイプ記述例説明
文字列一致["example_corp"]完全一致する値のみ通過
否定一致[{"anything-but": "order_cancelled"}]指定値以外を通過
数値範囲[{"numeric": [">=", 100, "<=", 500]}]数値が範囲内のみ通過
プレフィックス[{"prefix": "order-"}]指定文字列で始まる値を通過
属性存在チェック[{"exists": true}]属性が存在する場合のみ通過

9-3. フィルターポリシースコープ

2022年以降、フィルターポリシーのスコープとして MessageBody フィルタリングが追加されました。
FilterPolicy のスコープを MessageBody に設定すると、メッセージ本文の JSON フィールドに対してフィルタリングを適用できます(従来の MessageAttributes スコープとは異なります)。

10. CloudWatch Alarms と通知設計

10-1. CloudWatch Alarms の基本

CloudWatch Alarms はメトリクスの値を監視し、閾値を超えた場合にアクションを実行します。

アラームの状態は3つです。

状態説明
OKメトリクスが閾値の範囲内
ALARMメトリクスが閾値を超過
INSUFFICIENT_DATAデータ不足(監視開始直後・メトリクス送信停止など)

アラームのアクションとして設定できる主なものは次のとおりです。

  • SNS 通知: メール・Lambda・HTTP エンドポイントへの通知
  • EC2 アクション: 停止・再起動・回復・終了
  • Auto Scaling アクション: スケールアウト・スケールイン

10-2. Composite Alarm(複合アラーム)

Composite Alarm は複数のアラームを論理演算(AND/OR)で組み合わせた複合アラームです。
個々のアラームがノイズを多く発生させる場合でも、複数条件が同時に成立した場合のみ通知するといった制御が可能です。

使用例: 「CPU 使用率が高い AND エラー率も高い」の両方が成立した場合のみアラームを発報し、単独のメトリクス悪化では通知しない、といった設定が可能です。

10-3. Anomaly Detection(異常検知)

CloudWatch Anomaly Detection は機械学習を使って、メトリクスの通常パターン(ベースライン)を自動的に学習し、異常を検知します。
曜日・時間帯による変動(営業時間帯の高負荷など)を学習してベースラインを構築するため、固定閾値では対応しにくいメトリクスに有効です。

異常検知アラームでは「ベースライン ± N σ」の範囲を外れた場合にアラームを発報するよう設定します。

10-4. メトリクスフィルター(ログからメトリクスを生成)

CloudWatch Logs のログデータからメトリクスを抽出する機能です。
例えば、Lambda 関数のログに出力されたエラーメッセージの件数をメトリクス化し、アラームを設定できます。

# エラーパターンに一致する行数をメトリクスとして記録する設定例
フィルターパターン: [timestamp, requestId, level = "ERROR", ...]
メトリクス名前空間: MyApp/Lambda
メトリクス名: ErrorCount
値: 1

11. CertTrend LMS で400問チェック

本シリーズで解説したD1〜D4の内容は、CertTrend LMS の DVA-C02 問題バンク(400問) で実践的に確認できます。
実際の試験と同じ選択式で繰り返し演習することで、知識の定着とスコアアップが図れます。

関連記事(実務での深掘り)

D4 の内容をさらに深く学びたい方は、以下の本番運用解説記事も参照してください。

Vol0 ロードマップで学習計画を確認

DVA-C02 試験対策の全体像は Vol0 ロードマップ記事でまとめています。
各ドメインの出題比率・おすすめ学習順序・受験申込の手順は以下からご確認ください。