# Автоматична інструменталізація Lambda

> Автоматично інструментуйте ваші Lambda за допомогою OpenTelemetry

---

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

---

Спільнота OpenTelemetry надає окремі шари інструменталізації Lambda для наступних мов:

- Java
- JavaScript
- Python
- Ruby

Ці шари можна додати до вашої Lambda за допомогою порталу AWS для автоматичної інструменталізації вашого застосунку. Ці шари не включають Collector, який є обовʼязковим доповненням, якщо ви не налаштуєте зовнішній екземпляр Collector для надсилання ваших даних.

## Додайте ARN шару OTel Collector Lambda {#add-the-arn-of-the-otel-collector-lambda-layer}

Дивіться [керівництво по шару Collector Lambda](../lambda-collector/), щоб додати шар до вашого застосунку та налаштувати Collector. Ми рекомендуємо додати це спочатку.

## Вимоги до мови {#language-requirements}

     <ul class="nav nav-tabs" id="tabs-0" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
          data-td-tp-persist="java" aria-controls="tabs-00-00" aria-selected="true">
        Java
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
          data-td-tp-persist="javascript" aria-controls="tabs-00-01" aria-selected="false">
        JavaScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
          data-td-tp-persist="python" aria-controls="tabs-00-02" aria-selected="false">
        Python
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-03" role="tab"
          data-td-tp-persist="ruby" aria-controls="tabs-00-03" aria-selected="false">
        Ruby
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-0-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
        <p>Шар Lambda підтримує середовища виконання Java 8, 11 та 17 (Corretto). Для отримання додаткової інформації про підтримувані версії Java дивіться <a href="/uk/docs/languages/java/">документацію OpenTelemetry Java</a>.</p>
<p><strong>Примітка:</strong> Агент автоматичної інструменталізації Java знаходиться в шарі Lambda — Автоматична інструменталізація має значний вплив на час запуску в AWS Lambda, і вам зазвичай потрібно використовувати це разом з виділеним паралелізмом та запитами на розігрів, щоб обслуговувати ваші промислові запити без виклику тайм-аутів на початкових запитах під час ініціалізації.</p>
<p>Стандартно агент OTel Java в шарі спробує автоматично інструментувати весь код у вашому застосунку. Це може негативно вплинути на час холодного запуску Lambda.</p>
<p>Ми рекомендуємо вмикати автоматичну інструменталізацію лише для бібліотек/фреймворків, які використовуються вашим застосунком.</p>
<p>Щоб увімкнути лише конкретні інструменталізації, ви можете використовувати наступні змінні середовища:</p>
<ul>
<li>
<p><code>OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED</code>: якщо встановлено false, вимикає автоматичну інструменталізацію в шарі, вимагаючи увімкнення кожної інструменталізації окремо.</p>
</li>
<li>
<p><code>OTEL_INSTRUMENTATION_&lt;NAME&gt;_ENABLED</code>: встановіть true, щоб увімкнути автоматичну інструменталізацію для конкретної бібліотеки або фреймворку. Замініть <code>&lt;NAME&gt;</code> на інструменталізацію, яку ви хочете увімкнути. Для списку доступних інструменталізацій дивіться <a href="/uk/docs/zero-code/java/agent/disable/#suppressing-specific-agent-instrumentation">Придушення конкретної інструменталізації агента</a>.</p>
</li>
</ul>
<p>Наприклад, щоб увімкнути автоматичну інструменталізацію лише для Lambda та AWS SDK, ви повинні встановити наступні змінні середовища:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl"><span class="nv">OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED</span><span class="o">=</span><span class="nb">false</span>
</span></span><span class="line"><span class="cl"><span class="nv">OTEL_INSTRUMENTATION_AWS_LAMBDA_ENABLED</span><span class="o">=</span><span class="nb">true</span>
</span></span><span class="line"><span class="cl"><span class="nv">OTEL_INSTRUMENTATION_AWS_SDK_ENABLED</span><span class="o">=</span><span class="nb">true</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
        <p>Шар Lambda підтримує середовища виконання Node.js v18+. Для отримання додаткової інформації про підтримувані версії JavaScript та Node.js дивіться <a href="https://github.com/open-telemetry/opentelemetry-js" target="_blank" rel="noopener" class="external-link">документацію OpenTelemetry JavaScript</a>.</p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
        <p>Шар Lambda підтримує середовища виконання Python 3.9+. Для отримання додаткової інформації про підтримувані версії Python дивіться <a href="https://github.com/open-telemetry/opentelemetry-python/blob/main/README.md#supported-runtimes" target="_blank" rel="noopener" class="external-link">документацію OpenTelemetry Python</a> та пакет на <a href="https://pypi.org/project/opentelemetry-api/" target="_blank" rel="noopener" class="external-link">PyPi</a>.</p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-03" role="tabpanel" aria-labelled-by="tabs-00-03-tab" tabindex="0">
        <p>Шар Lambda підтримує середовища виконання Ruby 3.2 та 3.3. Для отримання додаткової інформації про підтримувані версії OpenTelemetry Ruby SDK та API дивіться <a href="https://github.com/open-telemetry/opentelemetry-ruby/blob/main/README.md#compatibility" target="_blank" rel="noopener" class="external-link">документацію OpenTelemetry Ruby</a> та пакет на <a href="https://rubygems.org/search?query=opentelemetry" target="_blank" rel="noopener" class="external-link">RubyGem</a>.</p>

    </div>
