Pengambilan sampel trace

Pengambilan sampel rekaman aktivitas menentukan permintaan dan rentang yang di-ingest oleh Cloud Trace, sehingga membantu Anda mengontrol biaya penyimpanan dan tetap berada dalam kuota sekaligus menangkap data yang cukup untuk memecahkan masalah performa aplikasi. Saat setiap rentang dalam permintaan end-to-end direkam, rekaman aktivitas akan selesai. Namun, untuk mengelola volume permintaan yang tinggi, komponen dalam sistem pelacakan terdistribusi biasanya hanya mengambil sampel sebagian rekaman aktivitas atau mengikuti keputusan pengambilan sampel rentang induk.

Pengambilan sampel berbeda dengan propagasi konteks. Pengambilan sampel mengontrol apakah komponen merekam data rentang. Sebaliknya, propagasi konteks meneruskan ID rekaman aktivitas antar-komponen sehingga rentang yang diambil sampelnya dapat ditautkan.

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 rentang. 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 rentang telah diambil sampelnya, atau setara dengan rekaman aktivitas yang selesai. Jika diterapkan ke komponen, artinya komponen mengambil sampel setiap rentang yang diprosesnya.

Pengambilan sampel berbasis head

Pengambil sampel berbasis head biasanya dikonfigurasi untuk selalu mengambil sampel rentang atau menggunakan strategi pengambilan sampel probabilistik:

  • Dengan konfigurasi selalu ambil sampel, komponen yang memproses dan menulis data rekaman aktivitas mengambil sampel setiap rentang. Idealnya, semua rekaman aktivitas selesai, sehingga Anda memiliki informasi yang diperlukan untuk memecahkan masalah kegagalan. Namun, konfigurasi selalu ambil sampel dapat menyebabkan Anda melampaui kuota atau batas biaya penyimpanan.

  • Dengan pengambilan sampel probabilistik, tidak semua rentang diambil sampelnya. Perilaku sebenarnya untuk pendekatan ini bergantung pada implementasi komponen. Dalam beberapa implementasi, semua rentang memiliki probabilitas yang sama untuk diambil sampelnya. Di implementasi lainnya, keputusan pengambilan sampel induk memengaruhi apakah rentang diambil sampelnya.

Rekaman aktivitas mungkin tidak berisi setiap rentang. Jika Anda menggunakan pengambilan sampel probabilistik , melampaui kuota, atau menggunakan komponen yang memproses tetapi tidak mengambil sampel rentang, rekaman aktivitas yang tidak lengkap akan terjadi.

Pengambilan sampel berbasis tail

Cloud Trace tidak mendukung pengambilan sampel berbasis tail; keputusan pengambilan sampel harus dibuat di komponen yang mengirimkan data ke Cloud Trace.

Jika menggunakan pengambilan sampel berbasis tail, Anda juga dapat menggunakan server perantara untuk menerima data rekaman aktivitas, mengevaluasi keputusan pengambilan sampel, dan meneruskan rentang yang diambil sampelnya ke Trace. 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 rentang dalam rekaman aktivitas sebelum membuat keputusan pengambilan sampel. Oleh karena itu, Anda mungkin memerlukan penyimpanan sementara yang besar atau dikenai overhead lainnya.
  • Secara umum, semua komponen yang dapat membuat rentang untuk rekaman aktivitas perlu berkoordinasi. Biasanya, developer yang menggunakan OpenTelemetry merutekan semua rentang untuk ID rekaman aktivitas yang sama ke kolektor yang sama.

Komponen membuat keputusan pengambilan sampel

Setiap komponen membuat keputusannya sendiri tentang apakah akan mengambil sampel rentang yang diprosesnya. Namun, keputusan pengambilan sampel induk, yang mungkin tersedia untuk komponen melalui konteks rekaman aktivitas, dapat memengaruhi keputusan komponen. Aplikasi yang menggunakan header traceparent dapat meneruskan keputusan pengambilan sampel induk menggunakan flag sampled.

Misalnya, asumsikan setiap komponen memiliki aturan yang menyatakan "jika rentang induk diambil sampelnya, ambil sampel rentang saat ini; jika tidak, ambil sampel 50% rentang". Dalam skenario ini, hal berikut berlaku:

  • Rentang root menentukan apakah semua rentang dalam rekaman aktivitas diambil sampelnya.
  • Saat rentang root diambil sampelnya, semua rentang dalam rekaman aktivitas akan diambil sampelnya. Oleh karena itu, rekaman aktivitas akan selesai.

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 mengirimkan data ke Cloud Trace.

Jika pengambilan sampel didukung oleh suatu Google Cloud layanan, layanan tersebut biasanya mengimplementasikan hal berikut:

  • Frekuensi pengambilan sampel default.
  • Mekanisme untuk menggunakan keputusan pengambilan sampel induk sebagai petunjuk tentang apakah akan mengambil sampel rentang.
  • Frekuensi pengambilan sampel maksimum.

Untuk meminta agar Google Cloud layanan menambahkan dukungan untuk pengambilan sampel, gunakan Google Issue Tracker.

Langkah berikutnya