Cloud Service
Cloud Trace
分散トレースでリクエストの経路と各処理の所要時間を可視化し、マイクロサービスの遅延やボトルネックを特定する。AWS の X-Ray に相当。
- 1.リクエストが通る全サービスのスパンをつなぎ、遅延の発生箇所を可視化する。
- 2.App Engine などは自動でトレースを送信。それ以外は OpenTelemetry で計装する。
- 3.全件ではなくサンプリングして収集し、遅延分析のレイテンシ分布を確認できる。
解決する課題
マイクロサービスやサーバーレスでは、1 つのユーザーリクエストが複数のサービスを横断します。どのサービスのどの処理で時間がかかっているかを、ログだけから突き止めるのは困難です。Cloud Trace は 分散トレース によってこの可視化を担います。
- リクエスト全体が どのサービスを順にたどった のかを把握したい
- エンドツーエンドの遅延のうち、どの区間で時間を使っている のかを特定したい
- 平均では見えない テールレイテンシ(遅いリクエスト) を見つけたい
- リリース前後で レイテンシが悪化していないか を継続的に確認したい
主要概念と用語
Cloud Trace は Google Cloud Observability の一部で、メトリクスの Cloud Monitoring やログの Cloud Logging と連携して使います。
- トレース(Trace): 1 つのリクエストがシステム全体を通過する一連の処理の記録。複数のスパンで構成される
- スパン(Span): トレース内の個々の処理単位(例: あるサービスでの 1 回の関数呼び出しや RPC)。開始/終了時刻を持ち、所要時間が分かる
- 親子関係(Parent / Child Span): スパンは入れ子になり、呼び出しの階層を表す。これによりウォーターフォール表示が描ける
- トレースコンテキストの伝播(Context Propagation): トレース ID をサービス間の HTTP ヘッダー等で受け渡し、別サービスのスパンを 1 つのトレースに束ねる仕組み。W3C Trace Context などの標準ヘッダーを使う
- 計装(Instrumentation): アプリにトレース送信のコードを組み込むこと。現在は OpenTelemetry(OTel)が標準的な手段
- サンプリング(Sampling): 全リクエストではなく一部のみをトレースとして収集すること。負荷とコストを抑える
- レイテンシ分布 / 分析レポート: 収集したトレースから応答時間の分布(パーセンタイル)や時系列の傾向を可視化する機能
仕様・制限・クォータ
- トレースの取り込みは サンプリング が前提で、全リクエストを保存するものではない。サンプリングレートはクライアント側(OpenTelemetry の設定)で制御する
- トレースデータには 保持期間 があり、一定期間を過ぎたトレースは自動的に削除される(長期保管が必要なら BigQuery 等へエクスポートする)
- 1 トレースあたりのスパン数や、スパンに付与できる属性(ラベル)の数・サイズには上限がある
- トレースの取り込みやエクスポートには API のレート上限 があり、超過分はスロットリングされ得る
- 具体的な保持日数・サンプリング既定値・各種上限は変動するため、設計時は最新の公式ドキュメントとプロジェクトのクォータ画面で確認する
内部の仕組み
各サービスは、自分が処理した区間をスパンとして生成し、共通のトレース ID とともに Trace API に送信します。サービス間では トレースコンテキスト(トレース ID と親スパン ID)が HTTP ヘッダーなどで伝播され、受け取った下流サービスは自分のスパンをそのトレースの子として記録します。Cloud Trace はこれらのスパンをトレース ID で束ね、時刻情報をもとに ウォーターフォール(時間軸の入れ子) として再構成します。
App Engine スタンダードなど一部のマネージドサービスは、追加実装なしでトレースを送信します。それ以外の Compute Engine / GKE / Cloud Run 上の独自アプリは、OpenTelemetry などで明示的に計装する必要があります。
あるサービスが受け取ったトレースコンテキストを下流呼び出しに引き継がないと、そこからは別トレースとして記録され、1 本のウォーターフォールにつながりません。自前の HTTP クライアントやメッセージング経由の呼び出しでは、トレースヘッダーの伝播が漏れやすいので注意します。
設計パターン / ベストプラクティス
- 計装は OpenTelemetry に統一 し、特定ベンダーに依存しない形でスパンを生成・エクスポートする
- サービス間呼び出しでは トレースコンテキストを必ず伝播 させ、トレースの分断を防ぐ
- 重要な業務処理には カスタムスパンや属性(ユーザー種別、処理種別など)を付け、遅延の原因を分類できるようにする
- サンプリングは 頭固定の全件にせず、本番では適切なレートに調整して負荷とコストを抑える。エラー時は確実に取りたい場合に応じてサンプリング戦略を設計する
- トレース ID をログにも出力し、Cloud Logging のログとトレースを相互参照 できるようにする
- メトリクス(Monitoring)で異常を検知し、トレースで原因区間を掘り下げる、という二段構えで使う
運用・監視
- トレースが表示されない → アプリの計装有無、サービスアカウントの IAM 権限(トレース書き込み権限)、Trace API の有効化を確認
- トレースが途中で切れる → 各サービスでのトレースコンテキスト伝播の実装漏れを確認
- 想定よりデータが少ない → サンプリングレートの設定値を確認(低すぎると遅いリクエストを取りこぼす)
- 遅延の調査 → レイテンシ分布のパーセンタイル(特に p95 / p99)を見て、平均では隠れるテールレイテンシを起点に該当トレースを掘る
- リリース回帰の検知 → 分析レポートで時系列のレイテンシ傾向を比較し、デプロイ前後の悪化を早期に発見
コスト
課金は主に 取り込んだスパン数 に基づきます。月次の無料枠を超えた取り込みスパンに対して従量課金される、というのが基本的な考え方です。したがってコスト最適化の要点は、収集するスパンの量を必要十分に絞ることに集約されます。
| コスト要因 | 課金の考え方 | 抑えるコツ |
|---|---|---|
| スパンの取り込み | 取り込んだスパン数に応じた従量課金(無料枠あり) | サンプリングレートを適正化して総量を抑える |
| 高基数の属性 | 属性自体の直接課金より分析の扱いづらさが課題 | 属性のラベル基数を抑え必要なものに絞る |
| 長期保管 | Trace 内の保持は有限のため別途保管が要る | 必要分のみ BigQuery 等へエクスポートする |
セキュリティ
- トレースの読み取り/書き込み権限は IAM ロール で最小化する(閲覧はトレース閲覧者、送信はトレースエージェント相当の書き込みロール)
- アプリからの送信には、キー JSON ではなく アタッチされたサービスアカウント(GKE では Workload Identity)を使い、鍵の漏洩リスクを避ける
- スパンの属性に 個人情報や機微情報を入れない。URL のクエリパラメータやリクエストボディをそのまま属性にすると意図せず流出し得る
- 機微データが混入し得る場合は、計装側でマスキング/除外してから送信する
デバッグのためにリクエストボディやトークンをスパン属性に丸ごと載せるのは NG。トレースは閲覧権限を持つ広い範囲のメンバーが参照し得るため、機微情報は計装の段階で取り除きます。
Well-Architected の観点
- 運用上の優秀性(Operational Excellence): リクエストの経路と遅延を可視化し、障害や性能劣化の原因特定(MTTR 短縮)を支える。ログ・メトリクスと相互参照することで運用の見通しが良くなる
- パフォーマンス効率(Performance Efficiency): ボトルネック区間を定量的に特定でき、当て推量ではなくデータに基づいた最適化ができる。テールレイテンシの監視でユーザー体験の劣化を早期に捉える
試験で問われるポイント
- 「複数のマイクロサービスを横断するリクエストの遅延箇所を特定したい」→ 答えは Cloud Trace(分散トレース)。ログ集約の Cloud Logging やメトリクスの Cloud Monitoring とは役割が異なる
- AWS の相当サービスは X-Ray。GCP 視点と AWS 視点の対応を問われやすい
- Cloud Trace は 全リクエストではなくサンプリング して収集するのが基本。全件保存ではない点がひっかけ
- 独自アプリは 計装(OpenTelemetry)が必要。一部マネージドサービスは自動送信されるが、すべてが自動ではない
- サービス間で トレースコンテキストを伝播 しないとトレースが分断される、という仕組みの理解
関連サービス・比較
Cloud Trace は単独ではなく、Observability の他サービスと組み合わせて使います。役割の違いと AWS 相当サービスを押さえます。
| 観点 | Cloud Trace(GCP) | AWS X-Ray |
|---|---|---|
| 主な役割 | 分散トレースで遅延を可視化 | 分散トレースで遅延を可視化 |
| 可視化 | ウォーターフォール表示とレイテンシ分布 | サービスマップとトレース表示 |
| 計装 | OpenTelemetry が標準 | X-Ray SDK または OpenTelemetry(ADOT) |
| 収集方式 | サンプリング前提 | サンプリング前提 |
| メトリクスとの連携 | Cloud Monitoring と統合 | CloudWatch と統合 |
| ログとの連携 | Cloud Logging とトレース相互参照 | CloudWatch Logs と相関 |
GCP 内では、メトリクスは Cloud Monitoring、ログは Cloud Logging、エラーの集約は Error Reporting が担い、Cloud Trace は「時間軸での処理の流れ」に特化します。これらを併用して可観測性を構成します。
ハンズオン / CLI例
# プロジェクトで Cloud Trace API を有効化する
gcloud services enable cloudtrace.googleapis.com --project=PROJECT_ID
# アプリ実行用サービスアカウントにトレース書き込み権限を付与する
# (roles/cloudtrace.agent がスパン送信に必要なロール)
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:app-sa@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/cloudtrace.agent"
# 直近に取り込まれたトレースの一覧を確認する
gcloud trace list-traces --project=PROJECT_ID --limit=10
# 特定のトレースの詳細(スパン構成)を表示する
gcloud trace describe-trace TRACE_ID --project=PROJECT_ID
Google Cloud Service
Cloud Traceを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
監視・オブザーバビリティ
比較で見る軸
クラウド: Google Cloud / カテゴリ: 監視・オブザーバビリティ / 難易度: intermediate
導入後に効く点
App Engine などは自動でトレースを送信。それ以外は OpenTelemetry で計装する。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- 監視・オブザーバビリティ
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / performance
判断チェックリスト
- 自社の用途が「監視・オブザーバビリティ / operational」に近いか確認する。
- 強みである「リクエストが通る全サービスのスパンをつなぎ、遅延の発生箇所を可視化する。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。