Instrumentação Python em Containers

Instrumentação de Aplicativos Python em Containers com o Agent OpenTelemetry

Esta documentação explica como instrumentar aplicativos Python em contêiner usando o modelo zero-code, com o agente oficial do OpenTelemetry, adaptado para uso com o Elven Observability. A ideia é garantir coleta de traces (e opcionalmente métricas) sem alterações no código, apenas com ajustes no Dockerfile e nas variáveis de ambiente.

Instalação do Agent no Dockerfile

Adicione no Dockerfile apenas os pacotes necessários de acordo com o seu framework. Veja abaixo os pacotes comuns e os específicos por framework:

Pacotes comuns (sempre instale):

RUN pip install \
    opentelemetry-distro \
    opentelemetry-exporter-otlp \
    opentelemetry-instrumentation-requests

FastAPI:

RUN pip install opentelemetry-instrumentation-fastapi

Flask:

RUN pip install opentelemetry-instrumentation-flask

Django:

RUN pip install opentelemetry-instrumentation-django

Importante: Não instale instrumentações desnecessárias. Ex: apps com Django não precisam de opentelemetry-instrumentation-fastapi.

Dockerfile de exemplo:

Configuração das Variáveis de Ambiente

Defina as seguintes variáveis para ativar a instrumentação automática e enviar dados para o collector do Elven:

Explicação:

  • OTEL_SERVICE_NAME: nome do serviço exibido no Grafana/Tempo.

  • OTEL_RESOURCE_ATTRIBUTES: tags extras para enriquecer os traces.

  • OTEL_EXPORTER_OTLP_*: endpoints para envio dos dados.

Como iniciar o app com o agente (CMD)

Use o comando opentelemetry-instrument como wrapper da aplicação. Veja abaixo exemplos por framework:

FastAPI (com Uvicorn)

Flask

Django

Informação: Pode adaptar o comando conforme o seu entrypoint: gunicorn, uvicorn, waitress, etc.

Exemplos por Ambiente

Docker Compose

Kubernetes

ECS (Fargate ou EC2)

Troubleshooting

  • Traces não aparecem: verifique se o endpoint está acessível e se o CMD usa opentelemetry-instrument corretamente.

  • Timeout na aplicação: verifique se o collector está online e respondendo na porta 4318.

  • Instrumentação duplicada: evite misturar instrumentação manual com o modo automático.

  • Erro de dependência: cada framework precisa de sua instrumentação específica, revise o pip install.

Boas práticas

  • Dê nomes significativos aos serviços (OTEL_SERVICE_NAME=projeto-env-modulo).

  • Separe ambientes (environment=dev, staging, production).

  • Não exponha credenciais nas variáveis de ambiente.

  • Não use OTEL_LOG_LEVEL=debug em produção.

  • Teste localmente com otel-cli ou curl para validar o collector.

Exemplo de .env

Seu app Python agora está instrumentado com o Elven Observability, usando auto-instrumentação baseada em OpenTelemetry. Sem dor de cabeça, sem alterar o código-fonte.

Last updated

Was this helpful?