Todos los productos
Search
Centro de documentos

Application Real-Time Monitoring Service:Reporte de datos de aplicaciones Go con Jaeger

Última actualización: Oct 12, 2026

Puede instrumentar su aplicación Go con Jaeger y reportar las trazas a Managed Service for OpenTelemetry. Una vez que se reportan las trazas, Managed Service for OpenTelemetry comienza a monitorear la aplicación. Es posible consultar diversos datos de monitoreo, como la topología de la aplicación, las pilas de llamadas, las transacciones anómalas, las transacciones lentas y el análisis de SQL. Este tema describe cómo usar el SDK de Jaeger y Jaeger Agent para instrumentar y reportar los datos de una aplicación Go.

Importante
  • Para obtener funciones más completas, capacidades avanzadas de rastreo y una mejor experiencia, conecte su aplicación a Managed Service for OpenTelemetry mediante el protocolo OpenTelemetry. Para más información, consulte Preparations.

  • ARMS proporciona un agente desarrollado internamente y con soporte comercial para aplicaciones Go. Este agente permite una instrumentación no intrusiva y ofrece un conjunto de funciones más amplio y mayor estabilidad. Para más información, consulte Monitor Go applications.

Requisitos previos

Obtener un endpoint

  1. Inicie sesión en la consola de ARMS. En el panel de navegación izquierdo, haga clic en Integration Center.

  2. En la página Integration Center, haga clic en la tarjeta Jaeger de la sección Server-side Applications.

  3. En el panel Jaeger, haga clic en la pestaña Start Integration y seleccione la región donde desea reportar los datos.

    Nota

    Cuando accede a una región por primera vez, los recursos se inicializan automáticamente en ella.

  4. Configure los parámetros Connection Type y Export Protocol, y copie un endpoint.

    • Connection Type: si su servicio está desplegado en Alibaba Cloud y reside en la región que seleccionó, se recomienda establecer este parámetro en Alibaba Cloud VPC Network. De lo contrario, establézcalo en Public Network.

    • Export Protocol: establezca este parámetro en HTTP (recomendado) o gRPC, según el protocolo compatible con el cliente.

    image.png

Contexto

¿Cómo se reportan los datos?

  • A continuación se muestra cómo reportar datos sin usar el agente de Jaeger.

    image
  • A continuación se muestra cómo reportar datos mediante el agente de Jaeger.

    image

Método 1: reporte de datos con el SDK de Jaeger

Esta sección toma como ejemplo la herramienta de gestión de dependencias Go Modules. Puede usar el SDK de Jaeger para instrumentar y reportar datos directamente al lado del servidor de Managed Service for OpenTelemetry. Si utiliza otras herramientas de gestión de dependencias, ejecute las operaciones correspondientes.

  1. Importe jaeger-client-go.

    go get github.com/uber/jaeger-client-go
  2. Cree un objeto Tracer.

    Nota

    Reemplace <endpoint> con el endpoint correspondiente a su cliente y región. Puede obtener el endpoint desde la página Endpoint Information en la consola de Managed Service for OpenTelemetry. Para más información sobre cómo obtener el endpoint, consulte la sección de requisitos previos de este tema.

    func NewJaegerTracer(service string) (opentracing.Tracer, io.Closer) {
    
        sender := transport.NewHTTPTransport(
           // Set the gateway. The gateway varies based on the region.
            "<endpoint>",
        )
       tracer, closer:= jaeger.NewTracer(service,
               jaeger.NewConstSampler(true),
               jaeger.NewRemoteReporter(sender))
       return tracer, closer
    }
  3. Cree un objeto de instancia de span y habilite el paso directo de datos.

    • Si no existe ningún parentSpan:

      // Create a span.
      span := tracer.StartSpan("myspan")
      // Set a tag.
      clientSpan.SetTag("mytag", "123")
      // Pass through the trace ID.
      tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header))
      ...
      defer  span.Finish()
    • Si existe un parentSpan:

      // Parse spanCtx from the HTTP/RPC object.
      spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header))
      span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx))
      ...
      defer  span.Finish()

    Para más información sobre cómo usar el SDK, consulte Go Doc.

