# Поширення

LLMS index: [llms.txt](/llms.txt)

---


Завдяки поширенню контексту [сигнали](/docs/concepts/signals/) можуть бути повʼязані між собою, незалежно від того, де вони генеруються. Хоча поширення контексту не обмежується трейсами, воно дозволяє [трейсам](/docs/concepts/signals/traces/) створювати причинно-наслідкову інформацію про систему між сервісами, які довільно розподілені між процесами та межами мереж.

У переважній більшості випадків використання бібліотеки, що нативно підтримують OpenTelemetry або [бібліотеки інструментування](../libraries/), автоматично поширюватимуть контекст трасування між сервісами. Лише в рідкісних випадках вам доведеться поширювати контекст вручну.



Щоб дізнатися більше, дивіться [Поширення контексту](/docs/concepts/context-propagation).




{{__hugo_ctx/}}



## Автоматичне поширення контексту {#automatic-context-propagation}

Розподілені трасування виходять за межі одного сервісу, що означає, що деякий контекст повинен бути переданий між сервісами для створення відносин пращур-нащадок між Відрізками. Це вимагає міжсервісного [_поширення контексту_](/docs/specs/otel/overview/#context-propagation), механізму, за допомогою якого ідентифікатори для Трасування надсилаються до віддалених процесів.

Бібліотеки інструментування для HTTP фреймворків та серверів, таких як [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) та клієнтів, таких як [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">%% створює контекст у словнику процесу з Headers
</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"># створює контекст у словнику процесу з headers</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}

Щоб дізнатися більше про поширення, прочитайте [Специфікацію API поширювачів](/docs/specs/otel/context/api-propagators/).
