全部产品
Search
文档中心

Application Real-Time Monitoring Service:Gunakan OpenTelemetry untuk Mengirimkan Data Jejak Aplikasi Go

更新时间:Jun 27, 2025

Sebelum melihat data jejak aplikasi, Anda harus menggunakan klien untuk melaporkan data jejak ke Managed Service for OpenTelemetry. Topik ini menjelaskan cara menggunakan OpenTelemetry SDK untuk Go untuk mengirimkan data jejak aplikasi Go.

Prasyarat

Untuk mendapatkan titik akhir Managed Service for OpenTelemetry, ikuti langkah-langkah berikut:

  1. Masuk ke Konsol Managed Service for OpenTelemetry.

  2. Di bilah navigasi sisi kiri, klik Cluster Configurations. Di halaman yang muncul, klik tab Access point information.

  3. Di bilah navigasi atas, pilih wilayah. Di bagian Cluster Information, aktifkan Show Token.

  4. Atur parameter Client menjadi OpenTelemetry.

    Dapatkan titik akhir Managed Service for OpenTelemetry di kolom Related Information tabel di bagian bawah.OT接入点信息

    Catatan

    Jika aplikasi Anda diterapkan di lingkungan produksi Alibaba Cloud, gunakan titik akhir Virtual Private Cloud (VPC). Jika tidak, gunakan titik akhir publik.

Informasi Latar Belakang

OpenTelemetry SDK untuk Go menyediakan kemampuan analisis pelacakan terdistribusi untuk bahasa pemrograman Go. Anda dapat menggunakan OpenTelemetry Protocol (OTLP) melalui gRPC atau HTTP untuk mengirimkan data ke server Managed Service for OpenTelemetry.

OpenTelemetry menyediakan beberapa plugin instrumentasi semi-otomatis. Anda tidak perlu membuat rentang secara manual. Cukup panggil operasi API yang disediakan oleh plugin ini dalam kode. Rentang akan dibuat secara otomatis untuk kerangka kerja umum. Untuk informasi lebih lanjut tentang kerangka kerja yang didukung, lihat Dokumentasi OpenTelemetry.

Contoh Kode

oltp-exporter

Kirimkan Data Melalui gRPC

  1. Tambahkan dependensi 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. Inisialisasi OpenTelemetry SDK untuk Go.

    Anda dapat mengirimkan data menggunakan OpenTelemetry SDK untuk Go atau meneruskan data menggunakan OpenTelemetry Collector open source.

    • Jika Anda mengirimkan data menggunakan OpenTelemetry SDK untuk Go, ganti otelAgentAddr dan xtraceToken dengan titik akhir dan token otentikasi yang diperoleh di bagian Prasyarat.

    • Jika Anda meneruskan data menggunakan OpenTelemetry Collector open source, ganti otelAgentAddr dengan alamat IP layanan lokal Anda dan hapus header:

    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}   // Ganti xtraceToken dengan token otentikasi yang diperoleh di bagian Prasyarat. 
        traceClient := otlptracegrpc.NewClient(
            otlptracegrpc.WithInsecure(),
            otlptracegrpc.WithEndpoint(otelAgentAddr),    // Ganti otelAgentAddr dengan titik akhir yang diperoleh di bagian Prasyarat. 
            otlptracegrpc.WithHeaders(headers),
            otlptracegrpc.WithDialOption(grpc.WithBlock()))
        log.Println("mulai terhubung ke server")
        traceExp, err := otlptrace.New(ctx, traceClient)
        handleErr(err, "Gagal membuat ekspor jejak kolektor")
    
        res, err := resource.New(ctx,
            resource.WithFromEnv(),
            resource.WithProcess(),
            resource.WithTelemetrySDK(),
            resource.WithHost(),
            resource.WithAttributes(
                // Tentukan nama layanan yang ditampilkan di backend Managed Service for OpenTelemetry. 
                semconv.ServiceNameKey.String(common.ServerServiceName),
                semconv.HostNameKey.String(common.ServerServiceHostName),
            ),
        )
        handleErr(err, "gagal membuat sumber daya")
    
        bsp := sdktrace.NewBatchSpanProcessor(traceExp)
        tracerProvider := sdktrace.NewTracerProvider(
            sdktrace.WithSampler(sdktrace.AlwaysSample()),
            sdktrace.WithResource(res),
            sdktrace.WithSpanProcessor(bsp),
        )
    
        // Atur propagator global ke tracecontext. Propagator global tidak ditentukan secara 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. Instrumentasikan aplikasi.

    shutdown := initProvider()
        defer shutdown()
    
        //meter := global.Meter("demo-server-meter")
        serverAttribute := attribute.String("server-attribute", "foo")
        fmt.Println("mulai menghasilkan karakter untuk data jejak")
        initTraceDemoData()
        fmt.Println("generasi data jejak selesai")
        tracer := otel.Tracer(common.TraceInstrumentationName)
    
        // Buat penanganan di OpenTelemetry. 
        handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
            // Simulasikan penundaan.
            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. Jalankan aplikasi.

    go run main.go

    Masuk ke Konsol ARMS. Di bilah navigasi sisi kiri, pilih Application Monitoring > Applications. Di halaman Applications, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.

    Catatan

    Jika ikon image ditampilkan di kolom Language, aplikasi terhubung dengan Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi terhubung dengan Managed Service for OpenTelemetry.

