Dokumen ini memperkenalkan konsep pengambilan sampel, yang mengacu pada apakah data untuk span dikirim ke Cloud Trace. Saat data untuk suatu span dikirim ke Cloud Trace, span tersebut akan diambil sampelnya. Saat data untuk setiap span dalam trace dicatat, trace tersebut akan selesai. Namun, rekaman aktivitas sering kehilangan span karena setiap komponen yang diinstrumentasi dalam sistem pelacakan terdistribusi secara independen memutuskan apakah akan merekam span yang sedang diproses.
Meskipun setiap komponen membuat keputusannya sendiri terkait apakah rentang yang diprosesnya diambil sampelnya, keputusan tersebut dapat dipengaruhi oleh keputusan pengambilan sampel induk. Misalnya, asumsikan setiap komponen memiliki aturan yang bertuliskan "jika span induk diambil sampelnya, lalu ambil sampel span saat ini; jika tidak, ambil sampel 50% span". Dalam skenario ini, hal berikut berlaku:
- Span root menentukan apakah semua span dalam trace diambil sampelnya atau tidak.
- Jika span root diambil sampelnya, semua span dalam trace akan diambil sampelnya. Oleh karena itu, rekaman aktivitas sudah selesai.
Komponen dapat meneruskan keputusan pengambilan sampelnya ke turunan dengan menggunakan konteks.
Misalnya, di header traceparent
World Wide Web Consortium (W3C), flag sampled
menyimpan keputusan pengambilan sampel induk.
Jangan salah membedakan antara pengambilan sampel dengan propagasi 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 pengambilan sampel
Keputusan pengambilan sampel dapat berbasis kepala atau bagian belakang. Dalam pengambilan sampel berbasis head, keputusan pengambilan sampel dibuat saat permintaan diterima oleh komponen yang memproses span. Dalam pengambilan sampel berbasis ekor, keputusan pengambilan sampel tertunda hingga seluruh pelacakan tersedia.
Anda mungkin menemukan frasa "Pengambilan sampel 100%" dalam dokumentasi untuk sistem pelacakan terdistribusi. Frasa ini mungkin berlaku untuk rekaman aktivitas atau komponen. Jika diterapkan ke rekaman aktivitas, ini berarti semua span telah diambil sampelnya, atau setara, bahwa trace tersebut selesai. Jika diterapkan pada komponen, artinya komponen mengambil sampel setiap span yang diproses.
Pengambilan sampel berbasis kepala
Sampel berbasis head biasanya dikonfigurasi untuk selalu mengambil sampel span atau menggunakan strategi pengambilan sampel probabilistik:
Dengan konfigurasi selalu ambil sampel, semua komponen yang mencakup layanan dan yang dapat menulis data rekaman aktivitas, ambil sampel span yang diproses. Idealnya, semua rekaman aktivitas lengkap, sehingga Anda memiliki informasi yang diperlukan untuk memecahkan masalah kegagalan. Jenis konfigurasi ini dapat menyebabkan Anda melebihi quotas, atau batas biaya penyimpanan Anda.
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. Pada kasus lain, keputusan pengambilan sampel induk memengaruhi apakah span diambil sampelnya atau tidak.
Rekaman aktivitas mungkin tidak berisi setiap span. Hal ini mungkin disebabkan oleh penggunaan sampling probabilistik, atau mungkin disebabkan kuota, atau komponen yang memproses permintaan, tetapi tidak mengambil sampel span.
Pengambilan sampel berbasis ekor
Cloud Trace tidak mendukung pengambilan sampel berbasis ekor. Keputusan pengambilan sampel harus dibuat di komponen yang mengirim data ke Cloud Trace.
Jika ingin menggunakan pengambilan sampel berbasis ekor, 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 ekor, pertimbangkan hal berikut:
- Anda harus menyimpan semua span dalam trace sebelum membuat keputusan pengambilan sampel. Oleh karena itu, Anda mungkin memerlukan penyimpanan sementara dalam jumlah besar atau menimbulkan overhead lainnya.
- Secara umum, semua komponen yang dapat menghasilkan span untuk pelacakan harus dikoordinasikan. Biasanya, developer yang menggunakan OpenTelemetry merutekan semua span untuk ID rekaman aktivitas yang sama ke kolektor yang sama.
Sampling data dan layanan Google Cloud
Setiap layanan Google Cloud membuat keputusan pengambilan sampelnya sendiri, dan tidak semua sampel layanan Google Cloud. 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 pengambilan sampel induk sebagai petunjuk apakah akan mengambil sampel span.
- Frekuensi sampling maksimum.
Untuk meminta agar layanan Google Cloud menambahkan dukungan untuk pengambilan sampel, gunakan Issue Tracker Google.
Langkah selanjutnya
Untuk pembahasan tentang cara memilih strategi pengambilan sampel berdasarkan nama rentang, lihat Pengambilan sampel jarak jauh Jaeger.
Sebaiknya tinjau dokumentasi open source berikut untuk membantu Anda menentukan pendekatan sampling mana yang terbaik untuk aplikasi yang sedang dikembangkan dan di-deploy:
Dokumentasi layanan Google Cloud: