Entrar ou criar conta

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 de observabilidade em aplicações distribuídas com OpenTelemetry
Ligado ao treinamento Integração de observabilidade em aplicações distribuídas com OpenTelemetry

Roteiro para estudo em ambiente de laboratório ou de teste. Execute apenas em equipamentos, redes e contas que você tenha autorização para usar, com backup e homologação próprios. Comandos podem causar indisponibilidade ou perda de dados. Software e marcas citados pertencem aos seus titulares. Termos de Uso.

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.