伝搬
コンテキスト伝搬により、シグナルは、生成される場所に関係なく、相互に関連付けることができます。 トレーシングに限定されませんが、コンテキスト伝搬により、トレースは、プロセスとネットワークの境界を越えて任意に分散されたサービス間で、システムに関する因果関係の情報を構築できます。
大多数のユースケースでは、OpenTelemetryをネイティブにサポートするライブラリまたは計装ライブラリが、自動的にサービス間でトレースコンテキストを伝搬します。 手動でコンテキストを伝搬する必要があるのは、まれなケースのみです。
詳細については、コンテキスト伝搬を参照してください。
自動コンテキスト伝搬
分散トレースは単一のサービスを超えて広がるため、スパン間の親子関係を作成するためにサービス間でコンテキストを伝搬する必要があります。 これにはサービス間のコンテキスト伝搬が必要です。 これは、トレースの識別子をリモートプロセスに送信する仕組みです。
Phoenix、Cowboy、Elli などの HTTP フレームワークおよびサーバーの計装ライブラリや、Tesla などのクライアントは、グローバルに登録されたプロパゲーターを使用してコンテキストを自動的に注入または抽出します。 デフォルトで使用されるグローバルプロパゲーターは、W3C Trace Context と Baggage フォーマットです。
OTP アプリケーション環境変数 text_map_propagators を使用して、グローバルプロパゲーターを設定できます。
%% sys.config
...
{text_map_propagators, [baggage,
trace_context]},
...
## runtime.exs
...
text_map_propagators: [:baggage, :trace_context],
...
環境変数 OTEL_PROPAGATORS を使用して、カンマ区切りのリストを渡すこともできます。
どちらの設定方法でも、trace_context、baggage、b3、b3multi の値を受け付けます。
手動コンテキスト伝搬
コンテキストを手動で注入または抽出するには、otel_propagator_text_map モジュールを使用します。
%% プロセスディクショナリのコンテキストを使用して、空のヘッダーリストに追加する
Headers = otel_propagator_text_map:inject([]),
%% ヘッダーからプロセスディクショナリにコンテキストを作成する
otel_propagator_text_map:extract(Headers),
# プロセスディクショナリのコンテキストを使用して、空のヘッダーリストに追加する
headers = :otel_propagator_text_map.inject([])
# ヘッダーからプロセスディクショナリにコンテキストを作成する
:otel_propagator_text_map.extract(headers)
otel_propagator_text_map:inject/1 と otel_propagator_text_map:extract/1 は、グローバルに登録されたプロパゲーターを使用します。
特定のプロパゲーターを使用するには、otel_propagator_text_map:inject/2 と otel_propagator_text_map:extract/2 を使用し、第一引数に呼び出すプロパゲーターモジュールの名前を指定します。
次のステップ
伝搬について詳しくは、Propagators API 仕様を参照してください。
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!