バゲッジ

シグナル間でやり取りされるコンテキスト情報

OpenTelemetryでは、バゲッジ(Baggage)はコンテキストの隣にあるコンテキスト情報です。 バゲッジはキーバリューストアなので、コンテキストと一緒に好きなデータを伝搬できます。

バゲッジは、サービスやプロセス間でデータを受け渡し、それらのサービス内のトレースメトリクスログに追加できるようにします。

バゲッジは、トレースで、サービス間で追加データを伝播するためによく使用されます。

たとえば、リクエストの最初に clientId があるとします。 しかし、そのIDをトレース内のすべてのスパン、別のサービスのいくつかのメトリクス、そして途中のいくつかのログで利用できるようにしたいとします。 トレースは複数のサービスにまたがる可能性があるため、 clientId を多くのサービスにコピーすることなくデータを伝播する方法が必要です。 clientId をコードベースのあちこちにコピーすることなく、そのデータを伝播する方法が必要です。

コンテキスト伝搬を使用して、これらのサービス間でバゲッジを渡すことで、 clientId を追加のスパン、メトリクス、またはログに追加できます。 さらに、計装は自動的にバゲッジを伝搬してくれます。

OTel Baggage

OTelバゲッジの使い道

バゲッジは、通常リクエストの開始時にのみ利用可能な情報を、さらに下流に含めるために使用するのが最適です。 これはたとえば、アカウント識別子、ユーザーID、製品ID、オリジンIPのようなものを含められます。

バゲッジを使ってこの情報を伝播することで、バックエンドのテレメトリーをより深く分析できます。 たとえば、データベース呼び出しを追跡するスパンにユーザーIDのような情報を含めると、「どのユーザーがもっとも遅いデータベース呼び出しを経験しているか」のような質問に、より簡単に答えられます。 また、下流の操作に関する情報をログに記録し、同じユーザーIDをログデータに含めることもできます。

OTel Baggage

バゲッジのセキュリティに関する懸念事項

機密性の高いバゲッジのアイテムは、サードパーティのAPIなど、意図しないリソースと共有される可能性があります。 これは、自動計装が、サービスのネットワークリクエストのほとんどにバゲッジを含むためです。 具体的には、バゲッジやトレースコンテキストの他の部分はHTTPヘッダーで送信されるため、ネットワークトラフィックを検査する誰もがそれを見ることができます。 トラフィックがネットワーク内で制限されている場合は、このリスクは適用されないかもしれませんが、下流のサービスがバゲッジをネットワーク外に伝播する可能性があることに留意してください。

また、バゲッジのアイテムがあなたのものであることを確認するための完全性チェックは組み込まれていません。そのため、読み取る際には注意が必要です。

バゲッジは属性とは異なる

バゲッジについて注意すべき重要な点は、バゲッジは独立したキーバリューストアであり、明示的に追加しない限り、スパン、メトリクス、ログの属性と関連付けられないということです。

バゲッジの要素を各テレメトリーの属性に追加するには、明示的にバゲッジからデータを読み取り、スパン、メトリクス、またはログに属性として追加する必要があります。

バゲッジの一般的な使用例は、トレース全体にわたってスパン属性にデータを追加することなので、いくつかの言語には、スパン作成時にバゲッジからデータを属性として追加するバゲッジスパンプロセッサがあります。

詳細はバゲッジ仕様を参照のこと。