跳到主要内容

常量采样器

什么是常量采样器?

常量采样器(Constant Sampler)是Jaeger分布式追踪系统中最简单的采样策略之一。它的核心特点是始终返回固定的采样决策,要么对所有请求采样(true),要么完全不采样(false)。这种策略适用于测试环境或对采样率有严格要求的场景。

关键特性
  • 非概率性:决策完全由预定义值决定
  • 零开销:不需要运行时计算
  • 确定性结果:相同配置下所有请求得到相同处理

工作原理

常量采样器通过简单的布尔逻辑工作:

配置方式

基础配置示例

在Jaeger客户端中配置常量采样器(以Go语言为例):

go
import (
"github.com/uber/jaeger-client-go/config"
)

func main() {
cfg := config.Configuration{
Sampler: &config.SamplerConfig{
Type: "const", // 指定常量采样器
Param: 1, // 1=true(采样),0=false(不采样)
},
}
// 初始化追踪器...
}

参数说明

参数效果
Type"const"指定使用常量采样器
Param1采样所有请求
Param0不采样任何请求

实际应用场景

场景1:开发环境调试

go
// 开发环境配置:采样所有请求
devConfig := &config.SamplerConfig{
Type: "const",
Param: 1,
}

为什么有用:开发时需要查看所有请求的完整追踪路径。

场景2:性能测试

go
// 压测环境配置:关闭采样
perfConfig := &config.SamplerConfig{
Type: "const",
Param: 0,
}

优势:避免采样开销影响性能测试结果准确性。

生产环境注意事项

常量采样器在生产环境中使用时:

  • 设为true可能导致存储爆炸
  • 设为false会丢失所有监控数据
  • 通常建议结合动态采样策略使用

与其他采样器对比

采样器类型是否动态计算开销适用场景
常量测试/调试
概率常规生产
限流高负载系统
自适应智能采样

常见问题解答

Q: 常量采样会降低系统性能吗?

A: 当设为true时,会增加存储和网络开销,但采样决策本身没有计算成本。

Q: 如何临时修改采样策略?

bash
# 通过环境变量动态覆盖(Jaeger客户端支持)
JAEGER_SAMPLER_TYPE=const JAEGER_SAMPLER_PARAM=0 go run main.go

总结

常量采样器作为Jaeger中最基础的采样策略:

  • ✅ 优点:配置简单、零计算开销、结果确定
  • ❌ 缺点:缺乏灵活性
  • 🏆 最佳实践:适合非生产环境或明确知道采样需求的场景