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
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
Kirimkan Data Melalui gRPC
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 grpcInisialisasi 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) } } }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)Jalankan aplikasi.
go run main.goMasuk ke Konsol ARMS. Di bilah navigasi sisi kiri, pilih . Di halaman Applications, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.
CatatanJika ikon
ditampilkan di kolom Language, aplikasi terhubung dengan Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi terhubung dengan Managed Service for OpenTelemetry.
Kirimkan Data Melalui HTTP
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 httpInisialisasi 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) } } }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) }Jalankan aplikasi.
go run main.goMasuk ke Konsol ARMS. Di bilah navigasi sisi kiri, pilih . Di halaman Applications, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.
CatatanJika ikon
ditampilkan di kolom Language, aplikasi terhubung dengan Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi terhubung dengan Managed Service for OpenTelemetry.