Kirimkan Data Melalui HTTP

  1. Tambahkan dependensi 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. Inisialisasi OpenTelemetry SDK untuk Go. Ganti Endpoint dan URLPath dengan titik akhir yang diperoleh di bagian Prasyarat.

    Anda dapat mengirimkan data menggunakan OpenTelemetry SDK untuk Go atau meneruskan data menggunakan OpenTelemetry Collector open source.

    • Jika Anda mengirimkan data menggunakan OpenTelemetry SDK untuk Go, ganti Endpoint dan URLPath dengan titik akhir yang diperoleh di bagian Prasyarat.

    • Jika Anda meneruskan data menggunakan OpenTelemetry Collector open source, ganti Endpoint dengan alamat IP layanan lokal Anda dan hapus header:

    func initProvider() func() {
        ctx := context.Background()
    
        traceClientHttp := otlptracehttp.NewClient(
            otlptracehttp.WithEndpoint("127.0.XX.XX:8080"),      //Ganti Endpoint dengan titik akhir yang diperoleh di bagian Prasyarat. 
            otlptracehttp.WithURLPath("/adapt_xxxxx/api/otlp/traces"),   //Ganti URLPath dengan titik akhir yang diperoleh di bagian Prasyarat. 
            otlptracehttp.WithInsecure())
        otlptracehttp.WithCompression(1)
    
        traceExp, err := otlptrace.New(ctx, traceClientHttp)
        handleErr(err, "Gagal membuat ekspor jejak kolektor")
    
        res, err := resource.New(ctx,
            resource.WithFromEnv(),
            resource.WithProcess(),
            resource.WithTelemetrySDK(),
            resource.WithHost(),
            resource.WithAttributes(
                // Tentukan nama layanan yang ditampilkan di backend Managed Service for OpenTelemetry. 
                semconv.ServiceNameKey.String(common.ClientServiceName),
                semconv.HostNameKey.String(common.ClientServiceHostName),
            ),
        )
        handleErr(err, "gagal membuat sumber daya")
    
        bsp := sdktrace.NewBatchSpanProcessor(traceExp)
        tracerProvider := sdktrace.NewTracerProvider(
            sdktrace.WithSampler(sdktrace.AlwaysSample()),
            sdktrace.WithResource(res),
            sdktrace.WithSpanProcessor(bsp),
        )
    
        // Atur propagator global ke tracecontext. Propagator global tidak ditentukan secara default. 
        otel.SetTextMapPropagator(propagation.TraceContext{})
        otel.SetTracerProvider(tracerProvider)
    
        log.Println("OTEL inisialisasi berhasil")
    
        return func() {
            cxt, cancel := context.WithTimeout(ctx, time.Second)
            defer cancel()
            if err := traceExp.Shutdown(cxt); err != nil {
                otel.Handle(err)
            }
        }
    }
  3. Instrumentasikan aplikasi.

    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. Jalankan aplikasi.

    go run main.go

    Masuk ke Konsol ARMS. Di bilah navigasi sisi kiri, pilih Application Monitoring > Applications. Di halaman Applications, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.

    Catatan

    Jika ikon image ditampilkan di kolom Language, aplikasi terhubung dengan Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi terhubung dengan Managed Service for OpenTelemetry.