Todos los productos
Search
Centro de documentos

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

Última actualización: Sep 10, 2026

Instrumente una aplicación Python con el cliente de Jaeger para reportar datos de trazas a Managed Service for OpenTelemetry. Una vez establecida la conexión, la consola ARMS muestra la topología de la aplicación, las trazas, las transacciones anómalas y lentas, además del análisis SQL.

Importante

Para aprovechar funciones avanzadas y capacidades de trazado, se recomienda conectar su aplicación a Managed Service for OpenTelemetry mediante el protocolo OpenTelemetry.

Las guías detalladas de integración y las mejores prácticas de OpenTelemetry le ayudarán a comenzar a trabajar con Managed Service for OpenTelemetry. Para obtener más información, consulte Connect an application.

Funcionamiento

Jaeger admite dos arquitecturas para reportar datos:

  • Sin el agente de Jaeger: el cliente de Jaeger envía los datos de trazas directamente al backend de Managed Service for OpenTelemetry.

image

  • Con el agente de Jaeger: el cliente de Jaeger envía los datos de trazas a un agente de Jaeger que se ejecuta localmente. Este agente los reenvía al backend mediante gRPC.

image

Restricciones

  • El cliente de Jaeger para Python (v1.25) solo reporta datos de trazas a través del agente de Jaeger, no por HTTP. Consulte Client Library Features.

  • El cliente se comunica con el agente mediante UDP, un protocolo que no garantiza la entrega. Para minimizar la pérdida de datos, ejecute ambos componentes en el mismo host.

Paso 1: Iniciar el agente de Jaeger

  1. Descargue la imagen del agente de Jaeger:

       docker pull jaegertracing/jaeger-agent:1.25
  2. Inicie el contenedor del agente de Jaeger. Reemplace los siguientes marcadores de posición con los valores de la página Cluster Configurations:

    Marcador de posición

    Descripción

    <endpoint>

    Endpoint gRPC de Managed Service for OpenTelemetry

    <auth>

    Token de autenticación

       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. Compruebe que el agente se está ejecutando. El estado Up confirma que el agente inició correctamente. Si el contenedor no se está ejecutando, revise los registros:

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

Paso 2: Instrumentar la aplicación Python

  1. Instale los paquetes obligatorios. Guarde el siguiente contenido en un archivo requirements.txt y luego instale los paquetes:

       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. Cree un archivo Python (por ejemplo, tracing_demo.py) con el siguiente código. A continuación se describen los parámetros de configuración principales:

    Parámetro

    Valor

    Descripción

    sampler.type

    const

    Muestrea cada traza. En entornos de producción, utilice probabilistic con un valor menor para param.

    sampler.param

    1

    Con el tipo const, el valor 1 indica que se muestrean todas las trazas y 0 que no se muestrea ninguna.

    reporting_host

    127.0.0.1

    Dirección del agente de Jaeger. Utilice 127.0.0.1 cuando todo se ejecute en el mismo host.

    reporting_port

    6831

    Puerto UDP en el que el agente de Jaeger escucha los spans.

    service_name

    mytest3

    Nombre que identifica su aplicación en la consola 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. Ejecute el archivo. Si la inicialización es exitosa, la salida de depuración mostrará la configuración del tracer y confirmará que los spans se están reportando al agente de Jaeger.

       python tracing_demo.py

Comprobar los datos de trazas en la consola

  1. Inicie sesión en ARMS console. En el panel de navegación izquierdo, seleccione Application Monitoring > Applications.

  2. En la página Applications, seleccione una región en la barra de navegación superior y haga clic en el nombre de su aplicación.

    Nota

    Si aparece el icono image en la columna Language, la aplicación utiliza Application Monitoring. Un guion (-) indica que usa Managed Service for OpenTelemetry.

  3. En la sección Application Overview, revise las métricas de rendimiento clave y la topología.

    La pestaña Overview Analysis de la página Application Overview muestra las siguientes métricas principales:

    • Total Requests: cantidad de solicitudes, con los cambios semanales y diarios.

    • Average Response Time: tiempo de respuesta y su tendencia.

    • Exceptions: cantidad de solicitudes anómalas.

    • Span Count: cantidad total de spans en la traza.

    Debajo de estas métricas, las áreas Services Provided y Dependent Services muestran gráficos de líneas de tendencia sobre el volumen de solicitudes y el tiempo medio de respuesta.

  4. En el panel de navegación izquierdo, haga clic en Application Details. La pestaña Overview muestra el resumen de la aplicación.

    En la página Application Details, la pestaña Overview se muestra de forma predeterminada. Esta presenta la topología de la aplicación y tres gráficos de monitoreo: Requests, response time y Exceptions. La lista de servicios del lado izquierdo indica el tiempo de respuesta, la cantidad de solicitudes y la cantidad de excepciones de cada interfaz.

  5. Haga clic en la pestaña Traces para consultar los datos de trazas reportados desde su aplicación.

Solución de problemas por datos de trazas faltantes

Si los datos de trazas no aparecen en la consola después de ejecutar su aplicación, compruebe lo siguiente:

Problema

Acción

El agente de Jaeger no se está ejecutando

Ejecute docker ps --filter name=jaeger-agent y compruebe que el estado sea Up. Revise los registros del agente con docker logs jaeger-agent.

Endpoint o token incorrectos

Compruebe que los valores de <endpoint> y <auth> coincidan con los de la página Cluster Configurations. Reinicie el agente después de corregirlos.

El agente y el cliente están en hosts distintos

El cliente de Jaeger envía datos mediante UDP, un protocolo poco confiable entre hosts diferentes. Ejecute el agente en el mismo host que la aplicación y establezca reporting_host como 127.0.0.1.

Los spans no se vacían

Asegúrese de llamar a time.sleep(2) antes de tracer.close() para permitir que IOLoop vacíe los spans almacenados en búfer.

Problemas de conectividad de red

Compruebe que el host pueda comunicarse con el endpoint de Managed Service for OpenTelemetry en el puerto gRPC configurado.

Operaciones comunes de Jaeger

Los siguientes ejemplos abarcan operaciones habituales de trazado con Jaeger. Para obtener más detalles, consulte Getting Started.

Crear un 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()

Crear y 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 servicios

# 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={})