Anda dapat menginstrumentasi aplikasi Go dengan Jaeger dan melaporkan jejak ke Managed Service for OpenTelemetry. Setelah jejak dilaporkan, Managed Service for OpenTelemetry akan mulai memantau aplikasi Anda. Anda dapat melihat berbagai data pemantauan, seperti topologi aplikasi, tumpukan panggilan, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan SDK Jaeger dan Agen Jaeger untuk instrumentasi serta pelaporan data aplikasi Go.
Untuk fitur yang lebih lengkap, kemampuan tracing lanjutan, dan pengalaman yang lebih baik, hubungkan aplikasi Anda ke Managed Service for OpenTelemetry menggunakan protokol OpenTelemetry. Untuk informasi selengkapnya, lihat Persiapan.
ARMS menyediakan agen komersial yang dikembangkan sendiri untuk aplikasi Go. Agen ini memungkinkan instrumentasi non-intrusif serta menyediakan fitur yang lebih lengkap dan stabilitas yang lebih tinggi. Untuk informasi selengkapnya, lihat Pantau aplikasi Go.
Prasyarat
Informasi latar belakang
Metode 1: Laporkan data menggunakan SDK Jaeger
Bagian ini menggunakan alat manajemen dependensi Go Modules sebagai contoh. Anda dapat menggunakan SDK Jaeger untuk instrumentasi guna melaporkan data secara langsung ke sisi server Managed Service for OpenTelemetry. Jika Anda menggunakan alat manajemen dependensi lain, lakukan operasi yang sesuai.
Impor jaeger-client-go.
go get github.com/uber/jaeger-client-goBuat objek Tracer.
CatatanGanti
<endpoint>dengan titik akhir untuk klien dan wilayah Anda. Anda dapat memperoleh titik akhir tersebut dari halaman Endpoint Information di Konsol Managed Service for OpenTelemetry. Untuk informasi selengkapnya tentang cara memperoleh titik akhir, lihat bagian Prasyarat dalam topik ini.func NewJaegerTracer(service string) (opentracing.Tracer, io.Closer) { sender := transport.NewHTTPTransport( // Setel gerbang. Gerbang bervariasi tergantung wilayah. "<endpoint>", ) tracer, closer:= jaeger.NewTracer(service, jaeger.NewConstSampler(true), jaeger.NewRemoteReporter(sender)) return tracer, closer }Buat objek instans span dan aktifkan transmisi langsung data.
Jika parentSpan tidak ada:
// Buat span. span := tracer.StartSpan("myspan") // Setel tag. clientSpan.SetTag("mytag", "123") // Transmisikan trace ID. tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) ... defer span.Finish()Jika parentSpan ada:
// Parsing spanCtx dari objek HTTP/RPC. spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx)) ... defer span.Finish()
Untuk informasi selengkapnya tentang cara menggunakan SDK, lihat Go Doc.
Metode 2: Laporkan data menggunakan Agen Jaeger
Jalankan Agen Jaeger. Untuk informasi selengkapnya, lihat Instal Agen Jaeger.
Impor jaeger-client-go.
go get github.com/uber/jaeger-client-goBuat objek 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 }Buat objek instans span dan aktifkan transmisi langsung data.
Jika parentSpan tidak ada:
// Buat span. span := tracer.StartSpan("myspan") // Setel tag. clientSpan.SetTag("mytag", "123") // Transmisikan trace ID. tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) ... defer span.Finish()Jika parentSpan ada:
// Parsing spanCtx dari objek HTTP/RPC. spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx)) ... defer span.Finish()
Untuk informasi selengkapnya tentang cara menggunakan SDK, lihat Go Doc.
Contoh
Laporkan data secara langsung menggunakan SDK Jaeger
Dapatkan titik akhir. Untuk informasi selengkapnya, lihat bagian Prasyarat dalam topik ini.
Jalankan perintah berikut untuk mengunduh file contoh.
wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zipBuka file examples/settings.go di folder contoh dan konfigurasikan parameter sesuai penjelasan dalam komentar blok kode: atur TracingAnalysisEndpoint ke titik akhir yang Anda peroleh di Langkah 1.
package examples // Diperlukan untuk pelaporan SDK: atur gerbang Analisis Tracing (nilainya bervariasi per wilayah; peroleh dari tampilan konfigurasi di http://tracing.console.alibabacloud.com/) const TracingAnalysisEndpoint = "http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxxxx_xxxxx/api/traces" // Pelaporan melalui Agen: true (memerlukan jaeger-agent yang dijalankan lokal) Pelaporan melalui SDK: false (default) const AgentSwitch = false // Nama aplikasi di Konsol Analisis Tracing const ( CliTracerServiceName = "cliDemo" GrpcServerName = "grpcServer" GrpcClientName = "grpcClient" HttpServerName = "httpServer" HttpClientName = "httpClient" )Jalankan perintah
go mod tidyuntuk mengelola dependensi.Jalankan perintah
go run tracingdemountuk menjalankan contoh.
Laporkan data menggunakan Agen Jaeger
Dapatkan titik akhir. Untuk informasi selengkapnya, lihat bagian Prasyarat dalam topik ini.
Jalankan perintah berikut untuk mengunduh file contoh.
wget https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/demo/tracing-demo.zip && unzip tracing-demo.zipJalankan Agen Jaeger. Untuk informasi selengkapnya, lihat Instal Agen Jaeger.
Buka file examples/settings.go di folder contoh, konfigurasikan parameter sesuai penjelasan dalam komentar blok kode, dan ubah nilai
AgentSwitchmenjaditrue.package examples // Diperlukan untuk pelaporan SDK: atur gerbang Analisis Tracing (nilainya bervariasi per wilayah; peroleh dari tampilan konfigurasi di http://tracing.console.alibabacloud.com/) const TracingAnalysisEndpoint = "http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxxxx_xxxxx/api/traces" // Pelaporan melalui Agen: true (memerlukan jaeger-agent yang dijalankan lokal) Pelaporan melalui SDK: false (default) const AgentSwitch = false // Nama aplikasi di Konsol Analisis Tracing const ( CliTracerServiceName = "cliDemo" GrpcServerName = "grpcServer" GrpcClientName = "grpcClient" HttpServerName = "httpServer" HttpClientName = "httpClient" )Jalankan perintah
go mod tidyuntuk mengelola dependensi.Jalankan perintah
go run tracingdemountuk menjalankan contoh.
FAQ
T: Mengapa error berikut terjadi saat waktu proses?
2021/06/28 21:11:54 ERROR: error when flushing the buffer: error from collector: 403J: Error ini menunjukkan bahwa titik akhir salah. Perbaiki titik akhir tersebut dan coba lagi.
