Dokumen ini memperkenalkan konsep pengambilan sampel, yang mengacu pada apakah data untuk span dikirim ke Cloud Trace. Jika data untuk span dikirim ke Cloud Trace, span tersebut akan diambil sampelnya. Jika data untuk setiap span dalam rekaman aktivitas dicatat, rekaman aktivitas akan selesai. Namun, rekaman aktivitas sering kali memiliki span yang tidak ada karena setiap komponen yang diinstrumentasi dalam sistem pelacakan terdistribusi secara independen memutuskan apakah akan mencatat span yang diproses atau tidak.
Meskipun setiap komponen membuat keputusannya sendiri terkait apakah span yang diprosesnya diambil sampelnya atau tidak, keputusan tersebut dapat dipengaruhi oleh keputusan pengambilan sampel induk. Misalnya, asumsikan setiap komponen memiliki aturan yang menyatakan "jika span induk diambil sampelnya, ambil sampel span saat ini; jika tidak, ambil sampel 50% span". Dalam skenario ini, hal berikut berlaku:
- Span root menentukan apakah semua span dalam rekaman aktivitas diambil sampelnya.
- Jika span root diambil sampelnya, semua span dalam rekaman aktivitas akan diambil sampelnya. Oleh karena itu, rekaman aktivitas akan selesai.
Komponen dapat meneruskan keputusan pengambilan sampelnya ke turunan menggunakan konteks.
Misalnya, di header World Wide Web Consortium (W3C)
traceparent,
flag sampled menyimpan keputusan pengambilan sampel induk.
Jangan bingung antara pengambilan sampel dan propagasi konteks. Pengambilan sampel mengacu pada apakah komponen mencatat data tentang span. Propagasi konteks mengacu pada apakah informasi tentang span, seperti ID span, diteruskan ke komponen turunan.
Strategi pengambilan sampel
Keputusan pengambilan sampel dapat berbasis head atau berbasis tail. Dalam pengambilan sampel berbasis head, keputusan pengambilan sampel dibuat saat permintaan diterima oleh komponen yang memproses span. Dalam pengambilan sampel berbasis tail, keputusan pengambilan sampel ditunda hingga seluruh rekaman aktivitas tersedia.
Anda mungkin menemukan frasa "pengambilan sampel 100%" dalam dokumentasi untuk sistem pelacakan terdistribusi. Frasa ini mungkin berlaku untuk rekaman aktivitas atau untuk komponen. Jika diterapkan ke rekaman aktivitas, artinya semua span telah diambil sampelnya, atau setara dengan rekaman aktivitas yang selesai. Jika diterapkan ke komponen, artinya komponen mengambil sampel setiap span yang diprosesnya.
Pengambilan sampel berbasis head
Pengambil sampel berbasis head biasanya dikonfigurasi untuk selalu mengambil sampel span atau menggunakan strategi pengambilan sampel probabilistik:
Dengan konfigurasi selalu ambil sampel, semua komponen yang melayani span dan yang dapat menulis data rekaman aktivitas, mengambil sampel span yang diprosesnya. Idealnya, semua rekaman aktivitas selesai, sehingga Anda memiliki informasi yang diperlukan untuk memecahkan masalah kegagalan. Jenis konfigurasi ini dapat menyebabkan Anda melampaui kuota, atau batas biaya penyimpanan.
Dengan pengambilan sampel probabilistik, tidak semua span diambil sampelnya. Perilaku sebenarnya untuk pendekatan ini bergantung pada implementasi komponen. Dalam beberapa implementasi, semua span memiliki probabilitas yang sama untuk diambil sampelnya. Di implementasi lainnya, keputusan pengambilan sampel induk memengaruhi apakah span diambil sampelnya.
Rekaman aktivitas mungkin tidak berisi setiap span. Hal ini mungkin diharapkan karena penggunaan pengambilan sampel probabilistik, atau mungkin karena kuota, atau karena komponen yang memproses permintaan tetapi tidak mengambil sampel span.
Pengambilan sampel berbasis tail
Cloud Trace tidak mendukung pengambilan sampel berbasis tail; keputusan pengambilan sampel harus dibuat di komponen yang mengirim data ke Cloud Trace.
Jika ingin menggunakan pengambilan sampel berbasis tail, Anda dapat menggunakan server perantara yang menerima informasi pelacakan yang meneruskan data ke Cloud Trace setelah membuat keputusan pengambilan sampel. Misalnya, Anda dapat menggunakan OpenTelemetry Collector dengan Tail Sampling Processor untuk membuat keputusan pengambilan sampel yang tertunda.
Jika Anda berencana menggunakan pengambilan sampel tail, pertimbangkan hal berikut:
- Anda harus menyimpan semua span dalam rekaman aktivitas sebelum membuat keputusan pengambilan sampel. Oleh karena itu, Anda mungkin memerlukan ruang penyimpanan sementara yang besar atau menimbulkan overhead lainnya.
- Secara umum, semua komponen yang dapat membuat span untuk rekaman aktivitas perlu berkoordinasi. Biasanya, developer yang menggunakan OpenTelemetry merutekan semua span untuk ID rekaman aktivitas yang sama ke kolektor yang sama.
Pengambilan sampel dan Google Cloud layanan
Setiap Google Cloud layanan membuat keputusan pengambilan sampelnya sendiri, dan tidak semua Google Cloud layanan mengambil sampel. Artinya, layanan mungkin tidak pernah mengirim data ke Cloud Trace.
Jika pengambilan sampel didukung oleh suatu Google Cloud layanan, layanan tersebut biasanya mengimplementasikan hal berikut:
- Frekuensi sampel default.
- Mekanisme untuk menggunakan keputusan pengambilan sampel induk sebagai petunjuk apakah akan mengambil sampel span atau tidak.
- Frekuensi pengambilan sampel maksimum.
Untuk meminta agar layanan menambahkan dukungan untuk pengambilan sampel, gunakan Google Issue Tracker. Google Cloud
Langkah berikutnya
Untuk mengetahui diskusi tentang cara memilih strategi pengambilan sampel berdasarkan nama span, lihat Pengambilan sampel jarak jauh Jaeger.
Sebaiknya tinjau dokumentasi open source berikut untuk membantu Anda menentukan pendekatan pengambilan sampel mana yang terbaik untuk aplikasi yang sedang dikembangkan dan di-deploy:
Google Cloud Dokumentasi layanan: