【ぶんさんとれーしんぐ】

分散トレーシング とは?

💡 マイクロサービスの「荷物追跡」
📌 このページのポイント
分散トレーシング Trace ID: abc-123 リクエスト Service A Service B Service C ウォーターフォール表示 0ms 100ms 200ms Service A 200ms Service B 150ms Service C 80ms Trace IDで各サービスのSpanを紐付けて可視化
分散トレーシングのイメージ
ひよこ ひよこ

なぜ普通のログだけじゃダメなの?

ペンギン先生 ペンギン先生

マイクロサービスでは1つのリクエストがAPI Gateway→認証サービス→商品サービス→在庫サービス→決済サービスと複数サービスを通過する。各サービスのログは別々のサーバーに散らばっていて、「このリクエストがどのサービスで遅くなったか」を突き止めるのが困難。分散トレーシングはこれを1つのビューで可視化するんだ

ひよこ ひよこ

トレースIDとスパンIDの違いは?

ペンギン先生 ペンギン先生

トレースIDはリクエスト全体を識別するID。最初のサービスが生成して、後続のサービスにHTTPヘッダー(traceparent等)で伝搬する。スパンIDは各サービスの処理単位を識別するID。1つのトレースに複数のスパンがぶら下がるツリー構造になるよ。ウォーターフォール図で表示すると、どのスパンが遅いか一目瞭然だね

ひよこ ひよこ

OpenTelemetryって何?

ペンギン先生 ペンギン先生

トレース、メトリクス、ログを統一的に収集するためのオープンソース標準だよ。以前はOpenTracingとOpenCensusという2つの規格が乱立していたけど、統合されてOpenTelemetryになった。各言語のSDKが提供されていて、アプリにOpenTelemetry SDKを入れるだけで、Jaeger、Zipkin、Datadog等の好きなバックエンドにデータを送れるよ

ひよこ ひよこ

導入のコツは?

ペンギン先生 ペンギン先生

①まずはエッジサービス(API Gateway)から始めて段階的に広げる、②自動計装(auto-instrumentation)を活用して既存コードの変更を最小限に、③サンプリング率を設定して全リクエストは記録しない(コスト対策)、④チーム全員がトレーシングダッシュボードを見る文化を作る。ツールを入れただけで使わないのが一番もったいないよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「分散トレーシング」って出てきたら「マイクロサービス間のリクエスト経路を追跡する技術」と思えればだいたいOK!
📖 おまけ:英語の意味
「Distributed Tracing」 = 分散追跡
💬 Trace(追跡する)。宅配便の追跡番号のように、リクエストの「今どこにいるか」がわかるよ
← 用語集にもどる