基于操作的采样
介绍
基于操作的采样(Operation-based Sampling)是Jaeger中的一种高级采样策略,它允许你根据不同的操作(如API端点、服务方法等)设置不同的采样率。这种策略特别适用于微服务架构,其中某些关键操作可能需要100%采样,而其他非关键操作可以降低采样频率以节省资源。
为什么需要基于操作的采样?
在分布式系统中:
- 高频操作(如健康检查)会产生大量追踪数据
- 关键业务操作(如支付流程)需要完整追踪
- 不同操作可能有不同的调试需求
传统统一采样策略无法满足这些差异化需求,而基于操作的采样提供了细粒度控制。
基本配置
Jaeger通过采样器配置文件实现基于操作的采样。以下是一个基础示例:
json
{
"service_strategies": [
{
"service": "payment-service",
"operation_strategies": [
{
"operation": "/api/payment",
"probabilistic": 1.0
},
{
"operation": "/api/status",
"probabilistic": 0.01
}
]
}
],
"default_strategy": {
"probabilistic": 0.1
}
}
配置说明
service_strategies
: 按服务定义策略operation_strategies
: 服务内的操作特定策略default_strategy
: 未匹配操作的默认策略
策略类型
Jaeger支持多种采样策略组合使用:
-
概率采样(Probabilistic)
json{ "probabilistic": 0.5 }
表示50%的请求会被采样
-
速率限制(Rate Limiting)
json{ "rate_limiting": 10 }
每秒最多采样10个请求
-
复合策略(Combined)
json{
"operation": "/api/search",
"probabilistic": 0.8,
"rate_limiting": 100
}
实际案例:电商平台采样策略
假设我们有一个电商平台,包含以下服务:
对应的采样配置可能是:
json
{
"service_strategies": [
{
"service": "product-service",
"operation_strategies": [
{
"operation": "/api/products/search",
"probabilistic": 0.2
},
{
"operation": "/api/products/{id}",
"probabilistic": 0.5
}
]
},
{
"service": "payment-service",
"operation_strategies": [
{
"operation": "/api/payment/process",
"probabilistic": 1.0
}
]
}
],
"default_strategy": {
"probabilistic": 0.1
}
}
实际考虑
- 支付流程需要100%采样用于审计
- 产品搜索可以降低采样率(高频但低价值)
- 单个产品查询保持中等采样率
动态加载配置
在生产环境中,你可能需要动态更新采样策略而不重启服务。Jaeger客户端支持通过HTTP端点获取配置:
go
import (
"github.com/jaegertracing/jaeger-client-go/config"
"github.com/jaegertracing/jaeger-client-go"
)
func main() {
cfg := config.Configuration{
Sampler: &config.SamplerConfig{
Type: "remote",
SamplingServerURL: "http://jaeger-agent:5778/sampling",
},
}
tracer, closer, _ := cfg.NewTracer()
defer closer.Close()
}
最佳实践
- 关键路径全采样:支付、订单创建等关键业务
- 高频操作低采样:健康检查、状态监控
- 开发环境差异:开发环境可提高采样率
- 监控采样效果:定期检查采样数据是否满足需求
注意事项
- 过高采样率会影响系统性能
- 过低采样率可能导致重要追踪丢失
- 确保采样策略与业务需求对齐
总结
基于操作的采样提供了:
- 按操作类型的细粒度控制
- 关键业务的高保真追踪
- 系统资源的合理利用
扩展学习
- 尝试为你的服务配置不同的操作采样策略
- 使用Jaeger UI比较不同采样率的效果
- 阅读Jaeger官方文档中的采样策略章节