全部产品
Search
文档中心

Managed Service for OpenTelemetry:Istilah

更新时间:Jul 02, 2025

Topik ini menjelaskan istilah-istilah yang perlu Anda pahami sebelum menggunakan Analisis Tracing. Topik ini membantu Anda memahami tujuan sistem tracing terdistribusi, konsep jejak, model data OpenTracing yang menjadi dasar Analisis Tracing, serta cara data dilaporkan ke Analisis Tracing.

Mengapa sistem tracing terdistribusi diperlukan?

Untuk menghadapi persyaratan bisnis yang kompleks, pengembang sering mengadopsi metode seperti pengembangan agile dan integrasi berkelanjutan. Arsitektur sistem telah berkembang dari perangkat lunak monolitik berskala besar menuju arsitektur berbasis layanan mikro. Layanan mikro dibangun di atas berbagai set perangkat lunak yang mungkin dikembangkan oleh tim berbeda, diimplementasikan dalam berbagai bahasa pemrograman, atau dirilis di beberapa server. Akibatnya, jika terjadi kesalahan pada salah satu layanan, puluhan aplikasi dapat mengalami pengecualian layanan.

Sistem tracing terdistribusi mencatat informasi permintaan, seperti proses eksekusi dan waktu yang dikonsumsi selama panggilan metode jarak jauh. Sistem ini merupakan alat penting untuk menyelesaikan masalah sistem dan meningkatkan kinerja.

Apa itu jejak?

Secara umum, jejak merepresentasikan proses eksekusi transaksi atau proses dalam sistem terdistribusi. Menurut standar OpenTracing, jejak adalah grafik asiklik terarah (DAG) yang terdiri dari beberapa rentang. Setiap rentang mewakili segmen bernama dan berwaktu yang berjalan secara terus-menerus dalam jejak.

Gambar berikut menunjukkan contoh panggilan terdistribusi. Ketika klien memulai permintaan, permintaan tersebut pertama-tama dikirim ke load balancer, kemudian diproses oleh layanan autentikasi dan layanan penagihan. Selanjutnya, permintaan dikirim ke sumber daya yang diminta, dan hasilnya dikembalikan ke sistem.

Gambar 1. Contoh Panggilan Terdistribusi分布式调用

Setelah sistem tracing terdistribusi mengumpulkan dan menyimpan data, sistem biasanya menampilkan jejak dalam bentuk diagram urutan dengan garis waktu.

Gambar 2. Diagram Jejak dengan Garis Waktu时间轴链路图

Model data OpenTracing

Ikhtisar

Dalam OpenTracing, jejak didefinisikan secara implisit oleh rentang yang termasuk dalam jejak. Jejak dapat dianggap sebagai DAG yang terdiri dari beberapa rentang. Hubungan antar rentang disebut referensi. Jejak dalam contoh berikut terdiri dari delapan rentang.

Hubungan kausal antar rentang dalam satu jejak


        [Rentang A]  ←←←(Rentang akar)
            |
     +------+------+
     |             |
 [Rentang B]      [Rentang C] ←←←(ChildOf: Rentang C adalah simpul anak dari Rentang A.)
     |             |
 [Rentang D]      +---+-------+
               |           |
           [Rentang E]    [Rentang F] >>> [Rentang G] >>> [Rentang H]
                                       ↑
                                       ↑
                                       ↑
                         (FollowsFrom: Rentang G dipanggil setelah Rentang F.)

Terkadang, diagram urutan dengan garis waktu lebih efektif dalam menampilkan jejak.

Hubungan waktu antar rentang dalam satu jejak


––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> waktu

 [Rentang A···················································]
   [Rentang B··············································]
      [Rentang D··········································]
    [Rentang C········································]
         [Rentang E·······]        [Rentang F··] [Rentang G··] [Rentang H··]

Jejak

Antarmuka Tracer menyediakan metode startSpan untuk membuat rentang, metode Extract untuk mengekstrak konteks, dan metode Inject untuk menyuntikkan konteks. Antarmuka Tracer menyediakan kemampuan berikut:

  • Buat rentang atau atur properti rentang.

    /** Buat dan mulai rentang. Lalu, kembalikan rentang. Rentang berisi nama operasi dan opsi yang ditentukan.
    ** Contoh: 
    **    Buat rentang yang tidak memiliki rentang induk.
    **    sp := tracer.StartSpan("GetFeed")
    **    Buat rentang yang memiliki rentang induk.
    **    sp := tracer.StartSpan("GetFeed",opentracing.ChildOf(parentSpan.Context()))
    **/
    StartSpan(operationName string, opts ...StartSpanOption) Span

    Setiap rentang berisi objek berikut:

    • Nama operasi, juga dikenal sebagai nama rentang.
    • Cap waktu mulai.
    • Cap waktu selesai.
    • Koleksi tag rentang. Setiap tag adalah pasangan nilai-kunci. Dalam pasangan nilai-kunci, kuncinya harus berupa string, sedangkan nilainya bisa berupa string, nilai Boolean, atau nilai numerik.
    • Koleksi log rentang. Setiap log terdiri dari pasangan nilai-kunci dan cap waktu. Dalam pasangan nilai-kunci, kuncinya harus berupa string, sedangkan nilainya dapat berupa tipe apa pun.
    • SpanContext. Setiap SpanContext membawa data status berikut:
      • Data status yang mengidentifikasi rentang, seperti ID jejak dan ID rentang. Implementasi OpenTracing bergantung pada rentang yang berbeda untuk mentransmisikan status jejak saat ini melewati batas proses.
      • Item baggage yang merupakan pasangan nilai-kunci yang termasuk dalam jejak. Pasangan nilai-kunci ini juga harus ditransmisikan melewati batas proses.
    • Referensi yang menunjukkan hubungan antar rentang. Referensi dapat mencakup nol atau beberapa rentang terkait. Rentang tersebut menetapkan hubungan berdasarkan SpanContext.
  • Suntikkan data.

    Untuk menyuntikkan data, ikuti langkah-langkah berikut:

    1. Ekstrak SpanContext dari carrier.

      // Inject() mengambil instance `sm` SpanContext dan menyuntikkannya untuk
      // propagasi dalam `carrier`. Tipe aktual dari `carrier` bergantung pada
      // nilai dari `format`.
      /** Ekstrak SpanContext, termasuk ID jejak, ID rentang, dan item baggage, dari carrier berdasarkan parameter format.
      ** Contoh: 
      **  carrier := opentracing.HTTPHeadersCarrier(httpReq.Header)
      **  clientContext, err := tracer.Extract(opentracing.HTTPHeaders, carrier)
      **/
      Extract(format interface{}, carrier interface{}) (SpanContext, error)
    2. Suntikkan SpanContext ke dalam carrier.

      /**
      ** Suntikkan SpanContext, termasuk ID jejak, ID rentang, dan item baggage, ke dalam carrier berdasarkan parameter format.
      ** Contoh: 
      ** carrier := opentracing.HTTPHeadersCarrier(httpReq.Header)
      ** err := tracer.Inject(span.Context(), opentracing.HTTPHeaders, carrier)
      **/
      Inject(sm SpanContext, format interface{}, carrier interface{}) error

Bagaimana cara melaporkan data?

Gambar berikut menunjukkan cara melaporkan data tanpa menggunakan agen.

Gambar 3. Laporkan Data Secara Langsung不通过Jaeger Agent而直接上报

Gambar berikut menunjukkan cara melaporkan data dengan menggunakan agen.

Gambar 4. Laporkan Data dengan Menggunakan Agen通过Jaeger Agent上报数据