</div>


## Налаштуйте `AWS_LAMBDA_EXEC_WRAPPER` {#configure-aws_lambda_exec_wrapper}

Змініть точку входу вашого застосунку, встановивши `AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler` для Node.js, Java, Ruby чи Python. Ця скрипт-обгортка викликатиме ваш застосунок Lambda з застосованою автоматичною інструменталізацією.

## Додайте ARN шару інструменталізації Lambda {#add-the-arn-of-instrumentation-lambda-layer}

Щоб увімкнути автоматичну інструменталізацію OTel у вашій функції Lambda, вам потрібно додати та налаштувати шари інструменталізації та Collector, а потім увімкнути трасування.

1. Відкрийте функцію Lambda, яку ви маєте намір інструментувати, в консолі AWS.
2. У розділі Layers in Designer виберіть Add a layer.
3. У розділі specify an ARN вставте ARN шару, а потім виберіть Add.

Знайдіть [найновіший реліз шару інструменталізації](https://github.com/open-telemetry/opentelemetry-lambda/releases) для вашої мови та використовуйте його ARN після зміни теґу `<region>` на регіон, в якому знаходиться ваша Lambda.

Примітка: Шари Lambda є регіоналізованим ресурсом, тобто вони можуть використовуватися лише в регіоні, в якому вони опубліковані. Переконайтеся, що використовуєте шар в тому ж регіоні, що і ваші функції Lambda. Спільнота публікує шари у всіх доступних регіонах.

## Налаштуйте експортери SDK {#configure-your-sdk-exporters}

Стандартні експортери, які використовуються шарами Lambda, працюватимуть без змін, якщо є вбудований Collector з приймачами gRPC / HTTP. Змінні середовища не потрібно оновлювати. Однак, існують різні рівні підтримки протоколів та стандартних значень для кожної мови, які задокументовані нижче.

     <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="java" aria-controls="tabs-01-00" aria-selected="true">
        Java
      </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="javascript" aria-controls="tabs-01-01" aria-selected="false">
        JavaScript
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-02" role="tab"
          data-td-tp-persist="python" aria-controls="tabs-01-02" aria-selected="false">
        Python
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-01-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-03" role="tab"
          data-td-tp-persist="ruby" aria-controls="tabs-01-03" aria-selected="false">
        Ruby
      </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">
        <p><code>OTEL_EXPORTER_OTLP_PROTOCOL=grpc</code> підтримує: <code>grpc</code>, <code>http/protobuf</code> та <code>http/json</code> <code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317</code></p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab" tabindex="1">
        <p>Змінна середовища <code>OTEL_EXPORTER_OTLP_PROTOCOL</code> не підтримується. Жорстко закодований експортер використовує протокол <code>http/protobuf</code> <code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318</code></p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-02" role="tabpanel" aria-labelled-by="tabs-01-02-tab" tabindex="1">
        <p><code>OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf</code> підтримує: <code>http/protobuf</code> та <code>http/json</code> <code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318</code></p>

    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-01-03" role="tabpanel" aria-labelled-by="tabs-01-03-tab" tabindex="1">
        <p><code>OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf</code> підтримує: <code>http/protobuf</code> <code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318</code></p>

    </div>
</div>


## Опублікуйте вашу Lambda {#publish-your-lambda}

Опублікуйте нову версію вашої Lambda, щоб розгорнути нові зміни та інструменталізацію.
