Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Use Jaeger to report trace data from a Python application

Última atualização: Jul 05, 2026

Instrumente um aplicativo Python com o cliente Jaeger para relatar dados de rastreamento ao Managed Service for OpenTelemetry. Após a conexão, o console do ARMS exibe a topologia do aplicativo, traces, transações anômalas e lentas, além da análise de SQL.

Importante

Para recursos avançados e capacidades de rastreamento, recomendamos conectar seu aplicativo ao Managed Service for OpenTelemetry usando o protocolo OpenTelemetry.

Nossos guias detalhados de integração do OpenTelemetry e melhores práticas ajudam você a começar a usar o Managed Service for OpenTelemetry. Para mais informações, consulte Conectar um aplicativo.

Como funciona

O Jaeger suporta duas arquiteturas de relatório de dados:

  • Sem o agente Jaeger: O cliente Jaeger envia dados de rastreamento diretamente para o backend do Managed Service for OpenTelemetry.

image

  • Com o agente Jaeger: O cliente Jaeger envia dados de rastreamento para um agente Jaeger em execução local, que os encaminha ao backend via gRPC.

image

Restrições

  • O cliente Jaeger para Python (v1.25) só consegue relatar dados de rastreamento por meio do agente Jaeger, não via HTTP. Consulte Client Library Features.

  • A comunicação entre o cliente e o agente ocorre via UDP, protocolo que não garante a entrega. Para minimizar a perda de dados, execute ambos no mesmo host.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Docker 20.10.7 instalado

  • Python 3.8.5 instalado

  • O endpoint e o token de autenticação obtidos na página Cluster Configurations no console do Managed Service for OpenTelemetry

Etapa 1: Iniciar o agente Jaeger

  1. Baixe a imagem do agente Jaeger:

       docker pull jaegertracing/jaeger-agent:1.25
  2. Inicie o contêiner do agente Jaeger. Substitua os placeholders abaixo pelos valores da página Cluster Configurations:

    Placeholder

    Descrição

    <endpoint>

    Endpoint gRPC do Managed Service for OpenTelemetry

    <auth>

    Token de autenticação

       docker run -d --name jaeger-agent \
         -p 5775:5775/udp \
         -p 6831:6831/udp \
         -p 6832:6832/udp \
         -p 5778:5778/tcp \
         jaegertracing/jaeger-agent:1.25 \
         --reporter.type=grpc \
         --reporter.grpc.host-port=<endpoint> \
         --agent.tags=<auth>
  3. Verifique se o agente está em execução. O status Up confirma que o agente foi iniciado. Caso o contêiner não esteja em execução, verifique os logs:

       docker ps --filter name=jaeger-agent
       docker logs jaeger-agent

Etapa 2: Instrumentar o aplicativo Python

  1. Instale os pacotes necessários. Salve o conteúdo abaixo em um arquivo requirements.txt e, em seguida, instale os pacotes:

       certifi==2021.5.30
       charset-normalizer==2.0.4
       idna==3.2
       jaeger-client==4.6.0
       opentracing==2.4.0
       requests==2.26.0
       six==1.16.0
       threadloop==1.0.2
       thrift==0.13.0
       tornado==6.1
       urllib3==1.26.6
       pip install -r requirements.txt
  2. Crie um arquivo Python (por exemplo, tracing_demo.py) com o código a seguir. Principais parâmetros de configuração:

    Parâmetro

    Valor

    Descrição

    sampler.type

    const

    Amostra todos os traces. Em produção, utilize probabilistic com um valor menor para param.

    sampler.param

    1

    Com o tipo const, o valor 1 indica amostragem total; já 0 desativa a amostragem.

    reporting_host

    127.0.0.1

    Endereço do agente Jaeger. Mantenha como 127.0.0.1 quando executar no mesmo host.

    reporting_port

    6831

    Porta UDP na qual o agente Jaeger escuta spans.

    service_name

    mytest3

    Nome que identifica seu aplicativo no console do ARMS.

       import logging
       import time
       from jaeger_client import Config
    
       def construct_span(tracer):
           with tracer.start_span('AliyunTestSpan') as span:
               span.log_kv({'event': 'test message', 'life': 42})
               print("tracer.tags: ", tracer.tags)
               with tracer.start_span('AliyunTestChildSpan', child_of=span) as child_span:
                   span.log_kv({'event': 'down below'})
               return span
    
       if __name__ == "__main__":
           log_level = logging.DEBUG
           logging.getLogger('').handlers = []
           logging.basicConfig(format='%(asctime)s %(message)s', level=log_level)
    
           config = Config(
               config={
                   'sampler': {
                       'type': 'const',  # Sample every trace. Use 'probabilistic' in production.
                       'param': 1,
                   },
                   'local_agent': {
                       # The Jaeger agent address. Keep this as 127.0.0.1 when the agent
                       # runs on the same host, which is recommended for UDP reliability.
                       'reporting_host': '127.0.0.1',
                       'reporting_port': 6831,
                   },
                   'logging': True,
               },
               service_name="mytest3",  # Replace with your application name.
               validate=True
           )
    
           # Initialize the tracer. This also sets opentracing.tracer.
           tracer = config.initialize_tracer()
    
           span = construct_span(tracer)
    
           # Allow the IOLoop to flush buffered spans before closing.
           # See: https://github.com/jaegertracing/jaeger-client-python/issues/50
           time.sleep(2)
           tracer.close()
  3. Execute o arquivo. Se a inicialização for bem-sucedida, a saída de depuração mostrará a configuração do tracer e confirmará que os spans estão sendo relatados ao agente Jaeger.

       python tracing_demo.py

