Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Reportar dados de aplicações Go com Jaeger

Última atualização: Jul 05, 2026

Se você precisa de rastreamento distribuído para seus serviços Go, o Managed Service for OpenTelemetry coleta dados de trace por meio do cliente Jaeger. Instrumente sua aplicação Go uma única vez, escolha um método de reporte e os traces estarão disponíveis no console para análise.

Dois métodos de reporte estão disponíveis:

Método

Transporte

Mais indicado para

Jaeger SDK (recomendado)

HTTP direto para o endpoint

Implantações simples em que cada serviço gerencia seu próprio reporte, sem necessidade de instalar componentes adicionais.

Agente Jaeger

UDP para um agente local, que encaminha os dados ao endpoint

Ambientes de produção onde se deseja desacoplar o transporte de traces da aplicação ou quando vários serviços compartilham um único agente.

Os diagramas a seguir ilustram o fluxo de dados de cada método.

Reporte direto sem o agente Jaeger:

Direct reporting without Jaeger agent

Reporte por meio do agente Jaeger:

Reporting through the Jaeger agent

Obter um endpoint do Jaeger

Antes de instrumentar sua aplicação, obtenha o endpoint para o qual o cliente Jaeger enviará os traces.

  1. Faça login no console do Managed Service for OpenTelemetry.

  2. No painel de navegação à esquerda, clique em Cluster Configurations. Em seguida, clique na aba Access point information.

  3. Na barra de navegação superior, selecione uma região. Na seção Cluster Information, ative Show Token.

  4. Na seção Client, clique em Jaeger ou Zipkin.

  5. Copie o endpoint na coluna Related Information.

Jaeger/Zipkin access point information

Nota

Use um endpoint de Virtual Private Cloud (VPC) se sua aplicação estiver em execução em um ambiente de produção da Alibaba Cloud. Para todos os demais ambientes, use um endpoint público. No caso do Zipkin, prefira o endpoint v2, a menos que haja um motivo específico para usar a versão v1.

Instalar a biblioteca cliente do Jaeger

Ambos os métodos de reporte usam a mesma biblioteca cliente Go. Instale-a usando módulos Go:

go get github.com/uber/jaeger-client-go

Inicializar o tracer

Escolha uma das opções abaixo conforme o método de reporte selecionado.

Opção A: Reporte direto com o Jaeger SDK

Crie um tracer que envia spans via HTTP diretamente para o endpoint do Managed Service for OpenTelemetry:

import (
    "io"

    "github.com/opentracing/opentracing-go"
    "github.com/uber/jaeger-client-go"
    "github.com/uber/jaeger-client-go/transport"
)

func NewJaegerTracer(service string) (opentracing.Tracer, io.Closer) {
    sender := transport.NewHTTPTransport(
        // Replace with the endpoint from the Access point information tab.
        // Use a VPC endpoint for production; use a public endpoint otherwise.
        "<endpoint>",
    )

    tracer, closer := jaeger.NewTracer(
        service,
        jaeger.NewConstSampler(true),
        jaeger.NewRemoteReporter(sender),
    )
    return tracer, closer
}

Substitua o placeholder abaixo pelo valor correspondente:

Placeholder

Descrição

Exemplo

<endpoint>

Endpoint do Jaeger obtido na aba Access point information

http://tracing-analysis-dc-hz.aliyuncs.com/...

Opção B: Reporte por meio do agente Jaeger

Antes de criar o tracer, instale e inicie o agente Jaeger. Consulte Instalar o agente Jaeger.

Em seguida, crie um tracer que envia spans via UDP para o agente local:

import (
    "io"

    "github.com/opentracing/opentracing-go"
    "github.com/uber/jaeger-client-go"
)

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
}

Criar spans e propagar contexto

Após inicializar o tracer, crie spans para capturar operações na sua aplicação.

Iniciar um span raiz

Use este padrão no ponto de entrada de uma requisição recebida, quando não houver um span pai existente:

// Start a new root span for the operation.
span := tracer.StartSpan("myspan")
// Always call Finish() to flush the span to the reporter when the function returns.
defer span.Finish()

// Attach metadata to the span for filtering and analysis in the console.
clientSpan.SetTag("mytag", "123")

// Inject the trace context into outgoing HTTP headers
// so downstream services can continue the trace.
tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header))

Continuar um trace a partir de uma requisição recebida

Aplique este padrão ao processar uma requisição proveniente de um serviço upstream já instrumentado:

// Extract the trace context from the incoming HTTP or RPC request headers.
spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header))

// Create a child span linked to the extracted parent context.
span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx))
defer span.Finish()

Para a referência completa da API, consulte Jaeger Bindings for Go OpenTracing API.

Executar a demonstração

Uma aplicação de demonstração pré-compilada abrange ambos os métodos de reporte. Baixe e configure o projeto para validar sua configuração.

  1. Baixe e extraia a demonstração:

       wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zip
  2. Abra o arquivo examples/settings.go e configure a demonstração conforme o método de reporte escolhido: Para reporte direto via SDK, defina TracingAnalysisEndpoint com o endpoint obtido em Obter um endpoint do Jaeger. Para reporte via agente Jaeger, inicie primeiro o agente Jaeger (consulte Instalar o agente Jaeger) e depois defina AgentSwitch como true.

    Setting the TracingAnalysisEndpoint in settings.go

    Setting AgentSwitch to true in settings.go

  3. Instale as dependências e execute a demonstração:

       go mod tidy
       go run tracingdemo

Perguntas frequentes

**Por que recebo um erro 403 ao reportar dados?**

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

O endpoint é inválido. Para resolver esse problema:

  1. Faça login no console do Managed Service for OpenTelemetry.

  2. Acesse Cluster Configurations > Access point information.

  3. Ative Show Token e copie novamente a string completa do endpoint.

  4. Atualize o endpoint na configuração da sua aplicação e reinicie-a.