# 伝搬

Site [llms.txt](/ja/llms.txt)

---

コンテキスト伝搬により、[シグナル](/docs/concepts/signals/)は、生成される場所に関係なく、相互に関連付けることができます。
トレーシングに限定されませんが、コンテキスト伝搬により、[トレース](/docs/concepts/signals/traces/)は、プロセスとネットワークの境界を越えて任意に分散されたサービス間で、システムに関する因果関係の情報を構築できます。

大多数のユースケースでは、OpenTelemetryをネイティブにサポートするライブラリまたは[計装ライブラリ](../libraries/)が、自動的にサービス間でトレースコンテキストを伝搬します。
手動でコンテキストを伝搬する必要があるのは、まれなケースのみです。



詳細については、[コンテキスト伝搬](/docs/concepts/context-propagation)を参照してください。







## 自動コンテキスト伝搬 {#automatic-context-propagation}

分散トレースは単一のサービスを超えて広がるため、スパン間の親子関係を作成するためにサービス間でコンテキストを伝搬する必要があります。
これにはサービス間の[_コンテキスト伝搬_](/docs/specs/otel/overview/#context-propagation)が必要です。
これは、トレースの識別子をリモートプロセスに送信する仕組みです。

[Phoenix](https://github.com/open-telemetry/opentelemetry-erlang-contrib/tree/main/instrumentation/opentelemetry_phoenix)、[Cowboy](https://github.com/open-telemetry/opentelemetry-erlang-contrib/tree/main/instrumentation/opentelemetry_cowboy)、[Elli](https://github.com/open-telemetry/opentelemetry-erlang-contrib/tree/main/instrumentation/opentelemetry_elli) などの HTTP フレームワークおよびサーバーの計装ライブラリや、[Tesla](https://github.com/open-telemetry/opentelemetry-erlang-contrib/tree/main/instrumentation/opentelemetry_tesla) などのクライアントは、グローバルに登録されたプロパゲーターを使用してコンテキストを自動的に注入または抽出します。
デフォルトで使用されるグローバルプロパゲーターは、W3C [Trace Context](https://w3c.github.io/trace-context/) と [Baggage](https://www.w3.org/TR/baggage/) フォーマットです。

OTP アプリケーション環境変数 `text_map_propagators` を使用して、グローバルプロパゲーターを設定できます。

   <ul class="nav nav-tabs" id="tabs-1" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
          data-td-tp-persist="erlang" aria-controls="tabs-01-00" aria-selected="true">
        Erlang
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
          data-td-tp-persist="elixir" aria-controls="tabs-01-01" aria-selected="false">
        Elixir
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-1-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-erlang" data-lang="erlang"><span class="line"><span class="cl"><span class="c">%% sys.config
</span></span></span><span class="line"><span class="cl"><span class="p">...</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span><span class="n">text_map_propagators</span><span class="p">,</span> <span class="p">[</span><span class="n">baggage</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                        <span class="n">trace_context</span><span class="p">]},</span>
</span></span><span class="line"><span class="cl"><span class="p">...</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-elixir" data-lang="elixir"><span class="line"><span class="cl"><span class="c1">## runtime.exs</span>
</span></span><span class="line"><span class="cl"><span class="n">...</span>
</span></span><span class="line"><span class="cl"><span class="ss">text_map_propagators</span><span class="p">:</span> <span class="p">[</span><span class="ss">:baggage</span><span class="p">,</span> <span class="ss">:trace_context</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"><span class="n">...</span>
</span></span></code></pre></div>
    </div>
</div>


環境変数 `OTEL_PROPAGATORS` を使用して、カンマ区切りのリストを渡すこともできます。
どちらの設定方法でも、`trace_context`、`baggage`、[`b3`](https://github.com/openzipkin/b3-propagation)、`b3multi` の値を受け付けます。

## 手動コンテキスト伝搬 {#manual-context-propagation}

コンテキストを手動で注入または抽出するには、`otel_propagator_text_map` モジュールを使用します。

   <ul class="nav nav-tabs" id="tabs-2" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
          data-td-tp-persist="erlang" aria-controls="tabs-02-00" aria-selected="true">
        Erlang
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
          data-td-tp-persist="elixir" aria-controls="tabs-02-01" aria-selected="false">
        Elixir
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-2-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-erlang" data-lang="erlang"><span class="line"><span class="cl"><span class="c">%% プロセスディクショナリのコンテキストを使用して、空のヘッダーリストに追加する
</span></span></span><span class="line"><span class="cl"><span class="nv">Headers</span> <span class="o">=</span> <span class="nn">otel_propagator_text_map</span><span class="p">:</span><span class="nf">inject</span><span class="p">([]),</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c">%% ヘッダーからプロセスディクショナリにコンテキストを作成する
</span></span></span><span class="line"><span class="cl"><span class="nn">otel_propagator_text_map</span><span class="p">:</span><span class="nf">extract</span><span class="p">(</span><span class="nv">Headers</span><span class="p">),</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-elixir" data-lang="elixir"><span class="line"><span class="cl"><span class="c1"># プロセスディクショナリのコンテキストを使用して、空のヘッダーリストに追加する</span>
</span></span><span class="line"><span class="cl"><span class="n">headers</span> <span class="o">=</span> <span class="ss">:otel_propagator_text_map</span><span class="o">.</span><span class="n">inject</span><span class="p">([])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># ヘッダーからプロセスディクショナリにコンテキストを作成する</span>
</span></span><span class="line"><span class="cl"><span class="ss">:otel_propagator_text_map</span><span class="o">.</span><span class="n">extract</span><span class="p">(</span><span class="n">headers</span><span class="p">)</span>
</span></span></code></pre></div>
    </div>
</div>


`otel_propagator_text_map:inject/1` と `otel_propagator_text_map:extract/1` は、グローバルに登録されたプロパゲーターを使用します。
特定のプロパゲーターを使用するには、`otel_propagator_text_map:inject/2` と `otel_propagator_text_map:extract/2` を使用し、第一引数に呼び出すプロパゲーターモジュールの名前を指定します。

## 次のステップ {#next-steps}

伝搬について詳しくは、[Propagators API 仕様](/docs/specs/otel/context/api-propagators/)を参照してください。
