Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Relatar dados de aplicações Go usando o Jaeger

Última atualização: Sep 08, 2026

Instrumente sua aplicação Go com o Jaeger e relate traces para o Managed Service for OpenTelemetry. Após o relato dos traces, o Managed Service for OpenTelemetry passa a monitorar sua aplicação. Visualize diversos dados de monitoramento, como topologia da aplicação, pilhas de chamadas, transações anômalas, transações lentas e análise de SQL. Este tópico descreve como usar o SDK do Jaeger e o Jaeger Agent para instrumentar e relatar dados de aplicações Go.

Importante
  • Para obter recursos mais avançados, capacidades superiores de rastreamento e uma experiência aprimorada, conecte sua aplicação ao Managed Service for OpenTelemetry pelo protocolo OpenTelemetry. Para mais informações, consulte Preparations.

  • O ARMS oferece um agent desenvolvido internamente e com suporte comercial para aplicações Go. Esse agent permite instrumentação não intrusiva, além de proporcionar um conjunto de recursos mais amplo e maior estabilidade. Para mais informações, consulte Monitor Go applications.

Pré-requisitos

Obter um endpoint

  1. Faça login no console do ARMS. No painel de navegação à esquerda, clique em Integration Center.

  2. Na página Integration Center, clique no cartão Jaeger na seção Server-side Applications.

  3. No painel Jaeger, clique na aba Start Integration e selecione a região onde deseja relatar os dados.

    Nota

    Ao acessar uma região pela primeira vez, os recursos são inicializados automaticamente nela.

  4. Configure os parâmetros Connection Type e Export Protocol e copie um endpoint.

    • Connection Type: Se o service estiver implantado na Alibaba Cloud e residir na região selecionada, defina este parâmetro como Alibaba Cloud VPC Network. Caso contrário, defina como Public Network.

    • Export Protocol: Defina este parâmetro como HTTP (recomendado) ou gRPC, conforme o protocolo compatível com o cliente.

    image.png

Informações de fundo

Como os dados são relatados?

  • A figura a seguir ilustra o processo de relato de dados sem o uso do Jaeger Agent.

    image
  • A próxima figura demonstra o fluxo de relato de dados com o Jaeger Agent.

    image

Método 1: Relatar dados usando o SDK do Jaeger

Esta seção usa a ferramenta de gerenciamento de dependências Go Modules como exemplo. Use o SDK do Jaeger para instrumentar e relatar dados diretamente ao servidor do Managed Service for OpenTelemetry. Caso utilize outras ferramentas de gerenciamento de dependências, execute as operações necessárias.

  1. Importe o jaeger-client-go.

    go get github.com/uber/jaeger-client-go
  2. Crie um objeto Tracer.

    Nota

    Substitua <endpoint> pelo endpoint correspondente ao seu cliente e região. Obtenha o endpoint na página Endpoint Information no console do Managed Service for OpenTelemetry. Para mais detalhes sobre como obter o endpoint, consulte a seção Pré-requisitos deste tópico.

    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. Crie um objeto de instância de span e habilite a passagem de dados.

    • Se não existir nenhum 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()
    • Se existir um 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 mais informações sobre o uso do SDK, consulte a documentação do Go Doc.

Método 2: Relatar dados usando o Jaeger Agent

  1. Inicie o Jaeger Agent. Para mais informações, consulte Install Jaeger Agent.

  2. Importe o jaeger-client-go.

    go get github.com/uber/jaeger-client-go
  3. Crie um 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. Crie um objeto de instância de span e habilite a passagem de dados.

    • Se não existir nenhum 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()
    • Se existir um 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 mais informações sobre o uso do SDK, consulte a documentação do Go Doc.

Exemplos

Relatar dados diretamente usando o SDK do Jaeger

  1. Obtenha o endpoint. Para mais informações, consulte a seção Pré-requisitos deste tópico.

  2. Execute o comando abaixo para baixe o arquivo de exemplo.

    wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
  3. Abra o arquivo examples/settings.go na pasta de exemplo e configure os parâmetros conforme descrito nos comentários do bloco de código: defina TracingAnalysisEndpoint com o endpoint obtido na Etapa 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://tracing.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. Execute o comando go mod tidy para gerencie as dependências.

  5. Execute o comando go run tracingdemo para execute o exemplo.

Relatar dados usando o Jaeger Agent

  1. Obtenha o endpoint. Para mais informações, consulte a seção Pré-requisitos deste tópico.

  2. Execute o comando abaixo para baixe o arquivo de exemplo.

    wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
  3. Inicie o Jaeger Agent. Para mais informações, consulte Install Jaeger Agent.

  4. Abra o arquivo examples/settings.go na pasta de exemplo, configure os parâmetros conforme descrito nos comentários do bloco de código e altere o valor de AgentSwitch para 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://tracing.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. Execute o comando go mod tidy para gerencie as dependências.

  6. Execute o comando go run tracingdemo para execute o exemplo.

Perguntas frequentes

P: Por que o seguinte erro ocorre durante a execução?

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

R: Esse erro indica que o endpoint está incorreto. Corrija o endpoint e tente novamente.