Método 2: reporte de datos con Jaeger Agent

  1. Inicie Jaeger Agent. Para más información, consulte Install Jaeger Agent.

  2. Importe jaeger-client-go.

    go get github.com/uber/jaeger-client-go
  3. Cree un objeto Tracer.

    func NewJaegerTracer(serviceName string) (opentracing.Tracer, io.Closer) {
       sender, _ := jaeger.NewUDPTransport("",0)
       tracer, closer:= jaeger.NewTracer(serviceName,
            jaeger.NewConstSampler(true),
            jaeger.NewRemoteReporter(sender))
        return tracer, closer
    }
  4. Cree un objeto de instancia de span y habilite el paso directo de datos.

    • Si no existe ningún parentSpan:

      // Create a span.
      span := tracer.StartSpan("myspan")
      // Set a tag.
      clientSpan.SetTag("mytag", "123")
      // Pass through the trace ID.
      tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header))
      ...
      defer  span.Finish()
    • Si existe un parentSpan:

      // Parse spanCtx from the HTTP/RPC object.
      spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header))
      span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx))
      ...
      defer  span.Finish()

    Para más información sobre cómo usar el SDK, consulte Go Doc.

Ejemplos

Reporte directo de datos con el SDK de Jaeger

  1. Obtenga el endpoint. Para más información, consulte la sección de requisitos previos de este tema.

  2. Ejecute el siguiente comando para descargar el archivo de ejemplo.

    wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
  3. Abra el archivo examples/settings.go en la carpeta de ejemplo y configure los parámetros tal como indican los comentarios del bloque de código: establezca TracingAnalysisEndpoint con el endpoint que obtuvo en Step 1.

    package examples
    
    // Required for SDK reporting: set the Tracing Analysis gateway (the value varies by region; obtain it from the configuration view at http://trace.console.alibabacloud.com/)
    const TracingAnalysisEndpoint = "http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxxxx_xxxxx/api/traces"
    
    // Agent reporting: true (requires a locally started jaeger-agent)  SDK reporting: false (default)
    const AgentSwitch = false
    
    // Application names in the Tracing Analysis console
    const (
    	CliTracerServiceName = "cliDemo"
    
    	GrpcServerName = "grpcServer"
    
    	GrpcClientName = "grpcClient"
    
    	HttpServerName = "httpServer"
    
    	HttpClientName = "httpClient"
    )
  4. Ejecute el comando go mod tidy para gestionar las dependencias.

  5. Ejecute el comando go run tracingdemo para ejecutar el ejemplo.

Reporte de datos con Jaeger Agent

  1. Obtenga el endpoint. Para más información, consulte la sección de requisitos previos de este tema.

  2. Ejecute el siguiente comando para descargar el archivo de ejemplo.

    wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
  3. Inicie Jaeger Agent. Para más información, consulte Install Jaeger Agent.

  4. Abra el archivo examples/settings.go en la carpeta de ejemplo, configure los parámetros tal como indican los comentarios del bloque de código y cambie el valor de AgentSwitch a true.

    package examples
    
    // Required for SDK reporting: set the Tracing Analysis gateway (the value varies by region; obtain it from the configuration view at http://trace.console.alibabacloud.com/)
    const TracingAnalysisEndpoint = "http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxxxx_xxxxx/api/traces"
    
    // Agent reporting: true (requires a locally started jaeger-agent)  SDK reporting: false (default)
    const AgentSwitch = false
    
    // Application names in the Tracing Analysis console
    const (
    	CliTracerServiceName = "cliDemo"
    
    	GrpcServerName = "grpcServer"
    
    	GrpcClientName = "grpcClient"
    
    	HttpServerName = "httpServer"
    
    	HttpClientName = "httpClient"
    )
  5. Ejecute el comando go mod tidy para gestionar las dependencias.

  6. Ejecute el comando go run tracingdemo para ejecutar el ejemplo.

Preguntas frecuentes

P: ¿Por qué ocurre el siguiente error durante la ejecución?

2021/06/28 21:11:54 ERROR: error when flushing the buffer: error from collector: 403

R: Este error indica que el endpoint es incorrecto. Corrija el endpoint e inténtelo de nuevo.