Auto-configure span customizer beans

Closes gh-33087
This commit is contained in:
Andy Wilkinson
2022-11-10 12:15:22 +00:00
parent e5a0b164ac
commit 5f6b63e277
4 changed files with 52 additions and 0 deletions
@@ -19,6 +19,8 @@ package org.springframework.boot.actuate.autoconfigure.tracing;
import java.util.Collections;
import java.util.List;
import brave.CurrentSpanCustomizer;
import brave.SpanCustomizer;
import brave.Tracer;
import brave.Tracing;
import brave.Tracing.Builder;
@@ -52,6 +54,7 @@ import io.micrometer.tracing.brave.bridge.BraveCurrentTraceContext;
import io.micrometer.tracing.brave.bridge.BraveHttpClientHandler;
import io.micrometer.tracing.brave.bridge.BraveHttpServerHandler;
import io.micrometer.tracing.brave.bridge.BravePropagator;
import io.micrometer.tracing.brave.bridge.BraveSpanCustomizer;
import io.micrometer.tracing.brave.bridge.BraveTracer;
import io.micrometer.tracing.brave.bridge.CompositeSpanHandler;
import io.micrometer.tracing.brave.bridge.W3CPropagation;
@@ -185,6 +188,18 @@ public class BraveAutoConfiguration {
return new BraveHttpClientHandler(httpClientHandler);
}
@Bean
@ConditionalOnMissingBean(SpanCustomizer.class)
CurrentSpanCustomizer currentSpanCustomizer(Tracing tracing) {
return CurrentSpanCustomizer.create(tracing);
}
@Bean
@ConditionalOnMissingBean(io.micrometer.tracing.SpanCustomizer.class)
BraveSpanCustomizer braveSpanCustomizer(SpanCustomizer spanCustomizer) {
return new BraveSpanCustomizer(spanCustomizer);
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(value = "management.tracing.baggage.enabled", havingValue = "false")
static class BraveNoBaggageConfiguration {
@@ -21,6 +21,7 @@ import java.util.List;
import java.util.regex.Pattern;
import io.micrometer.tracing.SamplerFunction;
import io.micrometer.tracing.SpanCustomizer;
import io.micrometer.tracing.otel.bridge.DefaultHttpClientAttributesGetter;
import io.micrometer.tracing.otel.bridge.DefaultHttpServerAttributesExtractor;
import io.micrometer.tracing.otel.bridge.EventListener;
@@ -30,6 +31,7 @@ import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext;
import io.micrometer.tracing.otel.bridge.OtelHttpClientHandler;
import io.micrometer.tracing.otel.bridge.OtelHttpServerHandler;
import io.micrometer.tracing.otel.bridge.OtelPropagator;
import io.micrometer.tracing.otel.bridge.OtelSpanCustomizer;
import io.micrometer.tracing.otel.bridge.OtelTracer;
import io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher;
import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener;
@@ -182,6 +184,12 @@ public class OpenTelemetryAutoConfiguration {
return new Slf4JEventListener();
}
@Bean
@ConditionalOnMissingBean(SpanCustomizer.class)
OtelSpanCustomizer otelSpanCustomizer() {
return new OtelSpanCustomizer();
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(prefix = "management.tracing.baggage", name = "enabled", matchIfMissing = true)
static class BaggageConfiguration {
@@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.tracing;
import java.util.Collections;
import brave.Span;
import brave.SpanCustomizer;
import brave.Tracer;
import brave.Tracing;
import brave.baggage.BaggagePropagation;
@@ -39,6 +40,7 @@ import brave.sampler.Sampler;
import io.micrometer.tracing.brave.bridge.BraveBaggageManager;
import io.micrometer.tracing.brave.bridge.BraveHttpClientHandler;
import io.micrometer.tracing.brave.bridge.BraveHttpServerHandler;
import io.micrometer.tracing.brave.bridge.BraveSpanCustomizer;
import io.micrometer.tracing.brave.bridge.BraveTracer;
import io.micrometer.tracing.brave.bridge.CompositeSpanHandler;
import io.micrometer.tracing.brave.bridge.W3CPropagation;
@@ -91,6 +93,8 @@ class BraveAutoConfigurationTests {
assertThat(context).hasSingleBean(BraveHttpServerHandler.class);
assertThat(context).hasSingleBean(BraveHttpClientHandler.class);
assertThat(context).hasSingleBean(CompositeSpanHandler.class);
assertThat(context).hasSingleBean(SpanCustomizer.class);
assertThat(context).hasSingleBean(BraveSpanCustomizer.class);
});
}
@@ -127,6 +131,10 @@ class BraveAutoConfigurationTests {
assertThat(context).hasSingleBean(HttpClientHandler.class);
assertThat(context).hasBean("customCompositeSpanHandler");
assertThat(context).hasSingleBean(CompositeSpanHandler.class);
assertThat(context).hasBean("customSpanCustomizer");
assertThat(context).hasSingleBean(SpanCustomizer.class);
assertThat(context).hasBean("customMicrometerSpanCustomizer");
assertThat(context).hasSingleBean(io.micrometer.tracing.SpanCustomizer.class);
});
}
@@ -421,6 +429,16 @@ class BraveAutoConfigurationTests {
return new CompositeSpanHandler(Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
}
@Bean
SpanCustomizer customSpanCustomizer() {
return mock(SpanCustomizer.class);
}
@Bean
io.micrometer.tracing.SpanCustomizer customMicrometerSpanCustomizer() {
return mock(io.micrometer.tracing.SpanCustomizer.class);
}
}
}
@@ -19,10 +19,12 @@ package org.springframework.boot.actuate.autoconfigure.tracing;
import java.util.Collection;
import java.util.List;
import io.micrometer.tracing.SpanCustomizer;
import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext;
import io.micrometer.tracing.otel.bridge.OtelHttpClientHandler;
import io.micrometer.tracing.otel.bridge.OtelHttpServerHandler;
import io.micrometer.tracing.otel.bridge.OtelPropagator;
import io.micrometer.tracing.otel.bridge.OtelSpanCustomizer;
import io.micrometer.tracing.otel.bridge.OtelTracer;
import io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher;
import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener;
@@ -78,6 +80,7 @@ class OpenTelemetryAutoConfigurationTests {
assertThat(context).hasSingleBean(SpanProcessor.class);
assertThat(context).hasSingleBean(OtelPropagator.class);
assertThat(context).hasSingleBean(TextMapPropagator.class);
assertThat(context).hasSingleBean(OtelSpanCustomizer.class);
});
}
@@ -100,6 +103,7 @@ class OpenTelemetryAutoConfigurationTests {
assertThat(context).doesNotHaveBean(SpanProcessor.class);
assertThat(context).doesNotHaveBean(OtelPropagator.class);
assertThat(context).doesNotHaveBean(TextMapPropagator.class);
assertThat(context).doesNotHaveBean(OtelSpanCustomizer.class);
});
}
@@ -132,6 +136,8 @@ class OpenTelemetryAutoConfigurationTests {
assertThat(context).hasSingleBean(Slf4JBaggageEventListener.class);
assertThat(context).hasBean("customOtelPropagator");
assertThat(context).hasSingleBean(OtelPropagator.class);
assertThat(context).hasBean("customSpanCustomizer");
assertThat(context).hasSingleBean(SpanCustomizer.class);
});
}
@@ -275,6 +281,11 @@ class OpenTelemetryAutoConfigurationTests {
return mock(TextMapPropagator.class);
}
@Bean
SpanCustomizer customSpanCustomizer() {
return mock(SpanCustomizer.class);
}
}
}