Todos os produtos
Search
Central de documentação

Managed Service for OpenTelemetry:Use o OpenTelemetry para enviar dados de rastreamento de uma aplicação Go

Última atualização: Jul 05, 2026

Para visualizar os dados de rastreamento da sua aplicação, use um cliente para reportar esses dados ao Managed Service for OpenTelemetry. Este tópico descreve como usar o OpenTelemetry SDK for Go para enviar os dados de rastreamento de uma aplicação Go.

Pré-requisitos

Para obter o endpoint do Managed Service for OpenTelemetry, execute as etapas a seguir:

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

  2. No painel de navegação à esquerda, clique em Cluster Configurations. Na página exibida, clique em aba Access point information.

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

  4. Defina o parâmetro Client como OpenTelemetry.

    Obtenha o endpoint do Managed Service for OpenTelemetry na coluna Related Information da tabela na parte inferior.OT接入点信息

    Nota

    Se sua aplicação estiver implantada em um ambiente de produção da Alibaba Cloud, use o endpoint da Virtual Private Cloud (VPC). Caso contrário, use o endpoint público.

Informações de fundo

O OpenTelemetry SDK for Go oferece recursos de análise de rastreamento distribuído para a linguagem de programação Go. Use o OpenTelemetry Protocol (OTLP) sobre gRPC ou HTTP para enviar dados ao servidor do Managed Service for OpenTelemetry.

O OpenTelemetry disponibiliza diversos plug-ins de instrumentação semiautomática. Não é necessário criar spans manualmente; basta chamar as operações de API fornecidas por esses plug-ins no código. Spans são criados automaticamente para frameworks comuns. Para mais detalhes sobre os frameworks suportados, consulte a documentação do OpenTelemetry.

Código de exemplo

oltp-exporter

Envio de dados via gRPC

  1. Adicione a dependência do OpenTelemetry Go.

    go get go.opentelemetry.io/otel
    go get go.opentelemetry.io/otel/trace
    go get go.opentelemetry.io/otel/sdk
    go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc // otlp grpc
  2. Inicialize o OpenTelemetry SDK for Go.

    Envie dados diretamente pelo OpenTelemetry SDK for Go ou encaminhe-os pelo OpenTelemetry Collector open source.

    • Para enviar dados com o OpenTelemetry SDK for Go, substitua otelAgentAddr e xtraceToken pelo endpoint e token de autenticação obtidos na seção de Pré-requisitos.

    • Para encaminhar dados usando o OpenTelemetry Collector open source, substitua otelAgentAddr pelo endereço IP do seu serviço local e remova os headers:

    func initProvider() func() {
        ctx := context.Background()
    
        otelAgentAddr, xtraceToken, ok := common.ObtainXTraceInfo()
    
        if !ok {
            log.Fatalf("Cannot init OpenTelemetry, exit")
            os.Exit(-1)
        }
    
        headers := map[string]string{"Authentication": xtraceToken}   // Replace xtraceToken with the authentication token obtained in the Prerequisites section. 
        traceClient := otlptracegrpc.NewClient(
            otlptracegrpc.WithInsecure(),
            otlptracegrpc.WithEndpoint(otelAgentAddr),    // Replace otelAgentAddr with the endpoint obtained in the Prerequisites section. 
            otlptracegrpc.WithHeaders(headers),
            otlptracegrpc.WithDialOption(grpc.WithBlock()))
        log.Println("start to connect to server")
        traceExp, err := otlptrace.New(ctx, traceClient)
        handleErr(err, "Failed to create the collector trace exporter")
    
        res, err := resource.New(ctx,
            resource.WithFromEnv(),
            resource.WithProcess(),
            resource.WithTelemetrySDK(),
            resource.WithHost(),
            resource.WithAttributes(
                // Specify the service name displayed on the backend of Managed Service for OpenTelemetry. 
                semconv.ServiceNameKey.String(common.ServerServiceName),
                semconv.HostNameKey.String(common.ServerServiceHostName),
            ),
        )
        handleErr(err, "failed to create resource")
    
        bsp := sdktrace.NewBatchSpanProcessor(traceExp)
        tracerProvider := sdktrace.NewTracerProvider(
            sdktrace.WithSampler(sdktrace.AlwaysSample()),
            sdktrace.WithResource(res),
            sdktrace.WithSpanProcessor(bsp),
        )
    
        // Set the global propagator to tracecontext. The global propagator is not specified by default. 
        otel.SetTextMapPropagator(propagation.TraceContext{})
        otel.SetTracerProvider(tracerProvider)
    
        return func() {
            cxt, cancel := context.WithTimeout(ctx, time.Second)
            defer cancel()
            if err := traceExp.Shutdown(cxt); err != nil {
                otel.Handle(err)
            }
        }
    }
  3. Instrumente a aplicação.

    shutdown := initProvider()
        defer shutdown()
    
        //meter := global.Meter("demo-server-meter")
        serverAttribute := attribute.String("server-attribute", "foo")
        fmt.Println("start to gen chars for trace data")
        initTraceDemoData()
        fmt.Println("gen trace data done")
        tracer := otel.Tracer(common.TraceInstrumentationName)
    
        // Create a handler in OpenTelemetry. 
        handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
            // Simulate a delay.
            var sleep int64
            switch modulus := time.Now().Unix() % 5; modulus {
            case 0:
                sleep = rng.Int63n(2000)
            case 1:
                sleep = rng.Int63n(15)
            case 2:
                sleep = rng.Int63n(917)
            case 3:
                sleep = rng.Int63n(87)
            case 4:
                sleep = rng.Int63n(1173)
            }
            ctx := req.Context()
            span := trace.SpanFromContext(ctx)
            span.SetAttributes(serverAttribute)
    
            actionChild(tracer, ctx, sleep)
    
            w.Write([]byte("Hello World"))
        })
        wrappedHandler := otelhttp.NewHandler(handler, "/hello")
    
        http.Handle("/hello", wrappedHandler)
        http.ListenAndServe(":7080", nil)
  4. Inicie a aplicação.

    go run main.go

    Na página Applications do console do Managed Service for OpenTelemetry, clique em nome da aplicação. Na página seguinte, visualize os dados de rastreamento.

    Faça login no console do ARMS. No painel de navegação à esquerda, escolha Application Monitoring > Applications. Na página Applications, clique em nome da aplicação. Na página seguinte, visualize os dados de rastreamento.

    Nota

    A presença do ícone image na coluna Language indica que a aplicação está conectada ao Application Monitoring. Se houver um hífen (-), a conexão é com o Managed Service for OpenTelemetry.

