Entrar ou criar conta

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.

Integração OpenTelemetry em aplicações distribuídas
Ligado ao treinamento Integração OpenTelemetry em aplicações distribuídas
ULC-LAB-OBSE-0003 · Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
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
Objetivo

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

ItemRequisito, licença ou versão
VM ou computador para aplicação Python1 vCPU, 512MB RAM, porta 4317 liberada
VM ou computador para OpenTelemetry Collector1 vCPU, 512MB RAM, porta 4317 e 14250 liberadas
VM ou computador para Jaeger1 vCPU, 1GB RAM, portas 14250 e 16686 liberadas
OpenTelemetry CollectorApache 2.0 · a versão estável atual
JaegerApache 2.0 · a versão estável atual
PythonPSF License · 3.8 ou superior
OpenTelemetry Python SDKApache 2.0 · a versão estável atual

Roteiro

  1. 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 -y

    O que você deve ver: Python e pip instalados sem erros

  2. 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-otlp

    O que você deve ver: Pacotes instalados sem erros

  3. 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)
    EOF

    O que você deve ver: Arquivo app.py criado

  4. Executar aplicação Flask

    Inicie a aplicação para que ela comece a gerar traces.

    python3 app.py

    O que você deve ver: Aplicação rodando em 0.0.0.0:5000

  5. 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 otelcol

    O que você deve ver: Binário do Collector disponível em ./otelcol

  6. 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]
    EOF

    O que você deve ver: Arquivo de configuração criado

  7. Executar o OpenTelemetry Collector

    Inicie o Collector apontando para a configuração criada.

    ./otelcol/otelcol --config otelcol/config.yaml

    O que você deve ver: Collector inicializado sem erros

  8. 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:latest

    O que você deve ver: Container do Jaeger rodando, portas 14250 e 16686 abertas

  9. 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!'

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

TesteComandoCritério
Verificar se a aplicação Flask está rodandocurl http://10.0.0.2:5000/Resposta 'Hello, OpenTelemetry!'
Verificar logs do Collectorconsulte a documentação para logs detalhadosMensagens indicando recebimento e exportação de traces
Verificar interface do JaegerAcesse http://10.0.0.4:16686Traces do serviço Flask visíveis
Verificar comunicação entre Collector e Jaegernetstat -tulnp | grep 14250Porta 14250 aberta e em uso

Troubleshooting

SintomaCausa provávelCorreção
A interface do Jaeger não exibe tracesCollector não está exportando corretamente para o JaegerVerifique endpoint e portas no config.yaml do Collector
Collector não iniciaErro de sintaxe no arquivo de configuraçãoRevise o config.yaml e corrija erros de indentação
Aplicação Flask não envia tracesEndpoint do Collector incorreto ou Collector não acessívelConfirme IP e porta do Collector na configuração do OTLPSpanExporter
Jaeger não inicia ou portas não abremPortas 14250 ou 16686 ocupadas ou bloqueadasLibere 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

  1. OpenTelemetry Collector Getting Started · OpenTelemetry (CNCF) (opentelemetry.io)
  2. OpenTelemetry Python Instrumentation · OpenTelemetry (CNCF) (opentelemetry.io)
Verificação editorial
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
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.