分散トレーシングとは?
分散トレーシングは、1つのリクエストが多数のサービスを横断していく様子を追跡し、その道のり、タイミング、そしてどこで遅くなったり失敗したりしたかを示す完全な全体像を組み立てます。
マイクロサービスアーキテクチャでは、ユーザーの1つの操作が十数個のサービスに触れることもあります。それが遅くなったり失敗したりしたとき、単一のサービスのログだけでは全体像はわかりません。分散トレーシングは、点と点をつないでリクエストのエンドツーエンドの1つのビューにまとめることで、この問題を解決します。
解決する問題
リクエストが多数のサービスへ広がると、従来のログやメトリクスは各サービスを個別にしか示しません。分散トレーシングは1つのリクエストの完全な経路を再構成するため、切り離されたログの間で推測する代わりに、どのホップが遅かったのか、どのサービスがエラーを返したのかを正確に確認できます。
トレースとspan
トレースは1つのリクエストの旅全体を表し、それぞれが1つの作業単位(データベース呼び出しや別サービスへのRPCなど)であるspanで構成されます。spanはネストし連鎖し、そのタイミングがリクエストがどこで時間を費やしたかを正確に明らかにします。
トレースコンテキストの伝播
spanが一貫したトレースへと結び付くには、リクエストがサービスの境界をまたぐ際に、トレース識別子がそのリクエストと共に受け渡される必要があります - 通常はHTTPヘッダー経由です。この伝播こそが鍵となるメカニズムです。それがなければ、各サービスは1つのつながったトレースではなく、切り離された断片を生成することになります。
トレースの読み方
トレースは通常ウォーターフォールとして可視化され、各spanは長さがその継続時間を表すバーとして示されます。これによりボトルネックが一目で明らかになります。他は速い連鎖の途中にある1本の長いバーが、遅いサービスを特定します。これはレイテンシのデバッグを視覚的な作業に変えます。
3本目の柱
トレースは、ログやメトリクスと並ぶ観測可能性データの古典的な三位一体を完成させます。メトリクスは何かが遅いことを教え、ログは個々のサービスが何をしたかを教え、トレースは1つのリクエストがシステム全体をどう流れたかを示すことでそれらを結び付けます。
重要なポイント
- 分散トレーシングは、1つのリクエストがそれが触れるすべてのサービスを横断する様子を追跡します。
- トレースはspanで構成され、伝播されたトレースコンテキストによって結び付けられます。
- マイクロサービスにおけるレイテンシや障害のデバッグに不可欠です。