diff --git a/docs/src/main/asciidoc/spring-cloud-sleuth.adoc b/docs/src/main/asciidoc/spring-cloud-sleuth.adoc index 8ebe20bd1..95d421a06 100644 --- a/docs/src/main/asciidoc/spring-cloud-sleuth.adoc +++ b/docs/src/main/asciidoc/spring-cloud-sleuth.adoc @@ -456,6 +456,9 @@ baggage and propagation keys. E.g. `spring.sleuth.log.slf4j.whitelisted-mdc-keys IMPORTANT: Remember that adding entries to MDC can drastically decrease the performance of your application! +If you want to add the baggage entries as tags, to make it possible to search for spans via the baggage entries, you can set the value of +`spring.sleuth.propagation.tag.whitelisted-keys` with a list of whitelisted baggage keys. To disable the feature you have to pass the `spring.sleuth.propagation.tag.enabled=false` property. + ==== Extracting a Propagated Context The `TraceContext.Extractor` reads trace identifiers and sampling status from an incoming request or message. diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfiguration.java index c4afef86d..d2fa079d9 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; public class SleuthTagPropagationAutoConfiguration { @Configuration - @ConditionalOnProperty(value = "spring.sleuth.propagation.tag.enabled") + @ConditionalOnProperty(value = "spring.sleuth.propagation.tag.enabled", matchIfMissing = true) @EnableConfigurationProperties(SleuthTagPropagationProperties.class) protected static class TagPropagationConfiguration { diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationProperties.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationProperties.java index 46fec947b..c81319e90 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationProperties.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationProperties.java @@ -16,11 +16,11 @@ package org.springframework.cloud.sleuth.propagation; -import org.springframework.boot.context.properties.ConfigurationProperties; - import java.util.ArrayList; import java.util.List; +import org.springframework.boot.context.properties.ConfigurationProperties; + /** * Configuration properties of tag propagation. * @@ -50,7 +50,7 @@ public class SleuthTagPropagationProperties { } public List getWhitelistedKeys() { - return whitelistedKeys; + return this.whitelistedKeys; } public void setWhitelistedKeys(List whitelistedKeys) { diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandler.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandler.java index b550c4068..3e0899a56 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandler.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandler.java @@ -16,15 +16,16 @@ package org.springframework.cloud.sleuth.propagation; +import java.util.AbstractMap; +import java.util.Collection; +import java.util.stream.Stream; + import brave.handler.FinishedSpanHandler; import brave.handler.MutableSpan; import brave.propagation.ExtraFieldPropagation; import brave.propagation.TraceContext; -import org.springframework.cloud.sleuth.autoconfig.SleuthProperties; -import java.util.AbstractMap; -import java.util.Collection; -import java.util.stream.Stream; +import org.springframework.cloud.sleuth.autoconfig.SleuthProperties; import static java.util.Objects.nonNull; @@ -49,7 +50,7 @@ public class TagPropagationFinishedSpanHandler extends FinishedSpanHandler { @Override public boolean handle(TraceContext context, MutableSpan span) { - Stream.of(sleuthProperties.getBaggageKeys(), sleuthProperties.getPropagationKeys()) + Stream.of(this.sleuthProperties.getBaggageKeys(), this.sleuthProperties.getPropagationKeys()) .flatMap(Collection::stream) .filter(key -> this.tagPropagationProperties.getWhitelistedKeys().contains(key)) .map(baggageItemKey -> new AbstractMap.SimpleEntry<>(baggageItemKey, diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfigurationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfigurationTests.java index c999bb74d..b3f4a5b99 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfigurationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/SleuthTagPropagationAutoConfigurationTests.java @@ -37,8 +37,10 @@ public class SleuthTagPropagationAutoConfigurationTests { } @Test - public void shouldNotCreateHandlerByDefault() { + public void shouldNotCreateHandlerByDisablingIt() { this.contextRunner + .withPropertyValues("spring.sleuth.propagation.tag.whitelisted-keys=some-key") + .withPropertyValues("spring.sleuth.propagation.tag.enabled=false") .withUserConfiguration(TraceAutoConfiguration.class) .run((context) -> { assertThat(context).doesNotHaveBean(TagPropagationFinishedSpanHandler.class); @@ -46,9 +48,8 @@ public class SleuthTagPropagationAutoConfigurationTests { } @Test - public void shouldCreateHandlerWhenEnabled() { + public void shouldCreateHandler() { this.contextRunner - .withPropertyValues("spring.sleuth.propagation.tag.enabled=true") .withPropertyValues("spring.sleuth.propagation.tag.whitelisted-keys=some-key") .withUserConfiguration(TraceAutoConfiguration.class) .run((context) -> { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandlerTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandlerTest.java index 01428020b..8c36c9185 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandlerTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/propagation/TagPropagationFinishedSpanHandlerTest.java @@ -15,6 +15,9 @@ */ package org.springframework.cloud.sleuth.propagation; +import java.util.List; +import java.util.Map; + import brave.ScopedSpan; import brave.Tracer; import brave.propagation.ExtraFieldPropagation; @@ -23,6 +26,7 @@ import brave.sampler.Sampler; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; @@ -31,9 +35,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringRunner; -import java.util.List; -import java.util.Map; - import static org.assertj.core.api.Assertions.assertThat; /** @@ -63,9 +64,9 @@ public class TagPropagationFinishedSpanHandlerTest { @Before public void setUp() { - arrayListSpanReporter.clear(); - span = tracer.startScopedSpan("my-scoped-span"); - TraceContext context = span.context(); + this.arrayListSpanReporter.clear(); + this.span = this.tracer.startScopedSpan("my-scoped-span"); + TraceContext context = this.span.context(); ExtraFieldPropagation.set(context, BAGGAGE_KEY, BAGGAGE_VALUE); ExtraFieldPropagation.set(context, PROPAGATION_KEY, PROPAGATION_VALUE); ExtraFieldPropagation.set(context, "others-propagation", "some value"); @@ -73,9 +74,9 @@ public class TagPropagationFinishedSpanHandlerTest { @Test public void shouldReportWithBaggageInTags() { - span.finish(); + this.span.finish(); - List spans = arrayListSpanReporter.getSpans(); + List spans = this.arrayListSpanReporter.getSpans(); assertThat(spans).hasSize(1); Map tags = spans.get(0).tags(); assertThat(tags).hasSize(2);