分散トレーシング ぶんさんとれーしんぐ
分散トレーシングJaegerZipkinマイクロサービススパントレースID
分散トレーシングについて教えて
分散トレーシングとは
分散トレーシング(Distributed Tracing)とは、マイクロサービスやサーバーレスなど複数のサービスにまたがるリクエストの処理過程を追跡し、全体の流れと各処理のレイテンシを可視化する技術です。オブザーバビリティ(可観測性)の3本柱(メトリクス・ログ・トレース)の「トレース」に相当します。
モノリシックなアプリケーションであれば、スタックトレースを見ればボトルネックを特定できました。しかし、マイクロサービスでは1つのユーザーリクエストが「フロントエンド → API Gateway → 注文サービス → 在庫サービス → 決済サービス → 通知サービス」と複数サービスを通過するため、どこで遅延が発生しているかが見えにくくなります。
分散トレーシングでは、リクエスト発生時にトレースID(Trace ID)を発行し、各サービスへのリクエストヘッダーに伝播させます。各サービスは自分の処理をスパン(Span)として記録し、全スパンを集めることでガントチャート状のトレースとして可視化できます。
主要概念
| 用語 | 説明 |
|---|---|
| トレース(Trace) | 1つのリクエストの全処理を表す一連のスパンの集合 |
| スパン(Span) | 単一サービス内の処理単位。開始時刻・終了時刻・タグを持つ |
| トレースID | トレース全体を一意に識別するID。全スパンで共有 |
| スパンID | 個々のスパンを識別するID |
| 親スパン / 子スパン | サービス間呼び出しを親子関係で表現 |
| コンテキスト伝播 | トレースIDをHTTPヘッダー等でサービス間に引き渡す仕組み |
代表的なトレースコンテキストヘッダー
traceparent(W3C Trace Context標準)X-B3-TraceId(Zipkin/B3形式)X-Amzn-Trace-Id(AWS X-Ray形式)
歴史と背景
- 2010年:Googleが内部論文「Dapper」を発表。分散トレーシングの概念を体系化
- 2012年:TwitterがZipkinをOSSとして公開
- 2016年:JaegerがUber社により開発・公開。CNCFに寄贈
- 2016年:OpenTracing(CNCF)が分散トレーシングのAPIを標準化
- 2018年:OpenCensus(Google発)が計装ライブラリを提供
- 2019年:OpenTracingとOpenCensusが統合されOpenTelemetryとして一本化
分散トレースの可視化イメージ
主要ツール比較
| ツール | 開発元 | 特徴 |
|---|---|---|
| Jaeger | Uber→CNCF | OSSで機能豊富、Kubernetes環境に最適 |
| Zipkin | Twitter→OSS | シンプルで導入しやすい老舗ツール |
| AWS X-Ray | Amazon | AWS環境との統合が容易 |
| Datadog APM | Datadog | 商用。メトリクス・ログとの統合が強力 |
| Tempo | Grafana Labs | Grafanaと連携しコスト効率が良い |
関連する規格・RFC
| 規格 | 内容 |
|---|---|
| W3C Trace Context(REC) | traceparent / tracestate ヘッダーの標準仕様 |
| B3 Propagation | Zipkinが提唱したトレースコンテキスト伝播形式 |
関連用語
- OpenTelemetry — 分散トレーシングの計装・収集標準
- ログ集約・構造化ログ — トレースIDでログと紐付ける
- マイクロサービス — 分散トレーシングが特に必要になるアーキテクチャ
- メトリクス・カスタムメトリクス — トレースと組み合わせるオブザーバビリティの要素