【とれーしんぐ】
トレーシング とは?
最終更新:
💡 処理の区間をつなぎ、経路と時間を調べる
処理の経路や区間を記録して調査する技術。このページではリクエストのトレーシングを中心に、スパン、サービス間の文脈伝搬、記録の範囲と限界を解説します。
📌 このページのポイント
- 処理の経路や各区間を記録し、調査に役立てる
- 分散トレーシングは、複数サービスにまたがる処理を追う
- スパンは一つの処理区間で、親子関係などを持つ
- 計測していない処理や、保存しないトレースは見えない
注文の処理が遅い時、何が分かる?
アプリが記録した処理の区間をつないで、どこを通り、どの区間に時間がかかったかを調べられるよ。一つのアプリでも使えるし、複数サービスをまたぐ調査にも使う。記録の対象にした処理が見えるんだ。
トレースと、スパンはどう違う?
一つの要求などに関連する処理のまとまりがトレース。スパンは開始・終了時刻などを持つ一つの処理区間だよ。注文処理の中にDBへの問い合わせがあれば、親スパンと子スパンとして表せる。サービス一つにつき必ず一スパンではないんだ。
別のサービスの記録は、どうつなぐ?
トレースIDや親となるスパンの情報など、追跡に必要な文脈を次の処理へ引き継ぐよ。各サービスでも計測して、関係のあるスパンを収集する。IDを付けただけで、未計測の処理まで見えるわけではないんだ。
記録は、全部残る?
サンプリングなどで、残すトレースを選ぶ場合があるよ。計測や収集の設定、文脈の引き継ぎが欠ければ、全体がつながらないこともある。何を計測し、何を保存しているかも確認しよう。
OpenTelemetryを入れたら、原因まで分かる?
OpenTelemetryは、トレースなどの情報を計測・収集・出力するための仕組みだよ。保存や表示は別のツール等と組み合わせる。遅い区間が分かっても原因が確定するとは限らないので、ログやメトリクスなども照合して調べるんだ。
もっと詳しく知りたい人へ
スパンの所要時間を足せば、全体の時間になる?
親区間の中に子区間が含まれたり、複数の処理が並行して動いたりします。単純に合計すると同じ時間を二重に数えることがあります。開始・終了と親子関係、処理の重なりを確認します。
ログやメトリクスとの違いは?
ログは出来事の記録、メトリクスは件数や時間等の測定値、トレースは処理区間とその関係をたどるための記録として使います。情報を関連付けると調査に役立ちますが、三つあれば必ず全状況を説明できるという意味ではありません。
まとめ:ざっくりこれだけ覚えればOK!
「トレーシング」って出てきたら「処理の区間を記録して、経路やかかった時間をたどる技術」と思えばだいたいOK!
📖 おまけ:英語の意味
「Tracing」 = 跡をたどる、追跡すること
💬 プログラムの実行等を追跡する広い呼び方です。ここではアプリへの要求を中心に説明し、サービスをまたぐ場合を分散トレーシングと呼びます。