mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-17 12:09:16 +00:00
Allow configuring Micrometer Tracing MDC keys
See gh-50595 Signed-off-by: Phil Clay <philsttr@users.noreply.github.com>
This commit is contained in:
committed by
Moritz Halbritter
parent
7780b5fe86
commit
dc2274e5b6
+11
-1
@@ -19,6 +19,7 @@ package org.springframework.boot.micrometer.tracing.brave.autoconfigure;
|
||||
import java.util.List;
|
||||
|
||||
import brave.baggage.BaggageField;
|
||||
import brave.baggage.BaggageFields;
|
||||
import brave.baggage.BaggagePropagation;
|
||||
import brave.baggage.BaggagePropagation.FactoryBuilder;
|
||||
import brave.baggage.BaggagePropagationConfig;
|
||||
@@ -40,6 +41,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||
import org.springframework.boot.micrometer.tracing.autoconfigure.ConditionalOnEnabledTracingExport;
|
||||
import org.springframework.boot.micrometer.tracing.autoconfigure.TracingProperties;
|
||||
import org.springframework.boot.micrometer.tracing.autoconfigure.TracingProperties.Baggage.Correlation;
|
||||
import org.springframework.boot.micrometer.tracing.autoconfigure.TracingProperties.Mdc;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.Order;
|
||||
@@ -138,7 +140,15 @@ class BravePropagationConfigurations {
|
||||
@ConditionalOnMissingBean
|
||||
CorrelationScopeDecorator.Builder mdcCorrelationScopeDecoratorBuilder(
|
||||
ObjectProvider<CorrelationScopeCustomizer> correlationScopeCustomizers) {
|
||||
CorrelationScopeDecorator.Builder builder = MDCScopeDecorator.newBuilder();
|
||||
Mdc mdc = this.tracingProperties.getMdc();
|
||||
CorrelationScopeDecorator.Builder builder = MDCScopeDecorator.newBuilder()
|
||||
// Clear existing traceId/spanId backage field mappings
|
||||
// so the MDC key names can be customized below.
|
||||
// BravePropagationConfigurationsTests validates the assumption that
|
||||
// the builder only configures the trace/span id by default.
|
||||
.clear()
|
||||
.add(SingleCorrelationField.newBuilder(BaggageFields.TRACE_ID).name(mdc.getTraceIdKey()).build())
|
||||
.add(SingleCorrelationField.newBuilder(BaggageFields.SPAN_ID).name(mdc.getSpanIdKey()).build());
|
||||
correlationScopeCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
|
||||
return builder;
|
||||
}
|
||||
|
||||
+25
@@ -258,6 +258,31 @@ class BraveAutoConfigurationTests {
|
||||
.run((context) -> assertThat(context).hasBean("mdcCorrelationScopeDecoratorBuilder"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void correlationScopeDecoratorUsesDefaultMdcKeys() {
|
||||
this.contextRunner.run((context) -> {
|
||||
ScopeDecorator scopeDecorator = context.getBean(ScopeDecorator.class);
|
||||
assertThat(scopeDecorator)
|
||||
.extracting("fields", InstanceOfAssertFactories.array(SingleCorrelationField[].class))
|
||||
.extracting(SingleCorrelationField::name)
|
||||
.containsExactly("traceId", "spanId");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void correlationScopeDecoratorUsesCustomMdcKeys() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("management.tracing.mdc.trace-id-key=customTraceId",
|
||||
"management.tracing.mdc.span-id-key=customSpanId")
|
||||
.run((context) -> {
|
||||
ScopeDecorator scopeDecorator = context.getBean(ScopeDecorator.class);
|
||||
assertThat(scopeDecorator)
|
||||
.extracting("fields", InstanceOfAssertFactories.array(SingleCorrelationField[].class))
|
||||
.extracting(SingleCorrelationField::name)
|
||||
.containsExactly("customTraceId", "customSpanId");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldHave128BitTraceId() {
|
||||
this.contextRunner.run((context) -> {
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.micrometer.tracing.brave.autoconfigure;
|
||||
|
||||
import brave.baggage.BaggageFields;
|
||||
import brave.baggage.CorrelationScopeConfig.SingleCorrelationField;
|
||||
import brave.baggage.CorrelationScopeDecorator;
|
||||
import brave.context.slf4j.MDCScopeDecorator;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link BravePropagationConfigurations}.
|
||||
*/
|
||||
class BravePropagationConfigurationsTests {
|
||||
|
||||
/**
|
||||
* Validates the assumption that {@link MDCScopeDecorator#newBuilder()} only
|
||||
* configures traceId and spanId by default. The
|
||||
* {@link BravePropagationConfigurations.PropagationWithBaggage#mdcCorrelationScopeDecoratorBuilder}
|
||||
* method clears the builder's defaults and re-adds only these two fields so their MDC
|
||||
* key names can be customized. If Brave adds new default fields in the future, the
|
||||
* {@code .clear()} call in that method would silently drop them, and this test will
|
||||
* catch that.
|
||||
*/
|
||||
@Test
|
||||
void mdcScopeDecoratorBuilderShouldOnlyHaveTraceIdAndSpanIdByDefault() {
|
||||
CorrelationScopeDecorator.Builder builder = MDCScopeDecorator.newBuilder();
|
||||
assertThat(builder.configs()).extracting((config) -> ((SingleCorrelationField) config).name())
|
||||
.containsExactlyInAnyOrder(BaggageFields.TRACE_ID.name(), BaggageFields.SPAN_ID.name());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user