# Auto-instrumentação do Lambda

> Instrumente automaticamente suas funções Lambda com o OpenTelemetry

---

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

---

A comunidade OpenTelemetry oferece camadas Lambda de instrumentação
independentes para as seguintes linguagens:

- Java
- JavaScript
- Python
- Ruby

Elas podem ser adicionadas ao seu Lambda usando o portal da AWS para
instrumentar automaticamente sua aplicação. Essas camadas não incluem o
Collector, que é uma adição obrigatória, a menos que você configure uma
instância externa do Collector para enviar seus dados.

## Adicione o ARN da camada Lambda do Collector OTel {#add-the-arn-of-the-otel-collector-lambda-layer}

Consulte as
[orientações sobre a camada Lambda do Collector](../lambda-collector/) para
adicionar a camada à sua aplicação e configurar o Collector. Recomendamos
adicionar isso primeiro.

## Requisitos de linguagem {#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>A camada Lambda oferece suporte aos <em>runtimes</em> Lambda Java 8, 11 e 17
(Corretto). Para mais informações sobre as versões Java suportadas, consulte a
<a href="/pt/docs/languages/java/">documentação do OpenTelemetry Java</a>.</p>
<p><strong>Observação:</strong> o agente de auto-instrumentação Java está incluído na camada
Lambda. A instrumentação automática tem um impacto considerável no tempo de
inicialização no AWS Lambda, e geralmente é necessário combiná-la com
concorrência provisionada e requisições de aquecimento para atender requisições
de produção sem causar timeouts durante a inicialização.</p>
<p>Por padrão, o agente OTel Java presente na camada tentará auto-instrumentar todo
o código da sua aplicação. Isso pode ter um impacto negativo no tempo de
inicialização a frio (<em>cold start</em>) do Lambda.</p>
<p>Recomendamos habilitar a auto-instrumentação apenas para as
bibliotecas/<em>frameworks</em> realmente usados pela sua aplicação.</p>
<p>Para habilitar apenas instrumentações específicas, é possível usar as seguintes
variáveis de ambiente:</p>
<ul>
<li>
<p><code>OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED</code>: quando definida como <code>false</code>,
desabilita a auto-instrumentação na camada, exigindo que cada instrumentação
seja habilitada individualmente.</p>
</li>
<li>
<p><code>OTEL_INSTRUMENTATION_&lt;NAME&gt;_ENABLED</code>: defina como <code>true</code> para habilitar a
auto-instrumentação de uma biblioteca ou framework específico. Substitua
<code>&lt;NAME&gt;</code> pela instrumentação que deseja habilitar. Para a lista de
instrumentações disponíveis, consulte <a href="/pt/docs/zero-code/java/agent/disable/#suppressing-specific-agent-instrumentation">Suprimindo instrumentação específica do
agente</a>.</p>
</li>
</ul>
<p>Por exemplo, para habilitar a auto-instrumentação apenas para o Lambda e o SDK
da AWS, defina as seguintes variáveis de ambiente:</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>A camada Lambda oferece suporte aos runtimes Lambda Node.js v18+. Para mais
informações sobre as versões JavaScript e Node.js suportadas, consulte a
<a href="https://github.com/open-telemetry/opentelemetry-js" target="_blank" rel="noopener" class="external-link">documentação do 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>A camada Lambda oferece suporte aos runtimes Lambda Python 3.9+. Para mais
informações sobre as versões Python suportadas, consulte a
<a href="https://github.com/open-telemetry/opentelemetry-python/blob/main/README.md#python-version-support" target="_blank" rel="noopener" class="external-link">documentação do OpenTelemetry Python</a>
e o pacote no <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>A camada Lambda oferece suporte aos runtimes Lambda Ruby 3.2 e 3.3. Para mais
informações sobre as versões do SDK e da API OpenTelemetry Ruby suportadas,
consulte a
<a href="https://github.com/open-telemetry/opentelemetry-ruby/blob/main/README.md#compatibility" target="_blank" rel="noopener" class="external-link">documentação do OpenTelemetry Ruby</a>
e o pacote no <a href="https://rubygems.org/search?query=opentelemetry" target="_blank" rel="noopener" class="external-link">RubyGem</a>.</p>

    </div>
</div>


## Configure o `AWS_LAMBDA_EXEC_WRAPPER` {#configure-aws_lambda_exec_wrapper}

Altere o ponto de entrada da sua aplicação definindo
`AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler` para Node.js, Java, Ruby ou Python.
Esse script wrapper invoca sua aplicação Lambda já com a instrumentação
automática aplicada.

## Adicione o ARN da camada Lambda de instrumentação {#add-the-arn-of-instrumentation-lambda-layer}

Para habilitar a auto-instrumentação OTel na sua função Lambda, é necessário
adicionar e configurar as camadas de instrumentação e do Collector, e então
habilitar os rastros.

1. Abra a função Lambda que deseja instrumentar no console da AWS.
2. Na seção "Layers" do "Designer", escolha "Add a layer".
3. Em "specify an ARN", cole o ARN da camada e escolha "Add".

Encontre o
[lançamento mais recente da camada de instrumentação](https://github.com/open-telemetry/opentelemetry-lambda/releases)
para sua linguagem e use o respectivo ARN após substituir a tag `<region>` pela
região onde seu Lambda está localizado.

Observação: as camadas Lambda são um recurso regionalizado, ou seja, só podem
ser usadas na região em que foram publicadas. Certifique-se de usar a camada na
mesma região das suas funções Lambda. A comunidade publica camadas em todas as
regiões disponíveis.

## Configure os exportadores do seu SDK {#configure-your-sdk-exporters}

Os exportadores padrão usados pelas camadas Lambda funcionam sem qualquer
alteração quando há um Collector embutido com receptores gRPC/HTTP. As variáveis
de ambiente não precisam ser atualizadas. No entanto, há diferentes níveis de
suporte a protocolos e valores padrão por linguagem, documentados abaixo.

     <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> oferece suporte a: <code>grpc</code>, <code>http/protobuf</code> e
<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>A variável de ambiente <code>OTEL_EXPORTER_OTLP_PROTOCOL</code> não é suportada. O
exportador fixo usa o protocolo <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> oferece suporte a: <code>http/protobuf</code> e
<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> oferece suporte a: <code>http/protobuf</code>
<code>OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318</code></p>

    </div>
</div>


## Publique seu Lambda {#publish-your-lambda}

Publique uma nova versão do seu Lambda para implantar as alterações e a
instrumentação.
