No mundo de observabilidade moderna, não basta apenas rodar funções serverless, é essencial entender o que acontece dentro delas. Com o AWS Lambda e o OpenTelemetry também conseguimos instrumentar aplicações e exportar logs, métricas e traces diretamente para ferramentas como Grafana Loki, Tempo e Mimir.

A boa notícia: a AWS já fornece uma camada pronta, chamada ADOT Lambda Layer , que simplifica a instrumentação.

**A justificativa para atingir o objetivo dessa integração é justamente enviar dados para a stack OSS e economizar com cloudwatch. Segredo nosso.**

Lara

Pré-requisitos

Os pré-requisitos para fazer essa integração utilizados foram:

  • Função Lambda rodando em Java 21

  • Acesso ao Console da AWS.

  • Grafana configurado com Loki (logs), Tempo (traces) e Mimir (métricas).

Passo a passo de configuração

  1. Instrumentar sua Função com ADOT Lambda Layer
  2. No Console da AWS, abra sua função Lambda.
  3. Vá em Camadas → Adicionar uma camada → Especificar ARN .
  4. Insira o ARN do ADOT Layer correspondente à sua região (veja documentação oficial).
  5. Configure a variável de ambiente:

AWS_LAMBDA_EXEC_WRAPPER=/opt/manipulador-otel

Isso instrui o runtime a usar o wrapper do OpenTelemetry.

Configurar o Coletor OpenTelemetry (Exemplo com Loki para Logs)

A camada ADOT traz embutido um collector. Por padrão, ele exporta para o AWS X-Ray, mas podemos personalizar para Loki/Tempo/Mimir.

Lara

Crie um arquivo chamado collector.yaml na raiz do projeto:

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  batch:

exporters:
  loki:
    endpoint: "http://<LOKI_ENDPOINT>:3100/loki/api/v1/push"
    # headers:
    #   Authorization: "<TOKEN> básico"
    # labels:
    #   service.name: "lambda-java-app"

service:
  pipelines:
    logs:
      receivers: [ otlp ]
      processors: [ batch ]
      exporters: [ loki ]

Empacotar e apontar o collector

  • Inclua o collector.yaml no pacote da função (ZIP/JAR).

  • Configure mais uma variável de ambiente:

OPENTELEMETRY_COLLECTOR_CONFIG_FILE =/var/task/collector.yaml

Ative exportação de logs

Adicione:

OTEL_LOGS_EXPORTER =otlp

Validar no Grafana

  • Chame sua função Lambda.

  • Os logs devem aparecer no Grafana Loki.

  • Configure exportadores equivalentes no collector.yaml para enviar também traces ao Tempo e métricas ao Mimir.

Lara

Pontos de atenção

Autenticação: se seu Loki exigir credenciais, configure no bloco headers.

Labels: aproveite para enriquecer logs com service.name, job, etc.

Deu certo? Me conta!