Перейти к основному содержанию
Сервисы с высокой пропускной способностью могут генерировать миллионы спанов в секунду. Хранить каждый спан дорого, поэтому команды обычно используют процессор tail-sampling в OpenTelemetry Collector, чтобы сохранять только один из N спанов. Каждый сохранённый спан содержит атрибут SampleRate, в котором записано значение N. После сэмплирования данных наивные агрегации дают неверный результат: count() возвращает в N раз меньше событий, чем произошло на самом деле, sum() и avg() оказываются смещёнными, а процентильные значения сдвигаются. Панели мониторинга показывают заниженные значения числа запросов, пропускной способности и частоты ошибок, что вводит в заблуждение. ClickStack решает эту проблему с помощью движка запросов, учитывающего сэмплирование. Когда вы настраиваете выражение коэффициента выборки для источника трассировки, конструктор запросов переписывает SQL-агрегации так, чтобы вес каждого спана учитывался по его коэффициенту выборки — в панелях мониторинга, оповещениях и ad-hoc поисковых запросах.

Как это работает

Когда для источника трассировки задан sampleRateExpression, ClickStack оборачивает его в следующую конструкцию:
greatest(toUInt64OrZero(toString(expr)), 1)
Для спанов без атрибута SampleRate по умолчанию назначается вес 1, поэтому данные без сэмплирования дают те же результаты, что и исходные запросы. Затем конструктор запросов переписывает агрегации:
AggregationBeforeAfter (sample-corrected)
countcount()sum(weight)
count + conditioncountIf(cond)sumIf(weight, cond)
avgavg(col)sum(col * weight) / sum(weight)
sumsum(col)sum(col * weight)
quantile(p)quantile(p)(col)quantileTDigestWeighted(p)(col, weight)
min / maxunchangedunchanged
count_distinctunchangedunchanged
Для перцентилей при сэмплировании используется quantileTDigestWeighted — приблизительный эскиз T-Digest. Результаты близки к точным, но не совпадают с ними полностью.

Настройка выражения коэффициента выборки

Откройте источник трассировки в Source Settings и в поле Sample Rate Expression введите выражение ClickHouse, которое вычисляет коэффициент выборки для каждого span. Например, если ваш процессор tail-sampling OpenTelemetry записывает это значение в SpanAttributes['SampleRate']: После настройки все графики, панели мониторинга, оповещения и панели мониторинга сервисов автоматически применяют агрегации с учетом коэффициента выборки. Изменять отдельные запросы не нужно.
Последнее изменение 10 июня 2026 г.