diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfiguration.java index eaa754c5e1..6db34e4009 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfiguration.java @@ -155,7 +155,8 @@ public class BraveAutoConfiguration { @ConditionalOnMissingBean(io.micrometer.tracing.Tracer.class) BraveTracer braveTracerBridge(brave.Tracer tracer, CurrentTraceContext currentTraceContext) { return new BraveTracer(tracer, new BraveCurrentTraceContext(currentTraceContext), - new BraveBaggageManager(this.tracingProperties.getBaggage().getTagFields())); + new BraveBaggageManager(this.tracingProperties.getBaggage().getTagFields(), + this.tracingProperties.getBaggage().getRemoteFields())); } @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BravePropagationConfigurations.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BravePropagationConfigurations.java index 974c93a86f..97bca941de 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BravePropagationConfigurations.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BravePropagationConfigurations.java @@ -91,7 +91,8 @@ class BravePropagationConfigurations { .forEach((customizer) -> customizer.customize(throwAwayBuilder)); CompositePropagationFactory propagationFactory = CompositePropagationFactory.create( this.tracingProperties.getPropagation(), - new BraveBaggageManager(this.tracingProperties.getBaggage().getTagFields()), + new BraveBaggageManager(this.tracingProperties.getBaggage().getTagFields(), + this.tracingProperties.getBaggage().getRemoteFields()), LocalBaggageFields.extractFrom(throwAwayBuilder)); FactoryBuilder builder = BaggagePropagation.newFactoryBuilder(propagationFactory); throwAwayBuilder.configs().forEach(builder::add); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfigurationTests.java index 0bc08733ff..cc9e1edf8a 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfigurationTests.java @@ -35,6 +35,9 @@ import brave.propagation.Propagation; import brave.propagation.Propagation.Factory; import brave.propagation.TraceContext; import brave.sampler.Sampler; +import io.micrometer.observation.Observation; +import io.micrometer.observation.Observation.Scope; +import io.micrometer.observation.ObservationRegistry; import io.micrometer.tracing.brave.bridge.BraveBaggageManager; import io.micrometer.tracing.brave.bridge.BraveSpanCustomizer; import io.micrometer.tracing.brave.bridge.BraveTracer; @@ -47,6 +50,7 @@ import org.assertj.core.api.Assertions; import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.Test; +import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.tracing.BraveAutoConfigurationTests.SpanHandlerConfiguration.AdditionalSpanHandler; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.context.properties.IncompatibleConfigurationException; @@ -364,6 +368,29 @@ class BraveAutoConfigurationTests { }); } + @Test + void keysAreSetInBaggage() { + this.contextRunner + .withConfiguration( + AutoConfigurations.of(ObservationAutoConfiguration.class, MicrometerTracingAutoConfiguration.class)) + .withPropertyValues("management.tracing.baggage.remote-fields=f1,f2") + .run((context) -> { + BraveTracer braveTracer = context.getBean(BraveTracer.class); + ObservationRegistry observationRegistry = context.getBean(ObservationRegistry.class); + Observation observation = Observation.start("o1", observationRegistry) + .lowCardinalityKeyValue("f1", "v1") + .highCardinalityKeyValue("f2", "v2"); + Map baggage = braveTracer.getAllBaggage(); + assertThat(baggage).isEmpty(); + try (Scope ignore = observation.openScope()) { + baggage = braveTracer.getAllBaggage(); + assertThat(baggage).containsAllEntriesOf(Map.of("f1", "v1", "f2", "v2")); + } + baggage = braveTracer.getAllBaggage(); + assertThat(baggage).isEmpty(); + }); + } + private void injectToMap(Map map, String key, String value) { map.put(key, value); }