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-zipkinspring-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 都将被强制导出。