全部产品
Search
文档中心

Managed Service for OpenTelemetry:Gunakan Zipkin untuk melaporkan data jejak aplikasi Go

更新时间:Jul 06, 2025

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.

Penting
  • 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

Untuk mendapatkan titik akhir Jaeger atau Zipkin, 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 ke Jaeger atau Zipkin. Pada contoh ini, Jaeger dipilih.

    Dapatkan titik akhir Jaeger atau Zipkin di kolom Related Information tabel di bagian bawah.

    Jaeger/Zipkin接入点信息

    Catatan

    Jika aplikasi diterapkan di lingkungan produksi Alibaba Cloud, gunakan titik akhir VPC. Jika tidak, gunakan titik akhir publik. Secara umum, gunakan titik akhir v2 untuk Zipkin. Gunakan titik akhir v1 hanya jika Anda memahami Zipkin dengan baik.

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.

Gambar berikut menunjukkan cara melaporkan data menggunakan Zipkin.

Instrumentasi aplikasi

Sebelum menggunakan Zipkin untuk melaporkan data jejak aplikasi Go ke konsol Managed Service for OpenTelemetry, Anda harus menginstrumentasi aplikasi.

  1. Tambahkan dependensi.

    [[constraint]]
      name = "github.com/openzipkin/zipkin-go"
      version = "0.1.1"
    
    [[constraint]]
      name = "github.com/gorilla/mux"
      version = "1.6.2"
  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;
    }
  3. Catat data permintaan.

    // Tracer sekarang dapat digunakan untuk membuat rentang.
    span := tracer.StartSpan("some_operation")
    // ... lakukan beberapa pekerjaan ...
    span.Finish()
    Catatan

    Anda 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()
  4. 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()
  5. 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.

    1.jpg

    Catatan

    Zipkin memungkinkan Anda melewati informasi konteks melalui HTTP atau Google Remote Procedure Call (gRPC).

    1. 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())
    2. 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.

  1. Unduh file Demo.

  2. Ubah titik akhir pelaporan data di file utils.go.

    Catatan

    Ganti <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 Cluster Configurations. Untuk informasi lebih lanjut tentang cara mendapatkan titik akhir, lihat bagian "Prasyarat" dari topik ini.

  3. Instal dependensi yang diperlukan.

    dep ensure
  4. Jalankan aplikasi uji.

    go run main.go

    Di halaman Applications dari Konsol Managed Service for OpenTelemetry, klik nama aplikasi. Di halaman yang muncul, lihat data jejak.

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.