Setelah Anda menggunakan Zipkin untuk menginstrumentasi aplikasi dan melaporkan data jejak aplikasi ke Managed Service for OpenTelemetry, Managed Service for OpenTelemetry mulai memantau aplikasi. Anda dapat melihat data pemantauan aplikasi, seperti topologi aplikasi, jejak, transaksi abnormal, transaksi lambat, dan analisis SQL. Topik ini menjelaskan cara menggunakan Zipkin untuk menginstrumentasi aplikasi Go dan melaporkan data jejak aplikasi tersebut.
Untuk fitur yang lebih kaya, kemampuan pelacakan tingkat lanjut, dan pengalaman pengguna optimal, disarankan untuk menghubungkan aplikasi Anda ke Managed Service for OpenTelemetry menggunakan protokol OpenTelemetry. Alibaba Cloud menyediakan panduan terperinci tentang integrasi OpenTelemetry dengan aplikasi serta praktik terbaik untuk memulai. Untuk informasi lebih lanjut, lihat Persiapan.
ARMS menyediakan agen komersial berbasis Go yang mendukung instrumentasi non-intrusif dengan fitur lebih kaya dan stabilitas tinggi. Untuk informasi lebih lanjut, lihat Pantau Aplikasi Go.
Prasyarat
Informasi Latar Belakang
Zipkin adalah sistem pelacakan terdistribusi open source yang dikembangkan oleh Twitter untuk melacak data waktu nyata. Zipkin mengumpulkan data pemantauan waktu nyata dari beberapa sistem heterogen.
Instrumentasi aplikasi
Sebelum menggunakan Zipkin untuk melaporkan data jejak aplikasi Go ke konsol Managed Service for OpenTelemetry, Anda harus menginstrumentasi aplikasi.
Tambahkan dependensi.
[[constraint]] name = "github.com/openzipkin/zipkin-go" version = "0.1.1" [[constraint]] name = "github.com/gorilla/mux" version = "1.6.2"Buat tracer. Tracer digunakan untuk membuat rentang yang mencatat waktu operasi terdistribusi. Tracer mencakup informasi seperti titik akhir pelaporan data, alamat IP mesin lokal, dan laju pengambilan sampel. Anda dapat menyesuaikan laju pengambilan sampel untuk mengurangi biaya pelaporan data.
func getTracer(serviceName string, ip string) *zipkin.Tracer { // Buat reporter yang akan digunakan oleh tracer. reporter := httpreporter.NewReporter("http://tracing-analysis-dc-hz.aliyuncs.com/adapt_aokcdqnxyz@123456ff_abcdef123@abcdef123/api/v2/spans") // Konfigurasikan endpoint lokal untuk layanan. endpoint, _ := zipkin.NewEndpoint(serviceName, ip) // Konfigurasikan strategi pengambilan sampel. sampler := zipkin.NewModuloSampler(1) // Inisialisasi tracer. tracer, _ := zipkin.NewTracer( reporter, zipkin.WithLocalEndpoint(endpoint), zipkin.WithSampler(sampler), ) return tracer; }Catat data permintaan.
// Tracer sekarang dapat digunakan untuk membuat rentang. span := tracer.StartSpan("some_operation") // ... lakukan beberapa pekerjaan ... span.Finish()CatatanAnda dapat menjalankan kode sebelumnya untuk membuat rentang utama yang mencatat operasi utama permintaan. Jika ingin mencatat operasi sebelum dan sesudah permintaan, tentukan informasi konteks. Contoh:
childSpan := tracer.StartSpan("some_operation2", zipkin.Parent(span.Context())) // ... lakukan beberapa pekerjaan ... childSpan.Finish()Opsional. Untuk mempermudah pemecahan masalah, tambahkan tag kustom ke rentang. Misalnya, periksa apakah terjadi kesalahan, catat nilai balik permintaan, atau konfigurasikan pesan kesalahan.
Tambahkan tag kustom:
childSpan.Tag("http.status_code", statusCode)Buat pesan kesalahan kustom:
childSpan := tracer.StartSpan("some_operation2", zipkin.Parent(span.Context())) // ... lakukan beberapa pekerjaan ... var events = make(map[string]string) events["event"] = "error" events["stack"] = "Runtime Exception: unable to find userid" jsonStr, err := json.Marshal(events) if err == nil { childSpan.Annotate(time.Now(), string(jsonStr)) } childSpan.Finish()Dalam sistem terdistribusi, permintaan panggilan prosedur jarak jauh (RPC) dikirim bersama dengan data jejak. Data jejak mencakup nilai-nilai parameter TraceId, ParentSpanId, SpanId, dan Sampled. Anda dapat memanggil metode Extract atau Inject untuk melewati data jejak dalam header permintaan HTTP. Gambar berikut menunjukkan seluruh proses.
CatatanZipkin memungkinkan Anda melewati informasi konteks melalui HTTP atau Google Remote Procedure Call (gRPC).
Panggil metode Inject di klien untuk menentukan informasi konteks.
req, _ := http.NewRequest("GET", "/", nil) // konfigurasikan fungsi yang menyuntikkan konteks jejak ke permintaan injector := b3.InjectHTTP(req) injector(sp.Context())Panggil metode Extract di server untuk mengekstrak informasi konteks.
req, _ := http.NewRequest("GET", "/", nil) b3.InjectHTTP(req)(sp.Context()) b.ResetTimer() _ = b3.ExtractHTTP(copyRequest(req))
Memulai dengan Zipkin
Contoh berikut menunjukkan cara menggunakan Zipkin untuk melaporkan data jejak aplikasi Go.
Unduh file Demo.
Ubah titik akhir pelaporan data di file utils.go.
CatatanGanti
<endpoint>dengan titik akhir wilayah tempat klien Anda berada. Anda dapat masuk ke konsol Managed Service for OpenTelemetry dan melihat titik akhir pada tab Access point information halaman . Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat bagian "Prasyarat" dari topik ini.Instal dependensi yang diperlukan.
dep ensureJalankan aplikasi uji.
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 ke Pemantauan Aplikasi. Jika tanda hubung (-) ditampilkan, aplikasi terhubung ke Managed Service for OpenTelemetry.
Pertanyaan Umum
T: Mengapa tidak ada data yang dilaporkan setelah saya melakukan langkah-langkah sebelumnya?
A: Periksa pesan kesalahan yang dikembalikan saat aplikasi berjalan dan pastikan nilai parameter endpoint_url valid. Misalnya, jika pesan failed the request with status code 403 dikembalikan, nama pengguna atau kata sandi tidak valid.
