Auto-instrumentação do Lambda

Instrumente automaticamente suas funções Lambda com o OpenTelemetry

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

Consulte as orientações sobre a camada Lambda do Collector para adicionar a camada à sua aplicação e configurar o Collector. Recomendamos adicionar isso primeiro.

Requisitos de linguagem

A camada Lambda oferece suporte aos runtimes Lambda Java 8, 11 e 17 (Corretto). Para mais informações sobre as versões Java suportadas, consulte a documentação do OpenTelemetry Java.

Observação: 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.

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 (cold start) do Lambda.

Recomendamos habilitar a auto-instrumentação apenas para as bibliotecas/frameworks realmente usados pela sua aplicação.

Para habilitar apenas instrumentações específicas, é possível usar as seguintes variáveis de ambiente:

  • OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED: quando definida como false, desabilita a auto-instrumentação na camada, exigindo que cada instrumentação seja habilitada individualmente.

  • OTEL_INSTRUMENTATION_<NAME>_ENABLED: defina como true para habilitar a auto-instrumentação de uma biblioteca ou framework específico. Substitua <NAME> pela instrumentação que deseja habilitar. Para a lista de instrumentações disponíveis, consulte Suprimindo instrumentação específica do agente.

Por exemplo, para habilitar a auto-instrumentação apenas para o Lambda e o SDK da AWS, defina as seguintes variáveis de ambiente:

OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=false
OTEL_INSTRUMENTATION_AWS_LAMBDA_ENABLED=true
OTEL_INSTRUMENTATION_AWS_SDK_ENABLED=true

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 documentação do OpenTelemetry JavaScript.

A camada Lambda oferece suporte aos runtimes Lambda Python 3.9+. Para mais informações sobre as versões Python suportadas, consulte a documentação do OpenTelemetry Python e o pacote no PyPi.

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 documentação do OpenTelemetry Ruby e o pacote no RubyGem.

Configure o 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

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 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

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.

OTEL_EXPORTER_OTLP_PROTOCOL=grpc oferece suporte a: grpc, http/protobuf e http/json OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

A variável de ambiente OTEL_EXPORTER_OTLP_PROTOCOL não é suportada. O exportador fixo usa o protocolo http/protobuf OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318

OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf oferece suporte a: http/protobuf e http/json OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318

OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf oferece suporte a: http/protobuf OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318

Publique seu Lambda

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