# Ресурси

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

---

<!-- markdownlint-disable no-duplicate-heading -->



[Ресурс](/docs/concepts/resources/) представляє сутність, що продукує телеметрію, у вигляді атрибутів ресурсу. Наприклад, OTP Release, що створює телеметрію у контейнері в Kubernetes, має імʼя OTP Releaseу, імʼя пода, простір імен і, можливо, імʼя розгортання. Всі ці чотири атрибути можуть бути включені до ресурсу.

У вашому бекенді спостережуваності ви можете використовувати інформацію про ресурс, щоб краще дослідити поведінку, яка вас цікавить. Наприклад, якщо дані трасування або метрики вказують на затримку у вашій системі, ви можете звузити її до певного контейнера, подів або розгортання Kubernetes.
{{__hugo_ctx/}}


## Використання детекторів ресурсів {#using-resource-detectors}

Детектори ресурсів отримують атрибути ресурсів з різних джерел. Стандартно детектори використовують змінну середовища ОС `OTEL_RESOURCE_ATTRIBUTES` та змінну середовища застосунку OTP `resource`.

Детектори, які використовуються, це список імен модулів і можуть бути налаштовані в
конфігурації застосунку:

   <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 class="n">opentelemetry</span><span class="p">,</span> <span class="p">{</span><span class="n">resource_detectors</span><span class="p">,</span> <span class="p">[</span><span class="n">otel_resource_env_var</span><span class="p">,</span> <span class="n">otel_resource_app_env</span><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">config</span> <span class="ss">:opentelemetry</span><span class="p">,</span> <span class="ss">resource_detectors</span><span class="p">:</span> <span class="p">[</span><span class="ss">:otel_resource_env_var</span><span class="p">,</span> <span class="ss">:otel_resource_app_env</span><span class="p">]</span>
</span></span></code></pre></div>
    </div>
</div>


Або через змінну середовища `OTEL_RESOURCE_DETECTORS`:

```sh
OTEL_RESOURCE_DETECTORS=otel_resource_env_var,otel_resource_app_env
```

Усі детектори ресурсів захищені тайм-аутом, у мілісекундах, після якого вони повертають порожнє значення. Це дозволяє детекторам ресурсів робити такі речі, як доступ до мережі, без потенційного зависання всієї програми. Типово це 5000 мілісекунд і може бути встановлено за допомогою змінної середовища `OTEL_RESOURCE_DETECTOR_TIMEOUT` або змінної застосунку `otel_resource_detector_timeout`.

## Додавання ресурсів за допомогою змінних середовища ОС та застосунку OTP {#adding-resources-with-os-and-otp-environment-variables}

З двома увімкненими стандартними детекторами ресурсів ви можете встановити атрибути ресурсів за допомогою змінної середовища ОС `OTEL_RESOURCE_ATTRIBUTES`:

```sh
OTEL_RESOURCE_ATTRIBUTES="deployment.environment=development"
```

Альтернативно, використовуйте змінну середовища `resource` застосунку OTP у конфігурації застосунку `opentelemetry` у `sys.config` або `runtime.exs`:

   <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">%% sys.config
</span></span></span><span class="line"><span class="cl"><span class="p">{</span><span class="n">opentelemetry</span><span class="p">,</span> <span class="p">{</span><span class="n">resource</span><span class="p">,</span> <span class="p">#{</span><span class="n">deployment</span> <span class="o">=&gt;</span> <span class="p">#{</span><span class="n">environment</span> <span class="o">=&gt;</span> <span class="o">&lt;&lt;</span><span class="s">&#34;development&#34;</span><span class="o">&gt;&gt;</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">## runtime.exs</span>
</span></span><span class="line"><span class="cl"><span class="n">config</span> <span class="ss">:opentelemetry</span><span class="p">,</span> <span class="ss">resource</span><span class="p">:</span> <span class="p">%{</span><span class="ss">deployment</span><span class="p">:</span> <span class="p">%{</span><span class="ss">environment</span><span class="p">:</span> <span class="s2">&#34;development&#34;</span> <span class="p">}}</span>
</span></span></code></pre></div>
    </div>
</div>


Атрибути ресурсів у змінній середовища `resource` застосунку OTP розгортаються та обʼєднуються з `.` таким чином, що `#{deployment => #{environment => <<"development">> }` є тим самим, що і `#{'deployment.environment' => <<"development">>}`.

## Користувацькі детектори ресурсів {#custom-resource-detectors}

Користувацькі детектори ресурсів можуть бути створені шляхом реалізації [поведінки `otel_resource_detector`](https://hexdocs.pm/opentelemetry/1.3.0/otel_resource_detector.html#callbacks), яка містить єдиний зворотний виклик `get_resource/1`, що повертає [`otel_resource`](https://hexdocs.pm/opentelemetry/1.3.0/otel_resource.html).

Зверніть увагу, що існують [семантичні домовленості](/docs/specs/semconv/resource/), визначені для `resource`, яких слід дотримуватися, якщо вони застосовуються при додаванні нових атрибутів ресурсів.
