SampleRate 属性,用于记录 N。
一旦数据被采样,直接做聚合就会出错:count() 返回的事件数只有实际发生数量的 1/N,sum() 和 avg() 会产生偏差,百分位数也会偏移。仪表盘上显示的请求数、吞吐量和错误率都会被误导性地压低。
ClickStack 通过具备采样感知能力的查询引擎解决了这个问题。当你在 trace 数据源上配置采样率表达式时,查询构建器会改写 SQL 聚合,让每个 span 按其采样率进行加权——这一机制适用于仪表盘、告警和即席搜索。
工作原理
sampleRateExpression 时,ClickStack 会将其封装为:
SampleRate 属性的 span 默认权重为 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 摘要结构。结果会比较接近,但并非精确值。配置采样率表达式
SpanAttributes['SampleRate']:
配置完成后,所有图表、仪表盘、告警和服务仪表盘面板都会自动应用按采样率加权的聚合。无需修改单个查询。