Envio de dados via HTTP

  1. Adicione a dependência do OpenTelemetry Go.

    go get go.opentelemetry.io/otel
    go get go.opentelemetry.io/otel/trace
    go get go.opentelemetry.io/otel/sdk
    go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp // otlp http
  2. Inicialize o OpenTelemetry SDK for Go. Substitua Endpoint e URLPath pelo endpoint obtido na seção de Pré-requisitos.

    Envie dados diretamente pelo OpenTelemetry SDK for Go ou encaminhe-os pelo OpenTelemetry Collector open source.

    • Para envio direto com o OpenTelemetry SDK for Go, substitua Endpoint e URLPath pelo endpoint obtido nos Pré-requisitos.

    • Para encaminhamento via OpenTelemetry Collector open source, substitua Endpoint pelo endereço IP do seu serviço local e remova os headers:

    func initProvider() func() {
        ctx := context.Background()
    
        traceClientHttp := otlptracehttp.NewClient(
            otlptracehttp.WithEndpoint("127.0.XX.XX:8080"),      //Replace Endpoint with the endpoint obtained in the Prerequisites section. 
            otlptracehttp.WithURLPath("/adapt_xxxxx/api/otlp/traces"),   //Replace URLPath with the endpoint obtained in the Prerequisites section. 
            otlptracehttp.WithInsecure())
        otlptracehttp.WithCompression(1)
    
        traceExp, err := otlptrace.New(ctx, traceClientHttp)
        handleErr(err, "Failed to create the collector trace exporter")
    
        res, err := resource.New(ctx,
            resource.WithFromEnv(),
            resource.WithProcess(),
            resource.WithTelemetrySDK(),
            resource.WithHost(),
            resource.WithAttributes(
                // Specify the service name displayed on the backend of Managed Service for OpenTelemetry. 
                semconv.ServiceNameKey.String(common.ClientServiceName),
                semconv.HostNameKey.String(common.ClientServiceHostName),
            ),
        )
        handleErr(err, "failed to create resource")
    
        bsp := sdktrace.NewBatchSpanProcessor(traceExp)
        tracerProvider := sdktrace.NewTracerProvider(
            sdktrace.WithSampler(sdktrace.AlwaysSample()),
            sdktrace.WithResource(res),
            sdktrace.WithSpanProcessor(bsp),
        )
    
        // Set the global propagator to tracecontext. The global propagator is not specified by default. 
        otel.SetTextMapPropagator(propagation.TraceContext{})
        otel.SetTracerProvider(tracerProvider)
    
        log.Println("OTEL init success")
    
        return func() {
            cxt, cancel := context.WithTimeout(ctx, time.Second)
            defer cancel()
            if err := traceExp.Shutdown(cxt); err != nil {
                otel.Handle(err)
            }
        }
    }
  3. Instrumente a aplicação.

    tracer := otel.Tracer(common.TraceInstrumentationName)
    
        method, _ := baggage.NewMember("method", "repl")
        client, _ := baggage.NewMember("client", "cli")
        bag, _ := baggage.New(method, client)
    
        defaultCtx := baggage.ContextWithBaggage(context.Background(), bag)
        for {
            ctx, span := tracer.Start(defaultCtx, "ExecuteRequest")
            makeRequest(ctx)
            span.End()
            time.Sleep(time.Duration(1) * time.Second)
        }
  4. Inicie a aplicação.

    go run main.go

    Na página Applications do console do Managed Service for OpenTelemetry, clique em nome da aplicação. Na página seguinte, visualize os dados de rastreamento.

    Faça login no console do ARMS. No painel de navegação à esquerda, escolha Application Monitoring > Applications. Na página Applications, clique em nome da aplicação. Na página seguinte, visualize os dados de rastreamento.

    Nota

    A presença do ícone image na coluna Language indica que a aplicação está conectada ao Application Monitoring. Se houver um hífen (-), a conexão é com o Managed Service for OpenTelemetry.