OpenTelemetry Baggage - Context との違いを理解する ​

分散システムではアプリケーション間でデータを受け渡す必要があります。OpenTelemetryではこのために「Context」と「Baggage」という2つの仕組みを提供しています。似たように聞こえるかもしれませんが、これらは異なる目的で設計されており、適切に使い分けることが大切です。

Context とは ​

Contextは、トレース情報と関連するメタデータを分散システム内で伝播させるための仕組みです。最も一般的な使用例はトレースコンテキスト(Trace Context)です。

Contextの特徴 ​

Contextは、あるリクエストがシステム全体を通じて追跡されるために必要な情報を保持しています。例えば、スマートフォンのアプリからAPIサーバーへのリクエストが、さらに複数のマイクロサービスを経由する場合、このリクエストを一貫して追跡するためにトレースIDやスパンIDといった情報が必ず必要になります。これがContextの役割です。

Contextは主にトレーシング機能に特化しており、以下のような特徴があります。

  • トレースID、スパンIDなど、トレーシングに必須の情報を保持
  • 各スパンの親子関係を記録
  • タイムスタンプやスパンの属性情報を含む
  • システムプロセス内で自動的に伝播される

Contextの使用例 ​

ユーザーのリクエストが複数のサービスを経由する場合、Contextはそのリクエスト全体を一本の線として追跡します。これにより、どのサービスで処理が遅延しているか、どこでエラーが発生したかを可視化できます。

Baggage とは ​

Baggageは、Contextとは異なる目的で設計されています。分散システム内の複数のサービス間で、ビジネスロジックに関連したカスタムメタデータを伝播させるための仕組みです。

Baggageの特徴 ​

Baggageは開発者が必要に応じて定義・追加できるカスタムデータです。トレーシング以外の目的でデータを伝播させたい場合に活用されます。

  • ユーザーID、テナントID、リクエストのプライオリティなど、カスタムなメタデータを保持
  • 各マイクロサービスで任意のキーバリューペアを追加・削除できる
  • トレースコンテキストと一緒に複数のサービス間で伝播
  • アプリケーション開発者が明示的に定義して使用

Baggageの使用例 ​

例えば、SaaS環境で複数のテナントが同じインフラを共有している場合を考えます。あるテナント(顧客A)のリクエストがシステムを通過する際、そのテナントIDをBaggageに含めておきます。そうすることで、複数のマイクロサービスの各スパンに自動的にテナントIDが付加されます。その後、メトリクスやログを分析する際にテナント単位でフィルタリングできるようになります。

Context と Baggage の比較表 ​

観点ContextBaggage
主な目的トレーシングに必須の情報を伝播カスタムメタデータの伝播
保持情報トレースID、スパンID、タイムスタンプキーバリューペアのカスタムデータ
定義方法OpenTelemetryにより自動的に管理アプリケーション開発者が定義
管理範囲トレーシング機能に限定ビジネスロジック中心
使用シーンシステムの動作フロー追跡テナントID、ユーザー情報の伝播
パフォーマンス影響最小限(必須情報のみ)送信するデータ量に依存

実際の使い分け ​

分散システムの各マイクロサービスで、Contextと Baggageがどのように機能するかを想像してみます。

シナリオ:複数テナント対応SaaS ​

  1. クライアントがリクエストを送信
  2. 最初のマイクロサービス(認証サービス)でトレースコンテキストが生成される
  3. テナントIDをBaggageに追加
  4. リクエストが複数のマイクロサービスを経由しながら、Context と Baggageが伝播
  5. 各サービスのスパンに自動的にテナントIDが紐付けられる
  6. 分析時にテナント単位でデータを集計・可視化

このように、Context は「このリクエストの全体像を追跡するための道筋」、Baggage は「その道筋上で必要なビジネス情報を添える荷物」という関係性です。

Baggage を活用するメリット ​

Baggageを適切に活用すると、次のようなメリットが得られます。

ビジネスコンテキストの可視性向上 トレース、メトリクス、ログにビジネス情報を自動付加できるため、運用・分析が容易になります。SaaS環境でテナント単位、ユーザー単位でのパフォーマンス分析が可能です。

デバッグ情報の効率的な収集 各マイクロサービスでカスタムの情報(リクエストのプライオリティ、リトライ回数など)を保持し、分散トレース上で確認できます。問題発生時の原因特定が迅速になります。

監視・アラートの粒度向上 メトリクスをBaggageで分析すると、より細粒度での監視が可能です。例えば、VIP顧客のリクエストだけを追跡し、特に高い可用性要件を確保するといった運用ができます。

次のステップ ​

Context と Baggage の役割を理解したら、次は実装パターンを学びます。実際のコードでどのように Baggage を追加し、マイクロサービス間で伝播させるかを確認することで、より実践的な理解が深まります。