49. Sampling
In distributed tracing the data volumes can be very high so sampling can be important (you usually don’t need to export all spans to get a good picture of what is happening). Spring Cloud Sleuth has a Sampler
strategy that you can implement to take control of the sampling algorithm. Samplers do not stop span (correlation) ids from being generated, but they do prevent the tags and events being attached and exported. By default you get a strategy that continues to trace if a span is already active, but new ones are always marked as non-exportable. If all your apps run with this sampler you will see traces in logs, but not in any remote store. For testing the default is often enough, and it probably is all you need if you are only using the logs (e.g. with an ELK aggregator). If you are exporting span data to Zipkin or Spring Cloud Stream, there is also an AlwaysSampler
that exports everything and a PercentageBasedSampler
that samples a fixed fraction of spans.
the
PercentageBasedSampler
is the default if you are usingspring-cloud-sleuth-zipkin
orspring-cloud-sleuth-stream
. You can configure the exports usingspring.sleuth.sampler.percentage
. The passed value needs to be a double from0.0
to1.0
so it’s not a percentage. For backwards compatibility reasons we’re not changing the property name.
A sampler can be installed just by creating a bean definition, e.g:
@Bean
public Sampler defaultSampler() {
return new AlwaysSampler();
}
You can set the HTTP header
X-B3-Flags
to1
or when doing messaging you can setspanFlags
header to1
. Then the current span will be forced to be exportable regardless of the sampling decision.