Dokumen ini memperkenalkan konsep sampling, yang mengacu pada apakah data untuk span dikirim ke Cloud Trace. Saat data untuk span dikirim ke Cloud Trace, span tersebut akan dipilih sampelnya. Jika data untuk setiap span dalam rekaman aktivitas dicatat, rekaman aktivitas akan selesai. Namun, rekaman aktivitas sering kali tidak memiliki span karena setiap komponen berinstrumen dalam sistem pelacakan terdistribusi secara independen memutuskan apakah akan mencatat atau tidak span yang sedang diproses.
Meskipun setiap komponen membuat keputusannya sendiri tentang apakah span yang sedang diproses diambil sampelnya, keputusan tersebut dapat dipengaruhi oleh keputusan sampling 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.
- Saat span root diambil sampelnya, semua span dalam rekaman aktivitas akan diambil sampelnya. Oleh karena itu, rekaman aktivitas selesai.
Komponen dapat meneruskan keputusan sampling ke turunan menggunakan konteks.
Misalnya, di header traceparent
World Wide Web Consortium (W3C),
flag sampled
menyimpan keputusan sampling induk.
Jangan salah mengartikan sampling dengan penyebaran konteks. Sampling mengacu pada apakah komponen mencatat data tentang span. Penyebaran konteks mengacu pada apakah informasi tentang span, seperti ID span, diteruskan ke komponen turunan.
Strategi sampling
Keputusan pengambilan sampel dapat berbasis head atau tail. Dalam sampling berbasis header, keputusan sampling dibuat saat permintaan diterima oleh komponen yang memproses span. Dalam sampling berbasis akhir, keputusan sampling ditunda hingga setelah seluruh rekaman aktivitas tersedia.
Anda mungkin menemukan frasa "sampling 100%" dalam dokumentasi untuk sistem pelacakan terdistribusi. Frasa ini mungkin berlaku untuk rekaman aktivitas atau komponen. Jika diterapkan ke rekaman aktivitas, artinya semua span telah diambil sampelnya, atau sama saja, rekaman aktivitas telah selesai. Jika diterapkan ke komponen, artinya komponen mengambil sampel setiap span yang diprosesnya.
Pengambilan sampel berbasis kepala
Pengambil sampel berbasis header biasanya dikonfigurasi untuk selalu mengambil sampel span atau menggunakan strategi sampling probabilistik:
Dengan konfigurasi always sample, semua komponen yang melayani span dan yang dapat menulis data rekaman aktivitas, akan mengambil sampel span yang diproses. Idealnya, semua rekaman aktivitas sudah lengkap, sehingga Anda memiliki informasi yang diperlukan untuk memecahkan masalah kegagalan. Jenis konfigurasi ini dapat menyebabkan Anda melampaui kuota, atau batas biaya penyimpanan.
Dengan sampling 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 kasus lain, keputusan pengambilan sampel induk memengaruhi apakah span diambil sampelnya.
Rekaman aktivitas mungkin tidak berisi setiap span. Hal ini mungkin terjadi karena penggunaan sampling probabilistik, atau mungkin karena kuota, atau komponen yang memproses permintaan, tetapi tidak mengambil sampel span.
Sampling berbasis tail
Cloud Trace tidak mendukung sampling berbasis ekor; keputusan sampling harus dibuat di komponen yang mengirim data ke Cloud Trace.
Jika ingin menggunakan sampling berbasis tail, Anda dapat menggunakan server perantara yang menerima informasi pelacakan yang meneruskan data ke Cloud Trace setelah membuat keputusan sampling. Misalnya, Anda dapat menggunakan OpenTelemetry Collector dengan Tail Sampling Processor untuk membuat keputusan sampling yang tertunda.
Jika Anda berencana menggunakan sampling ekor, pertimbangkan hal berikut:
- Anda harus menyimpan semua span dalam rekaman aktivitas sebelum membuat keputusan sampling. Oleh karena itu, Anda mungkin memerlukan penyimpanan sementara dalam jumlah besar atau menimbulkan overhead lainnya.
- Secara umum, semua komponen yang dapat menghasilkan span untuk rekaman aktivitas harus berkoordinasi. Biasanya, developer yang menggunakan OpenTelemetry merutekan semua span untuk ID rekaman aktivitas yang sama ke kolektor yang sama.
Sampling dan layanan Google Cloud
Setiap layanan Google Cloud membuat keputusan samplingnya sendiri, dan tidak semua layanan Google Cloud mengambil sampel. Artinya, layanan mungkin tidak pernah mengirim data ke Cloud Trace.
Jika pengambilan sampel didukung oleh layanan Google Cloud, layanan tersebut biasanya menerapkan hal berikut:
- Frekuensi sampel default.
- Mekanisme untuk menggunakan keputusan sampling induk sebagai petunjuk tentang apakah akan mengambil sampel span atau tidak.
- Frekuensi sampling maksimum.
Untuk meminta layanan Google Cloud menambahkan dukungan untuk pengambilan sampel, gunakan Pelacak Masalah Google.
Langkah selanjutnya
Untuk diskusi tentang cara memilih strategi sampling berdasarkan nama span, lihat Sampling jarak jauh Jaeger.
Sebaiknya tinjau dokumentasi open source berikut untuk membantu Anda menentukan pendekatan sampling yang paling cocok untuk aplikasi yang sedang dikembangkan dan di-deploy:
Dokumentasi layanan Google Cloud: