# Jaeger Uber Technologies が発案・開発し、現在は CNCF(Cloud Native Computing Foundation)が管理するオープンソースの分散トレーシングシステム。 ## 概要 - gRPC・Thrift・REST など複数の RPC プロトコルに対応。 - **トレースコンテキスト(Trace ID)** を RPC に付与してインバンドで伝播させ、各スパンの開始/終了タイムスタンプを収集。 - スパンはアウトオブバンド(非同期)でコレクターへ送信され、永続化後にトレース ID で相関付けて 1 トレースにまとめる。 - Uber での利用: 全サービスに計装済み。アダプティブサンプリング率 < 1%。1 日あたり 8.4 億トレース・2,100 億スパン(約 300 万スパン/秒)を処理。 ## Uber 本番での構成(CRISP 論文より) - **jaeger-agent**: 各ホストで稼働。アプリケーションから UDP でスパンを受信。 - **jaeger-collector**: jaeger-agent からスパンを受け取り、Kafka へバッファリング。 - **jaeger-ingester**: Kafka から Docstore(分散 SQL DB)へ挿入し、完全なトレースを検索可能にする。 - **jaeger-indexer**: Sawmill(スキーマ非依存のログ基盤)へ挿入し、フィールド検索を可能にする。 - 処理規模: 1 秒あたり約 40 万〜100 万スパン、1 日あたり約 20TB。 ### スパン形式の既知の制約(CRISP 論文より) - 親スパン(呼び出し元)は子スパンの依存情報を持たない。最後に終了した子スパンの情報は直接記録されていない。 - 異なるホストのクロックはドリフトするため、子スパンの終了順序の推定に誤差が生じる可能性がある(Uber 本番: 118K トレース中 50% 超でスパンオーバーラップ、P50=204µs、最大 1696µs)。 - テールベースサンプリングに非対応(CRISP 論文執筆時点)。ヘッドベースの適応的サンプリングを採用。 ## 登場ソース - [[@2024__PACMCAS__The Tale of Errors in Microservices]] — 非致命的 RPC エラー研究の観測基盤として使用。LR Estimator の入力データを提供 - [[@2022__USENIX ATC__CRISP - Critical Path Analysis of Large-Scale Microservice Architectures]] — [[CRISP]] の入力トレース基盤として使用。スパン形式の制約とクロックスキューへの対処を詳細に分析