SampleRate تسجّل القيمة N.
بمجرد أخذ عينات من البيانات، تصبح عمليات التجميع المباشرة غير صحيحة: إذ يعيد count() عددًا من الأحداث أقل بمقدار N مما حدث فعليًا، ويصبح كل من sum() وavg() متحيزًا، كما تنحرف القيم المئينية. وتعرض لوحات المعلومات أعداد الطلبات والإنتاجية ومعدلات الأخطاء على نحو منخفض ومضلل.
يحل ClickStack هذه المشكلة باستخدام محرك استعلامات يراعي أخذ العينات. فعندما تُعدّ تعبير معدل أخذ العينات على مصدر تتبّع، يعيد منشئ الاستعلامات كتابة عمليات التجميع في SQL بحيث يزِن كل span وفقًا لمعدل أخذ العينات الخاص به — وذلك عبر لوحات المعلومات والتنبيهات وعمليات البحث المخصّصة.
آلية العمل
sampleRateExpression مُعَدًّا في مصدر التتبّع، يغلّفه ClickStack على النحو التالي:
SampleRate قيمة وزن افتراضية قدرها 1، لذا تعطي البيانات غير الخاضعة لأخذ العينات النتائج نفسها التي تعطيها الاستعلامات الأصلية.
ثم يعيد منشئ الاستعلامات صياغة عمليات التجميع:
| التجميع | قبل | بعد (مصحح وفق أخذ العينات) |
|---|---|---|
| count | count() | sum(weight) |
| count + condition | countIf(cond) | sumIf(weight, cond) |
| avg | avg(col) | sum(col * weight) / sum(weight) |
| sum | sum(col) | sum(col * weight) |
| quantile(p) | quantile(p)(col) | quantileTDigestWeighted(p)(col, weight) |
| min / max | دون تغيير | دون تغيير |
| count_distinct | دون تغيير | دون تغيير |
تستخدم المئينات مع أخذ العينات
quantileTDigestWeighted، وهو ملخّص T-Digest تقريبي. النتائج متقاربة لكنها ليست مطابقة تمامًا.تهيئة تعبير معدل أخذ العينات
span في حقل تعبير معدل أخذ العينات.
على سبيل المثال، إذا كان معالج tail-sampling في OpenTelemetry يكتب المعدل في SpanAttributes['SampleRate']:
بعد إتمام التهيئة، ستطبّق جميع المخططات ولوحات المعلومات والتنبيهات ولوحات معلومات الخدمة تلقائيًا عمليات التجميع الموزونة وفق معدل أخذ العينات. ولا حاجة إلى أي تغييرات في الاستعلامات الفردية.