ULC Lab · implementação reproduzível
Laboratório: Observabilidade distribuída com OpenTelemetry, Jaeger e aplicação Python
Você terá uma aplicação Python instrumentada com OpenTelemetry exportando traces para o Jaeger, visualizáveis via interface web. O laboratório leva cerca de 2 horas.

- Duração estimada
- 120 min
- Passos
- 10
- Validações
- 4
- Versões da documentação consultada
- OpenTelemetry Collector a versão estável atual · Jaeger a versão estável atual · Python 3.8 ou superior · OpenTelemetry Python SDK a versão estável atual
Este laboratório ensina como instrumentar uma aplicação Python com OpenTelemetry, configurar o OpenTelemetry Collector para receber e encaminhar traces, e visualizar esses dados no Jaeger. O foco é entender o fluxo ponta a ponta dos dados de observabilidade em ambientes distribuídos, usando apenas software livre.
Topologia
Uma aplicação Python roda em 10.0.0.2, instrumentada com OpenTelemetry SDK. Ela envia traces para o OpenTelemetry Collector em 10.0.0.3:4317 (OTLP/gRPC). O Collector exporta para o Jaeger em 10.0.0.4:14250. O Jaeger armazena e exibe traces via interface web em 10.0.0.4:16686.
[App Python]
|
| OTLP/gRPC (4317)
v
[OTel Collector]
|
| Jaeger gRPC (14250)
v
[Jaeger]
|
| Web (16686)
v
[Usuário]
Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM ou computador para aplicação Python | 1 vCPU, 512MB RAM, porta 4317 liberada |
| VM ou computador para OpenTelemetry Collector | 1 vCPU, 512MB RAM, porta 4317 e 14250 liberadas |
| VM ou computador para Jaeger | 1 vCPU, 1GB RAM, portas 14250 e 16686 liberadas |
| OpenTelemetry Collector | Apache 2.0 · a versão estável atual |
| Jaeger | Apache 2.0 · a versão estável atual |
| Python | PSF License · 3.8 ou superior |
| OpenTelemetry Python SDK | Apache 2.0 · a versão estável atual |
Roteiro
- Preparar ambiente da aplicação Python
Crie uma VM ou use um computador com Python 3.8+ instalado. Instale pip se necessário.
sudo apt update && sudo apt install python3 python3-pip -yO que você deve ver: Python e pip instalados sem erros
- Instalar OpenTelemetry SDK e instrumentação para Flask
Instale os pacotes necessários para instrumentar uma aplicação Flask.
pip3 install flask opentelemetry-api opentelemetry-sdk opentelemetry-instrumentation-flask opentelemetry-exporter-otlpO que você deve ver: Pacotes instalados sem erros
- Criar aplicação Flask instrumentada
Crie um arquivo app.py com um endpoint simples e instrumentação OpenTelemetry.
cat <<EOF > app.py from flask import Flask from opentelemetry.instrumentation.flask import FlaskInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter from opentelemetry import trace app = Flask(__name__) FlaskInstrumentor().instrument_app(app) trace.set_tracer_provider(TracerProvider()) otlp_exporter = OTLPSpanExporter(endpoint="10.0.0.3:4317", insecure=True) span_processor = BatchSpanProcessor(otlp_exporter) trace.get_tracer_provider().add_span_processor(span_processor) @app.route("/") def hello(): return "Hello, OpenTelemetry!" if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) EOFO que você deve ver: Arquivo app.py criado
- Executar aplicação Flask
Inicie a aplicação para que ela comece a gerar traces.
python3 app.pyO que você deve ver: Aplicação rodando em 0.0.0.0:5000
- Preparar ambiente do OpenTelemetry Collector
Em outra VM ou computador, baixe e descompacte o OpenTelemetry Collector.
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/latest/download/otelcol_linux_amd64.tar.gz mkdir otelcol && tar -xzf otelcol_linux_amd64.tar.gz -C otelcolO que você deve ver: Binário do Collector disponível em ./otelcol
- Criar configuração do Collector
Crie um arquivo de configuração YAML para receber OTLP/gRPC e exportar para Jaeger.
cat <<EOF > otelcol/config.yaml receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 exporters: jaeger: endpoint: 10.0.0.4:14250 tls: insecure: true service: pipelines: traces: receivers: [otlp] exporters: [jaeger] EOFO que você deve ver: Arquivo de configuração criado
- Executar o OpenTelemetry Collector
Inicie o Collector apontando para a configuração criada.
./otelcol/otelcol --config otelcol/config.yamlO que você deve ver: Collector inicializado sem erros
- Preparar ambiente do Jaeger
Em outra VM ou computador, baixe e execute o Jaeger All-in-One.
docker run -d --name jaeger \ -e COLLECTOR_GRPC_PORT=14250 \ -p 16686:16686 -p 14250:14250 \ jaegertracing/all-in-one:latestO que você deve ver: Container do Jaeger rodando, portas 14250 e 16686 abertas
- Gerar tráfego na aplicação
Acesse o endpoint da aplicação algumas vezes para gerar traces.
curl http://10.0.0.2:5000/O que você deve ver: Resposta 'Hello, OpenTelemetry!'
- Acessar interface web do Jaeger
Abra o navegador e acesse http://10.0.0.4:16686. Procure pelo serviço Flask.
O que você deve ver: Interface do Jaeger acessível, traces do serviço Flask disponíveis
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar se a aplicação Flask está rodando | curl http://10.0.0.2:5000/ | Resposta 'Hello, OpenTelemetry!' |
| Verificar logs do Collector | consulte a documentação para logs detalhados | Mensagens indicando recebimento e exportação de traces |
| Verificar interface do Jaeger | Acesse http://10.0.0.4:16686 | Traces do serviço Flask visíveis |
| Verificar comunicação entre Collector e Jaeger | netstat -tulnp | grep 14250 | Porta 14250 aberta e em uso |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| A interface do Jaeger não exibe traces | Collector não está exportando corretamente para o Jaeger | Verifique endpoint e portas no config.yaml do Collector |
| Collector não inicia | Erro de sintaxe no arquivo de configuração | Revise o config.yaml e corrija erros de indentação |
| Aplicação Flask não envia traces | Endpoint do Collector incorreto ou Collector não acessível | Confirme IP e porta do Collector na configuração do OTLPSpanExporter |
| Jaeger não inicia ou portas não abrem | Portas 14250 ou 16686 ocupadas ou bloqueadas | Libere as portas e reinicie o container Jaeger |
Segurança e hardening
- Não exponha as portas 4317, 14250 e 16686 para a internet sem autenticação
- Use firewalls para restringir acesso entre as VMs
- Em produção, configure autenticação e TLS conforme a documentação
Checklist final
Referências
- OpenTelemetry Collector Getting Started · OpenTelemetry (CNCF) (opentelemetry.io)
- OpenTelemetry Python Instrumentation · OpenTelemetry (CNCF) (opentelemetry.io)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 2 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
