AWS X-Ray による分散トレースと構造化ログ

AWS へのアプリケーションデプロイ

Dunieski Otano

Amazon Web Services Solutions Architect

誰も特定できなかった遅いリクエスト

  • 1件のリクエストに4秒かかる
  • 各サービスのログは単独では正常に見える
  • 全体の経路を把握できない

分散サービスマップ上で1件の遅いリクエストを追跡する虫眼鏡と、赤いボトルネックノード

AWS へのアプリケーションデプロイ

分散トレースが解決する問題

左側に赤でサービスごとに孤立したログサイロ、右側に緑でAPI Gateway・Lambda・DynamoDB・外部APIをまたぐX-RayのガントトレースタイムラインをつなぐUnified表示

  • 1件のリクエストが多数のサービスを経由する
  • ログだけではエンドツーエンドの経路を把握できない
  • トレースがリクエスト全体をつなぎ合わせる
  • どこに時間がかかったかを正確に確認できる
AWS へのアプリケーションデプロイ

セグメント、サブセグメント、サービスマップ

  • セグメント:1つのサービスが行う処理
  • サブセグメント:DBコールなど、セグメント内の単位
  • サービスマップ:全セグメントの視覚的なグラフ
  • 各ノードにレイテンシとエラーが表示される

X-Rayトレースの構造:サービスごとのセグメントとDBコールのサブセグメント、各ノードにレイテンシとエラー率を示すサービスマップグラフ

AWS へのアプリケーションデプロイ

アノテーションとメタデータの違い


アノテーション

  • インデックス付きのキーと値でフィルタリング可能
  • 顧客ティアなど、検索に使う情報に適している

メタデータ

  • 追加の詳細情報でインデックスなし
  • 文脈として付与できるが、検索はできない
AWS へのアプリケーションデプロイ

トレースIDによるログの関連付け

  • 各トレースには一意のトレースIDがある
  • トレースIDを構造化ログに含める
  • 遅いトレースから対応するログ行に直接ジャンプできる
  • ログとトレースが一体となって調査を支援する

xray_trace_idフィールドをハイライトした構造化ログ行と、X-RayトレースビューからCloudWatch Logsの対応するログ行へと指す矢印

AWS へのアプリケーションデプロイ

サービスマップでボトルネックを特定する

高レイテンシノードをハイライトしたX-Rayサービスマップとボトルネックのセグメントバーをトレースタイムラインでドリルダウンした表示

  • ログではなくサービスマップから調査を始める
  • レイテンシが最も高いノードを見つける
  • そのノードのトレースタイムラインを掘り下げる
  • 最も長いセグメントがボトルネックの候補
AWS へのアプリケーションデプロイ

リクエスト全体にわたるトレース

  • API Gateway・Lambda・下流への呼び出しがすべてトレースされる
  • 各サービスが同じトレースにセグメントを追加する
  • 1つのトレースIDがログとセグメントをつなぐ
  • すべてのリクエストをエンドツーエンドで可視化できる

API GatewayからLambda、DynamoDB、外部APIまでのエンドツーエンドの分散トレース。全セグメントのヘッダーに同一のトレースIDが表示されログとセグメントをつなぐ

AWS へのアプリケーションデプロイ

練習しましょう!

AWS へのアプリケーションデプロイ

Preparing Video For Download...