Verificar dados de rastreamento no console

  1. Faça login no console do ARMS. No painel de navegação à esquerda, escolha Application Monitoring > Applications.

  2. Na página Applications, selecione uma região na barra de navegação superior e clique em nome do seu aplicativo.

    Nota

    Se o ícone image aparecer na coluna Language, o aplicativo utiliza o Application Monitoring. Um hífen (-) indica o uso do Managed Service for OpenTelemetry.

  3. Na seção Application Overview, visualize as principais métricas de desempenho e a topologia.

    Application overview

  4. No painel de navegação à esquerda, clique em Application Details. A aba Overview apresenta o resumo do aplicativo.

    Application details overview

  5. Clique em aba Traces para visualizar os dados de rastreamento relatados pelo seu aplicativo.

    Application details traces

Solucionar problemas de dados de rastreamento ausentes

Caso os dados de rastreamento não apareçam no console após a execução do aplicativo, verifique os itens a seguir:

Problema

Ação

Agente Jaeger parado

Execute docker ps --filter name=jaeger-agent e confirme se o status é Up. Analise os logs do agente com docker logs jaeger-agent.

Endpoint ou token incorretos

Valide se os valores de <endpoint> e <auth> correspondem aos da página Cluster Configurations. Reinicie o agente após as correções.

Agente e cliente em hosts diferentes

O envio de dados via UDP pelo cliente Jaeger não é confiável entre hosts distintos. Execute o agente no mesmo host do aplicativo e configure reporting_host como 127.0.0.1.

Spans não liberados

Garanta que time.sleep(2) seja chamado antes de tracer.close() para permitir que o IOLoop libere os spans armazenados em buffer.

Conectividade de rede

Confirme se o host consegue alcançar o endpoint do Managed Service for OpenTelemetry na porta gRPC configurada.

Operações comuns do Jaeger

Os exemplos a seguir abordam operações frequentes de rastreamento com Jaeger. Para mais detalhes, consulte Getting Started.

Criar um tracer

from jaeger_client import Config

def init_jaeger_tracer(service_name='your-app-name'):
    config = Config(config={}, service_name=service_name)
    return config.initialize_tracer()

Criar e finalizar spans

# Start a root span (no parent).
tracer.start_span('TestSpan')

# Start a child span.
tracer.start_span('ChildSpan', child_of=span)

# Finish the span.
span.finish()

Propagar SpanContext entre serviços

# Inject: serialize the SpanContext into a carrier for downstream services.
tracer.inject(
    span_context=span.context, format=Format.TEXT_MAP, carrier=carrier
)

# Extract: deserialize the SpanContext from an incoming request.
span_ctx = tracer.extract(format=Format.TEXT_MAP, carrier={})