49. 采样
在分布式跟踪中,数据量可能非常高,因此采样非常重要(通常不需要 export 所有 spans 来了解正在发生的事情)。 Spring Cloud Sleuth 有一个Sampler
策略,您可以实现该策略来控制采样算法。采样器不会阻止生成 span(相关)ID,但它们会阻止标记和 events 的连接和导出。默认情况下,如果 span 已经 active,则会获得一个继续跟踪的策略,但新的策略始终标记为 non-exportable。如果您使用此采样器运行所有应用程序,则会在日志中看到跟踪,但不会在任何 remote store 中看到跟踪。对于测试,默认值通常就足够了,如果您只使用日志(e.g. 与 ELK 聚合器),则可能只需要它。如果要将 span 数据导出到 Zipkin 或 Spring Cloud Stream,还有AlwaysSampler
导出所有内容,PercentageBasedSampler
导出 samples 固定部分的 spans。
如果使用
spring-cloud-sleuth-zipkin
或spring-cloud-sleuth-stream
,则PercentageBasedSampler
是默认值。您可以使用spring.sleuth.sampler.percentage
配置导出。传递的 value 需要是从0.0
到_6 的 double,因此它不是百分比。出于向后兼容性原因,我们不会更改 property name。
可以通过 creating bean 定义 e.g 来安装采样器:
@Bean
public Sampler defaultSampler() {
return new AlwaysSampler();
}
您可以将 HTTP 标头
X-B3-Flags
设置为1
,或者在进行消息传递时,您可以将spanFlags
标头设置为1
。然后,无论采样决定如何,当前的 span 都将被强制导出。