分散トレース
1つのリクエストが複数のプロセス、サーバー、コンテナを経由して処理される際の、アプリケーションの処理を追跡する仕組み。各プロセス内で処理状態を収集(
TRACE)し、通信の流れを把握し、統計情報(
メトリクス)によってボトルネックや問題の
プロファイリングを行えます。
背景
単一サーバー時代から、複数サーバー複数コンテナ時代になって、通信の流れやボトルネックの把握が難しくなった。
通信やボトルネックを追跡するため
分散トレースの仕組みが必要となった
仕組み
トレーサー: データ収集(ライブラリ含む)
プロセス内の処理状態を収集
HTTP HeaderにTrace IDを注入し、次のプロセス(サービス)に繋ぐ
モニタリング: TRACEの結果の表示
用語
ツール
参考資料
> 各処理にどれだけ時間がかかったのかを、ルールに従って出力することにより、複雑に関連しあったタスクでどこに問題があるのかを一目で見れるようにする。たんなるログではなく、親子関係の構造を持つログ。
> タスクのスタートと終了時に、特別なAPIを使って記録する(この1区画をスパンと呼ぶ)
> スパンを作る時には、親のスパンのIDをAPIに渡すことで、親子関係があることを通知する
> バッチ処理から作られるワーカーの場合は、スパンIDどうしをリンクすることで、関連するスパンであることを通知する
> ネットワーク越しにタスクを投げる時は、X-B3-TraceId, X-B3-ParentSpanIdといったヘッダー、gRPCのメタデータなどを介して、別プロセスでも親子関係のあるタスクを行なっていることを通知する
> スパンに対してログ、タグといったものを出力することもできる
> 分散トレースの文脈では、スパンの集合=トレース
> 2003年「Magpie: Online Modelling and Performance-aware Systems」
> 2007年「X-Trace: A Pervasive Network Tracing Framework」
> 2010年「Dapper, a Large-Scale Distributed Systems Tracing Infrastructure」