This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.2 by this push:
new 2324db0805 :bug:Compatible with old and new versions of micrometer
(#11922)
2324db0805 is described below
commit 2324db0805c78e684e50e542396fa04104769527
Author: songxiaosheng <[email protected]>
AuthorDate: Fri Apr 7 21:19:02 2023 +0800
:bug:Compatible with old and new versions of micrometer (#11922)
* :bug:Compatible with old and new versions of micrometer
* :bug:Compatible with old and new versions of micrometer
* :bug:Compatible with old and new versions of micrometer
* :wrench: support micrometer low version
* :wrench: support micrometer low version
* :twisted_rightwards_arrows: merge observabilit code
* :pencil2: request metrics type to counter
* 🐛Compatible with old and new versions of micrometer
* 🐛Compatible with old and new versions of micrometer
* :white_check_mark: fix metrics sample test
* :sparkles: add metrics description
---------
Co-authored-by: Albumen Kevin <[email protected]>
---
.../cluster/filter/MetricsClusterFilterTest.java | 3 +-
.../collector/sample/MethodMetricsSampler.java | 59 +++++----
.../dubbo/metrics/filter/MetricsFilterTest.java | 12 +-
.../collector/DefaultMetricsCollectorTest.java | 24 +++-
.../DubboMicrometerTracingAutoConfiguration.java | 33 ++---
.../DubboObservationAutoConfiguration.java | 64 +++++----
.../brave/BraveAutoConfiguration.java | 143 ++++++++-------------
.../otel/OpenTelemetryAutoConfiguration.java | 143 ++++++++-------------
8 files changed, 228 insertions(+), 253 deletions(-)
diff --git
a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/MetricsClusterFilterTest.java
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/MetricsClusterFilterTest.java
index fb8e46ed06..604e60b8a0 100644
---
a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/MetricsClusterFilterTest.java
+++
b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/MetricsClusterFilterTest.java
@@ -23,6 +23,7 @@ import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.metrics.collector.DefaultMetricsCollector;
import org.apache.dubbo.metrics.filter.MetricsFilter;
import org.apache.dubbo.metrics.model.MetricsKey;
+import org.apache.dubbo.metrics.model.sample.CounterMetricSample;
import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
import org.apache.dubbo.metrics.model.sample.MetricSample;
import org.apache.dubbo.rpc.Invocation;
@@ -123,7 +124,7 @@ class MetricsClusterFilterTest {
MetricSample sample = metricsMap.get(name);
- Assertions.assertSame(((GaugeMetricSample) sample).applyAsLong(),
count);
+ Assertions.assertSame(((CounterMetricSample)
sample).getValue().longValue(), count);
teardown();
}
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MethodMetricsSampler.java
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MethodMetricsSampler.java
index 6858410995..b6adaf606e 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MethodMetricsSampler.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MethodMetricsSampler.java
@@ -25,6 +25,7 @@ import org.apache.dubbo.metrics.model.MethodMetric;
import org.apache.dubbo.metrics.model.Metric;
import org.apache.dubbo.metrics.model.MetricsCategory;
import org.apache.dubbo.metrics.model.MetricsKey;
+import org.apache.dubbo.metrics.model.sample.CounterMetricSample;
import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
import org.apache.dubbo.metrics.model.sample.MetricSample;
import org.apache.dubbo.rpc.Invocation;
@@ -36,8 +37,6 @@ import java.util.function.ToDoubleFunction;
import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER_SIDE;
import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER_SIDE;
-import static org.apache.dubbo.metrics.model.MetricsCategory.REQUESTS;
-import static org.apache.dubbo.metrics.model.MetricsCategory.RT;
public class MethodMetricsSampler extends
SimpleMetricsCountSampler<Invocation, String, MethodMetric> {
@@ -59,7 +58,7 @@ public class MethodMetricsSampler extends
SimpleMetricsCountSampler<Invocation,
public void rtConfigure(
MetricsCountSampleConfigurer<Invocation, String, MethodMetric>
sampleConfigure) {
sampleConfigure.configureMetrics(configure -> new
MethodMetric(collector.getApplicationName(), configure.getSource()));
- sampleConfigure.configureEventHandler(configure ->
collector.getEventMulticaster().publishEvent( new
RTEvent(collector.getApplicationModel(),configure.getMetric(),
configure.getRt())));
+ sampleConfigure.configureEventHandler(configure ->
collector.getEventMulticaster().publishEvent(new
RTEvent(collector.getApplicationModel(), configure.getMetric(),
configure.getRt())));
}
@Override
@@ -71,7 +70,7 @@ public class MethodMetricsSampler extends
SimpleMetricsCountSampler<Invocation,
this.collectRT(new MetricSampleFactory<MethodMetric,
GaugeMetricSample<?>>() {
@Override
public <T> GaugeMetricSample<?> newInstance(MetricsKey key,
MethodMetric metric, T value, ToDoubleFunction<T> apply) {
- return getGaugeMetricSample(key, metric, RT, value, apply);
+ return createGaugeMetricSample(key, metric,
MetricsCategory.RT, value, apply);
}
}));
@@ -84,25 +83,25 @@ public class MethodMetricsSampler extends
SimpleMetricsCountSampler<Invocation,
}
private void collectBySide(List<MetricSample> list, String side) {
- count(list, MetricsEvent.Type.TOTAL.getNameByType(side),
MetricsKey.METRIC_REQUESTS);
- count(list, MetricsEvent.Type.SUCCEED.getNameByType(side),
MetricsKey.METRIC_REQUESTS_SUCCEED);
- count(list, MetricsEvent.Type.UNKNOWN_FAILED.getNameByType(side),
MetricsKey.METRIC_REQUESTS_FAILED);
- count(list, MetricsEvent.Type.PROCESSING.getNameByType(side),
MetricsKey.METRIC_REQUESTS_PROCESSING);
- count(list, MetricsEvent.Type.BUSINESS_FAILED.getNameByType(side),
MetricsKey.METRIC_REQUEST_BUSINESS_FAILED);
- count(list, MetricsEvent.Type.REQUEST_TIMEOUT.getNameByType(side),
MetricsKey.METRIC_REQUESTS_TIMEOUT);
- count(list, MetricsEvent.Type.REQUEST_LIMIT.getNameByType(side),
MetricsKey.METRIC_REQUESTS_LIMIT);
- count(list, MetricsEvent.Type.TOTAL_FAILED.getNameByType(side),
MetricsKey.METRIC_REQUESTS_TOTAL_FAILED);
- count(list, MetricsEvent.Type.NETWORK_EXCEPTION.getNameByType(side),
MetricsKey.METRIC_REQUESTS_NETWORK_FAILED);
- count(list, MetricsEvent.Type.SERVICE_UNAVAILABLE.getNameByType(side),
MetricsKey.METRIC_REQUESTS_SERVICE_UNAVAILABLE_FAILED);
- count(list, MetricsEvent.Type.CODEC_EXCEPTION.getNameByType(side),
MetricsKey.METRIC_REQUESTS_CODEC_FAILED);
+ count(list, MetricsEvent.Type.TOTAL.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS);
+ count(list, MetricsEvent.Type.SUCCEED.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS_SUCCEED);
+ count(list, MetricsEvent.Type.UNKNOWN_FAILED.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS_FAILED);
+ count(list, MetricsEvent.Type.PROCESSING.getNameByType(side),
MetricSample.Type.GAUGE, MetricsKey.METRIC_REQUESTS_PROCESSING);
+ count(list, MetricsEvent.Type.BUSINESS_FAILED.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUEST_BUSINESS_FAILED);
+ count(list, MetricsEvent.Type.REQUEST_TIMEOUT.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS_TIMEOUT);
+ count(list, MetricsEvent.Type.REQUEST_LIMIT.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS_LIMIT);
+ count(list, MetricsEvent.Type.TOTAL_FAILED.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS_TOTAL_FAILED);
+ count(list, MetricsEvent.Type.NETWORK_EXCEPTION.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS_NETWORK_FAILED);
+ count(list, MetricsEvent.Type.SERVICE_UNAVAILABLE.getNameByType(side),
MetricSample.Type.COUNTER,
MetricsKey.METRIC_REQUESTS_SERVICE_UNAVAILABLE_FAILED);
+ count(list, MetricsEvent.Type.CODEC_EXCEPTION.getNameByType(side),
MetricSample.Type.COUNTER, MetricsKey.METRIC_REQUESTS_CODEC_FAILED);
}
- private <T> GaugeMetricSample<T> getGaugeMetricSample(MetricsKey
metricsKey,
- MethodMetric
methodMetric,
- MetricsCategory
metricsCategory,
- T value,
- ToDoubleFunction<T>
apply) {
+ private <T> GaugeMetricSample<T> createGaugeMetricSample(MetricsKey
metricsKey,
+ MethodMetric
methodMetric,
+ MetricsCategory
metricsCategory,
+ T value,
+
ToDoubleFunction<T> apply) {
return new GaugeMetricSample<>(
metricsKey.getNameByType(methodMetric.getSide()),
metricsKey.getDescription(),
@@ -112,9 +111,23 @@ public class MethodMetricsSampler extends
SimpleMetricsCountSampler<Invocation,
apply);
}
- private <T extends Metric> void count(List<MetricSample> list, String
eventType, MetricsKey metricsKey) {
+ private <T extends Metric> void count(List<MetricSample> list, String
eventType, MetricSample.Type type, MetricsKey metricsKey) {
getCount(eventType).filter(e -> !e.isEmpty())
- .ifPresent(map -> map.forEach((k, v) ->
- list.add(getGaugeMetricSample(metricsKey, k, REQUESTS, v,
AtomicLong::get))));
+ .ifPresent(map -> map.forEach((k, v) -> {
+ if(type == MetricSample.Type.COUNTER){
+ list.add(createCounterMetricSample(metricsKey, k,
MetricsCategory.REQUESTS, v));
+ }else if(type == MetricSample.Type.GAUGE){
+ list.add(createGaugeMetricSample(metricsKey, k,
MetricsCategory.REQUESTS, v, AtomicLong::get));
+ }
+ }
+ ));
+ }
+
+ private MetricSample createCounterMetricSample(MetricsKey metricsKey,
MethodMetric methodMetric, MetricsCategory metricsCategory, AtomicLong value) {
+ return new
CounterMetricSample<>(metricsKey.getNameByType(methodMetric.getSide()),
+ metricsKey.getDescription(),
+ methodMetric.getTags(), metricsCategory, value);
+
+
}
}
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
index c94e8b2af8..d94cbb79e3 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
@@ -23,7 +23,7 @@ import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.metrics.TestMetricsInvoker;
import org.apache.dubbo.metrics.collector.DefaultMetricsCollector;
import org.apache.dubbo.metrics.model.MetricsKey;
-import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
+import org.apache.dubbo.metrics.model.sample.CounterMetricSample;
import org.apache.dubbo.metrics.model.sample.MetricSample;
import org.apache.dubbo.rpc.AppResponse;
import org.apache.dubbo.rpc.Invoker;
@@ -186,10 +186,10 @@ class MetricsFilterTest {
Assertions.assertTrue(metricsMap.containsKey(MetricsKey.METRIC_REQUESTS_TOTAL_FAILED.getNameByType(side)));
MetricSample timeoutSample =
metricsMap.get(MetricsKey.METRIC_REQUESTS_TIMEOUT.getNameByType(side));
- Assertions.assertSame(((GaugeMetricSample)
timeoutSample).applyAsLong(), count);
+ Assertions.assertSame(((CounterMetricSample)
timeoutSample).getValue().longValue(), count);
- GaugeMetricSample failedSample = (GaugeMetricSample)
metricsMap.get(MetricsKey.METRIC_REQUESTS_TOTAL_FAILED.getNameByType(side));
- Assertions.assertSame(failedSample.applyAsLong(), count);
+ CounterMetricSample failedSample = (CounterMetricSample)
metricsMap.get(MetricsKey.METRIC_REQUESTS_TOTAL_FAILED.getNameByType(side));
+ Assertions.assertSame(failedSample.getValue().longValue(), count);
}
@Test
@@ -214,7 +214,7 @@ class MetricsFilterTest {
MetricSample sample =
metricsMap.get(MetricsKey.METRIC_REQUESTS_LIMIT.getNameByType(side));
- Assertions.assertSame(((GaugeMetricSample) sample).applyAsLong(),
count);
+ Assertions.assertSame(((CounterMetricSample)
sample).getValue().longValue(), count);
}
@Test
@@ -292,7 +292,7 @@ class MetricsFilterTest {
MetricSample sample = metricsMap.get(metricsKey.getName());
- Assertions.assertSame(((GaugeMetricSample) sample).applyAsLong(),
count);
+ Assertions.assertSame(((CounterMetricSample)
sample).getValue().longValue(), count);
Assertions.assertTrue(metricsMap.containsKey(metricsKey.getName()));
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/collector/DefaultMetricsCollectorTest.java
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/collector/DefaultMetricsCollectorTest.java
index 7affb9ae8b..b80db74ee8 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/collector/DefaultMetricsCollectorTest.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/collector/DefaultMetricsCollectorTest.java
@@ -28,6 +28,7 @@ import org.apache.dubbo.metrics.event.MetricsEvent;
import org.apache.dubbo.metrics.event.RTEvent;
import org.apache.dubbo.metrics.listener.MetricsListener;
import org.apache.dubbo.metrics.model.MetricsKey;
+import org.apache.dubbo.metrics.model.sample.CounterMetricSample;
import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
import org.apache.dubbo.metrics.model.sample.MetricSample;
import org.apache.dubbo.rpc.RpcContext;
@@ -107,21 +108,34 @@ class DefaultMetricsCollectorTest {
List<MetricSample> samples = collector.collect();
for (MetricSample sample : samples) {
- Assertions.assertTrue(sample instanceof GaugeMetricSample);
- GaugeMetricSample gaugeSample = (GaugeMetricSample) sample;
- Map<String, String> tags = gaugeSample.getTags();
+ if(sample instanceof GaugeMetricSample) {
+ GaugeMetricSample gaugeSample = (GaugeMetricSample) sample;
+ Assertions.assertEquals(gaugeSample.applyAsLong(), 1);
+ }else if(sample instanceof CounterMetricSample){
+ CounterMetricSample counterMetricSample =
(CounterMetricSample) sample;
+
Assertions.assertEquals(counterMetricSample.getValue().longValue(), 1);
+ }
+ Map<String, String> tags = sample.getTags();
Assertions.assertEquals(tags.get(TAG_INTERFACE_KEY),
interfaceName);
Assertions.assertEquals(tags.get(TAG_METHOD_KEY), methodName);
Assertions.assertEquals(tags.get(TAG_GROUP_KEY), group);
Assertions.assertEquals(tags.get(TAG_VERSION_KEY), version);
- Assertions.assertEquals(gaugeSample.applyAsLong(), 1);
+
}
methodMetricsCountSampler.dec(invocation,
MetricsEvent.Type.PROCESSING.getNameByType(side));
samples = collector.collect();
- Map<String, Long> sampleMap =
samples.stream().collect(Collectors.toMap(MetricSample::getName, k ->
((GaugeMetricSample) k).applyAsLong()));
+ Map<String, Long> sampleMap =
samples.stream().collect(Collectors.toMap(MetricSample::getName, k -> {
+ if(k instanceof GaugeMetricSample){
+ return ((GaugeMetricSample) k).applyAsLong();
+ }else if(k instanceof CounterMetricSample){
+ return ((CounterMetricSample)k).getValue().longValue();
+ }else{
+ throw new RuntimeException("un support sample type");
+ }
+ }));
Assertions.assertEquals(sampleMap.get(MetricsKey.METRIC_REQUESTS_PROCESSING.getNameByType(side)),
0L);
}
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
index a1f44a1867..ed2553c664 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
@@ -16,11 +16,6 @@
*/
package org.apache.dubbo.spring.boot.observability.autoconfigure;
-import io.micrometer.tracing.Tracer;
-import io.micrometer.tracing.handler.DefaultTracingObservationHandler;
-import
io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler;
-import
io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler;
-import io.micrometer.tracing.propagation.Propagator;
import
org.apache.dubbo.spring.boot.observability.annotation.ConditionalOnDubboTracingEnable;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -33,46 +28,46 @@ import org.springframework.core.annotation.Order;
* copy from {@link
org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration}
* this class is available starting from Boot 3.0. It's not available if
you're using Boot < 3.0
*/
-@ConditionalOnClass(Tracer.class)
@ConditionalOnDubboTracingEnable
+@ConditionalOnClass(name =
{"io.micrometer.observation.Observation","io.micrometer.tracing.Tracer","io.micrometer.tracing.propagation.Propagator"})
@AutoConfigureAfter(name =
"org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration")
public class DubboMicrometerTracingAutoConfiguration {
/**
* {@code @Order} value of
- * {@link #propagatingReceiverTracingObservationHandler(Tracer,
Propagator)}.
+ * {@link
#propagatingReceiverTracingObservationHandler(io.micrometer.tracing.Tracer,
io.micrometer.tracing.propagation.Propagator )}.
*/
public static final int RECEIVER_TRACING_OBSERVATION_HANDLER_ORDER = 1000;
/**
* {@code @Order} value of
- * {@link #propagatingSenderTracingObservationHandler(Tracer, Propagator)}.
+ * {@link
#propagatingSenderTracingObservationHandler(io.micrometer.tracing.Tracer,
io.micrometer.tracing.propagation.Propagator )}.
*/
public static final int SENDER_TRACING_OBSERVATION_HANDLER_ORDER = 2000;
@Bean
@ConditionalOnMissingBean
- @ConditionalOnBean(Tracer.class)
- public DefaultTracingObservationHandler
defaultTracingObservationHandler(Tracer tracer) {
- return new DefaultTracingObservationHandler(tracer);
+ @ConditionalOnBean(io.micrometer.tracing.Tracer.class)
+ public io.micrometer.tracing.handler.DefaultTracingObservationHandler
defaultTracingObservationHandler(io.micrometer.tracing.Tracer tracer) {
+ return new
io.micrometer.tracing.handler.DefaultTracingObservationHandler(tracer);
}
@Bean
@ConditionalOnMissingBean
- @ConditionalOnBean({Tracer.class, Propagator.class})
+ @ConditionalOnBean({io.micrometer.tracing.Tracer.class,
io.micrometer.tracing.propagation.Propagator.class})
@Order(SENDER_TRACING_OBSERVATION_HANDLER_ORDER)
- public PropagatingSenderTracingObservationHandler<?>
propagatingSenderTracingObservationHandler(Tracer tracer,
-
Propagator propagator) {
- return new PropagatingSenderTracingObservationHandler<>(tracer,
propagator);
+ public
io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler<?>
propagatingSenderTracingObservationHandler(io.micrometer.tracing.Tracer tracer,
+
io.micrometer.tracing.propagation.Propagator propagator) {
+ return new
io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler<>(tracer,
propagator);
}
@Bean
@ConditionalOnMissingBean
- @ConditionalOnBean({Tracer.class, Propagator.class})
+ @ConditionalOnBean({io.micrometer.tracing.Tracer.class,
io.micrometer.tracing.propagation.Propagator.class})
@Order(RECEIVER_TRACING_OBSERVATION_HANDLER_ORDER)
- public PropagatingReceiverTracingObservationHandler<?>
propagatingReceiverTracingObservationHandler(Tracer tracer,
-
Propagator propagator) {
- return new PropagatingReceiverTracingObservationHandler<>(tracer,
propagator);
+ public
io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<?>
propagatingReceiverTracingObservationHandler(io.micrometer.tracing.Tracer
tracer,
+
io.micrometer.tracing.propagation.Propagator propagator) {
+ return new
io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<>(tracer,
propagator);
}
}
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java
index 6b98ba9090..6b349d23a0 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java
@@ -17,23 +17,21 @@
package org.apache.dubbo.spring.boot.observability.autoconfigure;
import io.micrometer.core.instrument.MeterRegistry;
-import
io.micrometer.core.instrument.observation.DefaultMeterObservationHandler;
-import io.micrometer.core.instrument.observation.MeterObservationHandler;
-import io.micrometer.observation.Observation;
-import io.micrometer.observation.ObservationHandler;
-import io.micrometer.observation.ObservationRegistry;
-import io.micrometer.tracing.Tracer;
-import io.micrometer.tracing.handler.TracingAwareMeterObservationHandler;
-import io.micrometer.tracing.handler.TracingObservationHandler;
+import io.micrometer.tracing.Tracer;
+import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.qos.protocol.QosProtocolWrapper;
import org.apache.dubbo.rpc.model.ApplicationModel;
import
org.apache.dubbo.spring.boot.observability.annotation.ConditionalOnDubboTracingEnable;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.SmartInitializingSingleton;
+
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -50,7 +48,10 @@ import java.util.Arrays;
*/
@AutoConfiguration(after = DubboMicrometerTracingAutoConfiguration.class,
afterName =
"org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration")
@ConditionalOnDubboTracingEnable
+@ConditionalOnClass(name = {"io.micrometer.observation.Observation",
"io.micrometer.tracing.Tracer"})
public class DubboObservationAutoConfiguration implements BeanFactoryAware,
SmartInitializingSingleton {
+ private final ErrorTypeAwareLogger logger =
LoggerFactory.getErrorTypeAwareLogger(QosProtocolWrapper.class);
+
public DubboObservationAutoConfiguration(ApplicationModel
applicationModel) {
this.applicationModel = applicationModel;
@@ -62,14 +63,16 @@ public class DubboObservationAutoConfiguration implements
BeanFactoryAware, Smar
@Bean
@ConditionalOnMissingBean
- ObservationRegistry observationRegistry() {
- return ObservationRegistry.create();
+ @ConditionalOnClass(name = "io.micrometer.observation.ObservationRegistry")
+ io.micrometer.observation.ObservationRegistry observationRegistry() {
+ return io.micrometer.observation.ObservationRegistry.create();
}
@Bean
@ConditionalOnMissingBean(type =
"org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryPostProcessor")
+ @ConditionalOnClass(name = "io.micrometer.observation.ObservationHandler")
public ObservationRegistryPostProcessor
dubboObservationRegistryPostProcessor(ObjectProvider<ObservationHandlerGrouping>
observationHandlerGrouping,
-
ObjectProvider<ObservationHandler<?>> observationHandlers) {
+
ObjectProvider<io.micrometer.observation.ObservationHandler<?>>
observationHandlers) {
return new
ObservationRegistryPostProcessor(observationHandlerGrouping,
observationHandlers);
}
@@ -80,7 +83,13 @@ public class DubboObservationAutoConfiguration implements
BeanFactoryAware, Smar
@Override
public void afterSingletonsInstantiated() {
-
applicationModel.getBeanFactory().registerBean(beanFactory.getBean(ObservationRegistry.class));
+
+ try {
+ Tracer bean = beanFactory.getBean(Tracer.class);
+ applicationModel.getBeanFactory().registerBean(bean);
+ } catch (NoSuchBeanDefinitionException e) {
+ logger.info("Please use a version of micrometer higher than 1.10.0
:{}" + e.getMessage());
+ }
}
@Configuration(proxyBeanMethods = false)
@@ -90,41 +99,44 @@ public class DubboObservationAutoConfiguration implements
BeanFactoryAware, Smar
static class OnlyMetricsConfiguration {
@Bean
+ @ConditionalOnClass(name =
"io.micrometer.core.instrument.observation.MeterObservationHandler")
ObservationHandlerGrouping metricsObservationHandlerGrouping() {
- return new
ObservationHandlerGrouping(MeterObservationHandler.class);
+ return new
ObservationHandlerGrouping(io.micrometer.core.instrument.observation.MeterObservationHandler.class);
}
}
@Configuration(proxyBeanMethods = false)
- @ConditionalOnClass(Tracer.class)
+ @ConditionalOnClass(io.micrometer.tracing.Tracer.class)
@ConditionalOnMissingClass("io.micrometer.core.instrument.MeterRegistry")
@ConditionalOnMissingBean(type =
"org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryPostProcessor")
static class OnlyTracingConfiguration {
@Bean
+ @ConditionalOnClass(name =
"io.micrometer.tracing.handler.TracingObservationHandler")
ObservationHandlerGrouping tracingObservationHandlerGrouping() {
- return new
ObservationHandlerGrouping(TracingObservationHandler.class);
+ return new
ObservationHandlerGrouping(io.micrometer.tracing.handler.TracingObservationHandler.class);
}
}
@Configuration(proxyBeanMethods = false)
- @ConditionalOnClass({MeterRegistry.class, Tracer.class})
+ @ConditionalOnClass({MeterRegistry.class,
io.micrometer.tracing.Tracer.class})
@ConditionalOnMissingBean(type =
"org.springframework.boot.actuate.autoconfigure.observation.ObservationRegistryPostProcessor")
static class MetricsWithTracingConfiguration {
@Bean
+ @ConditionalOnClass(name =
{"io.micrometer.tracing.handler.TracingObservationHandler",
"io.micrometer.core.instrument.observation.MeterObservationHandler"})
ObservationHandlerGrouping
metricsAndTracingObservationHandlerGrouping() {
return new ObservationHandlerGrouping(
- Arrays.asList(TracingObservationHandler.class,
MeterObservationHandler.class));
+
Arrays.asList(io.micrometer.tracing.handler.TracingObservationHandler.class,
io.micrometer.core.instrument.observation.MeterObservationHandler.class));
}
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnBean(MeterRegistry.class)
- @ConditionalOnMissingBean(MeterObservationHandler.class)
+
@ConditionalOnMissingBean(io.micrometer.core.instrument.observation.MeterObservationHandler.class)
static class MeterObservationHandlerConfiguration {
@ConditionalOnMissingBean(type = "io.micrometer.tracing.Tracer")
@@ -132,21 +144,23 @@ public class DubboObservationAutoConfiguration implements
BeanFactoryAware, Smar
static class OnlyMetricsMeterObservationHandlerConfiguration {
@Bean
- DefaultMeterObservationHandler
defaultMeterObservationHandler(MeterRegistry meterRegistry) {
- return new DefaultMeterObservationHandler(meterRegistry);
+ @ConditionalOnClass(name =
{"io.micrometer.core.instrument.observation.DefaultMeterObservationHandler"})
+
io.micrometer.core.instrument.observation.DefaultMeterObservationHandler
defaultMeterObservationHandler(MeterRegistry meterRegistry) {
+ return new
io.micrometer.core.instrument.observation.DefaultMeterObservationHandler(meterRegistry);
}
}
- @ConditionalOnBean(Tracer.class)
+ @ConditionalOnBean(io.micrometer.tracing.Tracer.class)
@Configuration(proxyBeanMethods = false)
static class TracingAndMetricsObservationHandlerConfiguration {
@Bean
- TracingAwareMeterObservationHandler<Observation.Context>
tracingAwareMeterObservationHandler(
- MeterRegistry meterRegistry, Tracer tracer) {
- DefaultMeterObservationHandler delegate = new
DefaultMeterObservationHandler(meterRegistry);
- return new TracingAwareMeterObservationHandler<>(delegate,
tracer);
+ @ConditionalOnClass(name =
{"io.micrometer.tracing.handler.TracingAwareMeterObservationHandler",
"io.micrometer.tracing.Tracer"})
+
io.micrometer.tracing.handler.TracingAwareMeterObservationHandler<io.micrometer.observation.Observation.Context>
tracingAwareMeterObservationHandler(
+ MeterRegistry meterRegistry, io.micrometer.tracing.Tracer
tracer) {
+
io.micrometer.core.instrument.observation.DefaultMeterObservationHandler
delegate = new
io.micrometer.core.instrument.observation.DefaultMeterObservationHandler(meterRegistry);
+ return new
io.micrometer.tracing.handler.TracingAwareMeterObservationHandler<>(delegate,
tracer);
}
}
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
index bd12e858cb..b3c0bc7f8f 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
@@ -16,41 +16,12 @@
*/
package org.apache.dubbo.spring.boot.observability.autoconfigure.brave;
+
+
import org.apache.dubbo.spring.boot.autoconfigure.DubboConfigurationProperties;
import
org.apache.dubbo.spring.boot.observability.annotation.ConditionalOnDubboTracingEnable;
import
org.apache.dubbo.spring.boot.observability.autoconfigure.DubboMicrometerTracingAutoConfiguration;
import
org.apache.dubbo.spring.boot.observability.autoconfigure.ObservabilityUtils;
-
-import brave.CurrentSpanCustomizer;
-import brave.SpanCustomizer;
-import brave.Tracing;
-import brave.TracingCustomizer;
-import brave.baggage.BaggageField;
-import brave.baggage.BaggagePropagation;
-import brave.baggage.BaggagePropagationConfig;
-import brave.baggage.BaggagePropagationCustomizer;
-import brave.baggage.CorrelationScopeConfig;
-import brave.baggage.CorrelationScopeCustomizer;
-import brave.baggage.CorrelationScopeDecorator;
-import brave.context.slf4j.MDCScopeDecorator;
-import brave.handler.SpanHandler;
-import brave.propagation.B3Propagation;
-import brave.propagation.CurrentTraceContext;
-import brave.propagation.CurrentTraceContextCustomizer;
-import brave.propagation.Propagation;
-import brave.propagation.ThreadLocalCurrentTraceContext;
-import brave.sampler.Sampler;
-import io.micrometer.tracing.Tracer;
-import io.micrometer.tracing.brave.bridge.BraveBaggageManager;
-import io.micrometer.tracing.brave.bridge.BraveCurrentTraceContext;
-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;
-import io.micrometer.tracing.exporter.SpanExportingPredicate;
-import io.micrometer.tracing.exporter.SpanFilter;
-import io.micrometer.tracing.exporter.SpanReporter;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -67,19 +38,17 @@ import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
-import static org.apache.dubbo.config.nested.PropagationConfig.B3;
-import static org.apache.dubbo.config.nested.PropagationConfig.W3C;
/**
* provider Brave when you are using Boot <3.0 or you are not using
spring-boot-starter-actuator
*/
@AutoConfiguration(before = DubboMicrometerTracingAutoConfiguration.class,
afterName =
"org.springframework.boot.actuate.autoconfigure.tracing.BraveAutoConfiguration")
-@ConditionalOnClass({Tracer.class, BraveTracer.class})
+@ConditionalOnClass(name={"io.micrometer.tracing.Tracer",
"io.micrometer.tracing.brave.bridge.BraveTracer","io.micrometer.tracing.brave.bridge.BraveBaggageManager","brave.Tracing"})
@EnableConfigurationProperties(DubboConfigurationProperties.class)
@ConditionalOnDubboTracingEnable
public class BraveAutoConfiguration {
- private static final BraveBaggageManager BRAVE_BAGGAGE_MANAGER = new
BraveBaggageManager();
+ private static final
io.micrometer.tracing.brave.bridge.BraveBaggageManager BRAVE_BAGGAGE_MANAGER =
new io.micrometer.tracing.brave.bridge.BraveBaggageManager();
/**
* Default value for application name if {@code spring.application.name}
is not set.
@@ -89,24 +58,24 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@Order(Ordered.HIGHEST_PRECEDENCE)
- CompositeSpanHandler
compositeSpanHandler(ObjectProvider<SpanExportingPredicate> predicates,
- ObjectProvider<SpanReporter>
reporters, ObjectProvider<SpanFilter> filters) {
- return new
CompositeSpanHandler(predicates.orderedStream().collect(Collectors.toList()),
- reporters.orderedStream().collect(Collectors.toList()),
- filters.orderedStream().collect(Collectors.toList()));
+ io.micrometer.tracing.brave.bridge.CompositeSpanHandler
compositeSpanHandler(ObjectProvider<io.micrometer.tracing.exporter.SpanExportingPredicate>
predicates,
+
ObjectProvider<io.micrometer.tracing.exporter.SpanReporter> reporters,
ObjectProvider<io.micrometer.tracing.exporter.SpanFilter> filters) {
+ return new
io.micrometer.tracing.brave.bridge.CompositeSpanHandler(predicates.orderedStream().collect(Collectors.toList()),
+ reporters.orderedStream().collect(Collectors.toList()),
+ filters.orderedStream().collect(Collectors.toList()));
}
@Bean
@ConditionalOnMissingBean
- public Tracing braveTracing(Environment environment, List<SpanHandler>
spanHandlers,
- List<TracingCustomizer> tracingCustomizers,
CurrentTraceContext currentTraceContext,
- Propagation.Factory propagationFactory,
Sampler sampler) {
+ public brave.Tracing braveTracing(Environment environment,
List<brave.handler.SpanHandler> spanHandlers,
+ List<brave.TracingCustomizer>
tracingCustomizers, brave.propagation.CurrentTraceContext currentTraceContext,
+ brave.propagation.Propagation.Factory
propagationFactory, brave.sampler.Sampler sampler) {
String applicationName =
environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME);
- Tracing.Builder builder =
Tracing.newBuilder().currentTraceContext(currentTraceContext).traceId128Bit(true)
-
.supportsJoin(false).propagationFactory(propagationFactory).sampler(sampler)
- .localServiceName(applicationName);
+ brave.Tracing.Builder builder =
brave.Tracing.newBuilder().currentTraceContext(currentTraceContext).traceId128Bit(true)
+
.supportsJoin(false).propagationFactory(propagationFactory).sampler(sampler)
+ .localServiceName(applicationName);
spanHandlers.forEach(builder::addSpanHandler);
- for (TracingCustomizer tracingCustomizer : tracingCustomizers) {
+ for (brave.TracingCustomizer tracingCustomizer : tracingCustomizers) {
tracingCustomizer.customize(builder);
}
return builder.build();
@@ -114,17 +83,17 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public brave.Tracer braveTracer(Tracing tracing) {
+ public brave.Tracer braveTracer(brave.Tracing tracing) {
return tracing.tracer();
}
@Bean
@ConditionalOnMissingBean
- public CurrentTraceContext
braveCurrentTraceContext(List<CurrentTraceContext.ScopeDecorator>
scopeDecorators,
-
List<CurrentTraceContextCustomizer> currentTraceContextCustomizers) {
- ThreadLocalCurrentTraceContext.Builder builder =
ThreadLocalCurrentTraceContext.newBuilder();
+ public brave.propagation.CurrentTraceContext
braveCurrentTraceContext(List<brave.propagation.CurrentTraceContext.ScopeDecorator>
scopeDecorators,
+
List<brave.propagation.CurrentTraceContextCustomizer>
currentTraceContextCustomizers) {
+ brave.propagation.ThreadLocalCurrentTraceContext.Builder builder =
brave.propagation.ThreadLocalCurrentTraceContext.newBuilder();
scopeDecorators.forEach(builder::addScopeDecorator);
- for (CurrentTraceContextCustomizer currentTraceContextCustomizer :
currentTraceContextCustomizers) {
+ for (brave.propagation.CurrentTraceContextCustomizer
currentTraceContextCustomizer : currentTraceContextCustomizers) {
currentTraceContextCustomizer.customize(builder);
}
return builder.build();
@@ -132,32 +101,32 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public Sampler braveSampler(DubboConfigurationProperties properties) {
- return
Sampler.create(properties.getTracing().getSampling().getProbability());
+ public brave.sampler.Sampler braveSampler(DubboConfigurationProperties
properties) {
+ return
brave.sampler.Sampler.create(properties.getTracing().getSampling().getProbability());
}
@Bean
@ConditionalOnMissingBean(io.micrometer.tracing.Tracer.class)
- BraveTracer braveTracerBridge(brave.Tracer tracer, CurrentTraceContext
currentTraceContext) {
- return new BraveTracer(tracer, new
BraveCurrentTraceContext(currentTraceContext), BRAVE_BAGGAGE_MANAGER);
+ io.micrometer.tracing.brave.bridge.BraveTracer
braveTracerBridge(brave.Tracer tracer, brave.propagation.CurrentTraceContext
currentTraceContext) {
+ return new io.micrometer.tracing.brave.bridge.BraveTracer(tracer, new
io.micrometer.tracing.brave.bridge.BraveCurrentTraceContext(currentTraceContext),
BRAVE_BAGGAGE_MANAGER);
}
@Bean
@ConditionalOnMissingBean
- BravePropagator bravePropagator(Tracing tracing) {
- return new BravePropagator(tracing);
+ io.micrometer.tracing.brave.bridge.BravePropagator
bravePropagator(brave.Tracing tracing) {
+ return new io.micrometer.tracing.brave.bridge.BravePropagator(tracing);
}
@Bean
- @ConditionalOnMissingBean(SpanCustomizer.class)
- CurrentSpanCustomizer currentSpanCustomizer(Tracing tracing) {
- return CurrentSpanCustomizer.create(tracing);
+ @ConditionalOnMissingBean(brave.SpanCustomizer.class)
+ brave.CurrentSpanCustomizer currentSpanCustomizer(brave.Tracing tracing) {
+ return brave.CurrentSpanCustomizer.create(tracing);
}
@Bean
@ConditionalOnMissingBean(io.micrometer.tracing.SpanCustomizer.class)
- BraveSpanCustomizer braveSpanCustomizer(SpanCustomizer spanCustomizer) {
- return new BraveSpanCustomizer(spanCustomizer);
+ io.micrometer.tracing.brave.bridge.BraveSpanCustomizer
braveSpanCustomizer(brave.SpanCustomizer spanCustomizer) {
+ return new
io.micrometer.tracing.brave.bridge.BraveSpanCustomizer(spanCustomizer);
}
@Configuration(proxyBeanMethods = false)
@@ -166,13 +135,13 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- Propagation.Factory propagationFactory(DubboConfigurationProperties
tracing) {
+ brave.propagation.Propagation.Factory
propagationFactory(DubboConfigurationProperties tracing) {
String type = tracing.getTracing().getPropagation().getType();
switch (type) {
- case B3:
- return
B3Propagation.newFactoryBuilder().injectFormat(B3Propagation.Format.SINGLE_NO_PARENT).build();
- case W3C:
- return new W3CPropagation();
+ case org.apache.dubbo.config.nested.PropagationConfig.B3:
+ return
brave.propagation.B3Propagation.newFactoryBuilder().injectFormat(brave.propagation.B3Propagation.Format.SINGLE_NO_PARENT).build();
+ case org.apache.dubbo.config.nested.PropagationConfig.W3C:
+ return new
io.micrometer.tracing.brave.bridge.W3CPropagation();
default:
throw new IllegalArgumentException("UnSupport propagation
type");
}
@@ -192,12 +161,12 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_PROPAGATION, value = "type", havingValue =
"B3")
- BaggagePropagation.FactoryBuilder b3PropagationFactoryBuilder(
- ObjectProvider<BaggagePropagationCustomizer>
baggagePropagationCustomizers) {
- Propagation.Factory delegate =
-
B3Propagation.newFactoryBuilder().injectFormat(B3Propagation.Format.SINGLE_NO_PARENT).build();
+ brave.baggage.BaggagePropagation.FactoryBuilder
b3PropagationFactoryBuilder(
+ ObjectProvider<brave.baggage.BaggagePropagationCustomizer>
baggagePropagationCustomizers) {
+ brave.propagation.Propagation.Factory delegate =
+
brave.propagation.B3Propagation.newFactoryBuilder().injectFormat(brave.propagation.B3Propagation.Format.SINGLE_NO_PARENT).build();
- BaggagePropagation.FactoryBuilder builder =
BaggagePropagation.newFactoryBuilder(delegate);
+ brave.baggage.BaggagePropagation.FactoryBuilder builder =
brave.baggage.BaggagePropagation.newFactoryBuilder(delegate);
baggagePropagationCustomizers.orderedStream().forEach((customizer)
-> customizer.customize(builder));
return builder;
}
@@ -205,11 +174,11 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_PROPAGATION, value = "type", havingValue =
"W3C", matchIfMissing = true)
- BaggagePropagation.FactoryBuilder w3cPropagationFactoryBuilder(
- ObjectProvider<BaggagePropagationCustomizer>
baggagePropagationCustomizers) {
- Propagation.Factory delegate = new
W3CPropagation(BRAVE_BAGGAGE_MANAGER, Collections.emptyList());
+ brave.baggage.BaggagePropagation.FactoryBuilder
w3cPropagationFactoryBuilder(
+ ObjectProvider<brave.baggage.BaggagePropagationCustomizer>
baggagePropagationCustomizers) {
+ brave.propagation.Propagation.Factory delegate = new
io.micrometer.tracing.brave.bridge.W3CPropagation(BRAVE_BAGGAGE_MANAGER,
Collections.emptyList());
- BaggagePropagation.FactoryBuilder builder =
BaggagePropagation.newFactoryBuilder(delegate);
+ brave.baggage.BaggagePropagation.FactoryBuilder builder =
brave.baggage.BaggagePropagation.newFactoryBuilder(delegate);
baggagePropagationCustomizers.orderedStream().forEach((customizer)
-> customizer.customize(builder));
return builder;
}
@@ -217,26 +186,26 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@Order(0)
- BaggagePropagationCustomizer
remoteFieldsBaggagePropagationCustomizer() {
+ brave.baggage.BaggagePropagationCustomizer
remoteFieldsBaggagePropagationCustomizer() {
return (builder) -> {
List<String> remoteFields =
dubboConfigProperties.getTracing().getBaggage().getRemoteFields();
for (String fieldName : remoteFields) {
-
builder.add(BaggagePropagationConfig.SingleBaggageField.remote(BaggageField.create(fieldName)));
+
builder.add(brave.baggage.BaggagePropagationConfig.SingleBaggageField.remote(brave.baggage.BaggageField.create(fieldName)));
}
};
}
@Bean
@ConditionalOnMissingBean
- Propagation.Factory
propagationFactory(BaggagePropagation.FactoryBuilder factoryBuilder) {
+ brave.propagation.Propagation.Factory
propagationFactory(brave.baggage.BaggagePropagation.FactoryBuilder
factoryBuilder) {
return factoryBuilder.build();
}
@Bean
@ConditionalOnMissingBean
- CorrelationScopeDecorator.Builder mdcCorrelationScopeDecoratorBuilder(
- ObjectProvider<CorrelationScopeCustomizer>
correlationScopeCustomizers) {
- CorrelationScopeDecorator.Builder builder =
MDCScopeDecorator.newBuilder();
+ brave.baggage.CorrelationScopeDecorator.Builder
mdcCorrelationScopeDecoratorBuilder(
+ ObjectProvider<brave.baggage.CorrelationScopeCustomizer>
correlationScopeCustomizers) {
+ brave.baggage.CorrelationScopeDecorator.Builder builder =
brave.context.slf4j.MDCScopeDecorator.newBuilder();
correlationScopeCustomizers.orderedStream().forEach((customizer)
-> customizer.customize(builder));
return builder;
}
@@ -245,19 +214,19 @@ public class BraveAutoConfiguration {
@Order(0)
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_BAGGAGE_CORRELATION, name = "enabled",
matchIfMissing = true)
- CorrelationScopeCustomizer
correlationFieldsCorrelationScopeCustomizer() {
+ brave.baggage.CorrelationScopeCustomizer
correlationFieldsCorrelationScopeCustomizer() {
return (builder) -> {
List<String> correlationFields =
this.dubboConfigProperties.getTracing().getBaggage().getCorrelation().getFields();
for (String field : correlationFields) {
-
builder.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(BaggageField.create(field))
+
builder.add(brave.baggage.CorrelationScopeConfig.SingleCorrelationField.newBuilder(brave.baggage.BaggageField.create(field))
.flushOnUpdate().build());
}
};
}
@Bean
- @ConditionalOnMissingBean(CurrentTraceContext.ScopeDecorator.class)
- CurrentTraceContext.ScopeDecorator
correlationScopeDecorator(CorrelationScopeDecorator.Builder builder) {
+
@ConditionalOnMissingBean(brave.propagation.CurrentTraceContext.ScopeDecorator.class)
+ brave.propagation.CurrentTraceContext.ScopeDecorator
correlationScopeDecorator(brave.baggage.CorrelationScopeDecorator.Builder
builder) {
return builder.build();
}
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
index b0df17980e..4d8d58c81e 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-observability-starter/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
@@ -16,45 +16,12 @@
*/
package org.apache.dubbo.spring.boot.observability.autoconfigure.otel;
+
import org.apache.dubbo.common.Version;
import org.apache.dubbo.spring.boot.autoconfigure.DubboConfigurationProperties;
import
org.apache.dubbo.spring.boot.observability.annotation.ConditionalOnDubboTracingEnable;
import
org.apache.dubbo.spring.boot.observability.autoconfigure.DubboMicrometerTracingAutoConfiguration;
import
org.apache.dubbo.spring.boot.observability.autoconfigure.ObservabilityUtils;
-
-import io.micrometer.tracing.SpanCustomizer;
-import io.micrometer.tracing.exporter.SpanExportingPredicate;
-import io.micrometer.tracing.exporter.SpanFilter;
-import io.micrometer.tracing.exporter.SpanReporter;
-import io.micrometer.tracing.otel.bridge.CompositeSpanExporter;
-import io.micrometer.tracing.otel.bridge.EventListener;
-import io.micrometer.tracing.otel.bridge.EventPublishingContextWrapper;
-import io.micrometer.tracing.otel.bridge.OtelBaggageManager;
-import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext;
-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.Slf4JBaggageEventListener;
-import io.micrometer.tracing.otel.bridge.Slf4JEventListener;
-import io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator;
-import io.opentelemetry.api.OpenTelemetry;
-import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
-import io.opentelemetry.api.common.Attributes;
-import io.opentelemetry.api.trace.Tracer;
-import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
-import io.opentelemetry.context.ContextStorage;
-import io.opentelemetry.context.propagation.ContextPropagators;
-import io.opentelemetry.context.propagation.TextMapPropagator;
-import io.opentelemetry.extension.trace.propagation.B3Propagator;
-import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.sdk.resources.Resource;
-import io.opentelemetry.sdk.trace.SdkTracerProvider;
-import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
-import io.opentelemetry.sdk.trace.SpanProcessor;
-import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
-import io.opentelemetry.sdk.trace.export.SpanExporter;
-import io.opentelemetry.sdk.trace.samplers.Sampler;
-import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -74,7 +41,9 @@ import java.util.stream.Collectors;
*/
@AutoConfiguration(before = DubboMicrometerTracingAutoConfiguration.class,
afterName =
"org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration")
@ConditionalOnDubboTracingEnable
-@ConditionalOnClass({OtelTracer.class, SdkTracerProvider.class,
OpenTelemetry.class})
+@ConditionalOnClass(name = {"io.micrometer.tracing.otel.bridge.OtelTracer",
+ "io.opentelemetry.sdk.trace.SdkTracerProvider", "e
io.opentelemetry.api.OpenTelemetry"
+ , "io.micrometer.tracing.SpanCustomizer"})
@EnableConfigurationProperties(DubboConfigurationProperties.class)
public class OpenTelemetryAutoConfiguration {
@@ -91,89 +60,89 @@ public class OpenTelemetryAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- OpenTelemetry openTelemetry(SdkTracerProvider sdkTracerProvider,
ContextPropagators contextPropagators) {
- return
OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).setPropagators(contextPropagators)
- .build();
+ io.opentelemetry.api.OpenTelemetry
openTelemetry(io.opentelemetry.sdk.trace.SdkTracerProvider sdkTracerProvider,
io.opentelemetry.context.propagation.ContextPropagators contextPropagators) {
+ return
io.opentelemetry.sdk.OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).setPropagators(contextPropagators)
+ .build();
}
@Bean
@ConditionalOnMissingBean
- SdkTracerProvider otelSdkTracerProvider(Environment environment,
ObjectProvider<SpanProcessor> spanProcessors,
- Sampler sampler) {
+ io.opentelemetry.sdk.trace.SdkTracerProvider
otelSdkTracerProvider(Environment environment,
ObjectProvider<io.opentelemetry.sdk.trace.SpanProcessor> spanProcessors,
+
io.opentelemetry.sdk.trace.samplers.Sampler sampler) {
String applicationName =
environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME);
- SdkTracerProviderBuilder builder =
SdkTracerProvider.builder().setSampler(sampler)
-
.setResource(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME,
applicationName)));
+ io.opentelemetry.sdk.trace.SdkTracerProviderBuilder builder =
io.opentelemetry.sdk.trace.SdkTracerProvider.builder().setSampler(sampler)
+
.setResource(io.opentelemetry.sdk.resources.Resource.create(io.opentelemetry.api.common.Attributes.of(io.opentelemetry.semconv.resource.attributes.ResourceAttributes.SERVICE_NAME,
applicationName)));
spanProcessors.orderedStream().forEach(builder::addSpanProcessor);
return builder.build();
}
@Bean
@ConditionalOnMissingBean
- ContextPropagators
otelContextPropagators(ObjectProvider<TextMapPropagator> textMapPropagators) {
- return
ContextPropagators.create(TextMapPropagator.composite(textMapPropagators.orderedStream().collect(Collectors.toList())));
+ io.opentelemetry.context.propagation.ContextPropagators
otelContextPropagators(ObjectProvider<io.opentelemetry.context.propagation.TextMapPropagator>
textMapPropagators) {
+ return
io.opentelemetry.context.propagation.ContextPropagators.create(io.opentelemetry.context.propagation.TextMapPropagator.composite(textMapPropagators.orderedStream().collect(Collectors.toList())));
}
@Bean
@ConditionalOnMissingBean
- Sampler otelSampler() {
- Sampler rootSampler =
Sampler.traceIdRatioBased(this.dubboConfigProperties.getTracing().getSampling().getProbability());
- return Sampler.parentBased(rootSampler);
+ io.opentelemetry.sdk.trace.samplers.Sampler otelSampler() {
+ io.opentelemetry.sdk.trace.samplers.Sampler rootSampler =
io.opentelemetry.sdk.trace.samplers.Sampler.traceIdRatioBased(this.dubboConfigProperties.getTracing().getSampling().getProbability());
+ return
io.opentelemetry.sdk.trace.samplers.Sampler.parentBased(rootSampler);
}
@Bean
@ConditionalOnMissingBean
- SpanProcessor otelSpanProcessor(ObjectProvider<SpanExporter> spanExporters,
- ObjectProvider<SpanExportingPredicate>
spanExportingPredicates, ObjectProvider<SpanReporter> spanReporters,
- ObjectProvider<SpanFilter> spanFilters) {
- return BatchSpanProcessor.builder(new
CompositeSpanExporter(spanExporters.orderedStream().collect(Collectors.toList()),
-
spanExportingPredicates.orderedStream().collect(Collectors.toList()),
spanReporters.orderedStream().collect(Collectors.toList()),
-
spanFilters.orderedStream().collect(Collectors.toList()))).build();
+ io.opentelemetry.sdk.trace.SpanProcessor
otelSpanProcessor(ObjectProvider<io.opentelemetry.sdk.trace.export.SpanExporter>
spanExporters,
+
ObjectProvider<io.micrometer.tracing.exporter.SpanExportingPredicate>
spanExportingPredicates,
ObjectProvider<io.micrometer.tracing.exporter.SpanReporter> spanReporters,
+
ObjectProvider<io.micrometer.tracing.exporter.SpanFilter> spanFilters) {
+ return
io.opentelemetry.sdk.trace.export.BatchSpanProcessor.builder(new
io.micrometer.tracing.otel.bridge.CompositeSpanExporter(spanExporters.orderedStream().collect(Collectors.toList()),
+
spanExportingPredicates.orderedStream().collect(Collectors.toList()),
spanReporters.orderedStream().collect(Collectors.toList()),
+ spanFilters.orderedStream().collect(Collectors.toList()))).build();
}
@Bean
@ConditionalOnMissingBean
- Tracer otelTracer(OpenTelemetry openTelemetry) {
+ io.opentelemetry.api.trace.Tracer
otelTracer(io.opentelemetry.api.OpenTelemetry openTelemetry) {
return openTelemetry.getTracer("org.apache.dubbo",
Version.getVersion());
}
@Bean
@ConditionalOnMissingBean(io.micrometer.tracing.Tracer.class)
- OtelTracer micrometerOtelTracer(Tracer tracer, OtelTracer.EventPublisher
eventPublisher,
- OtelCurrentTraceContext
otelCurrentTraceContext) {
- return new OtelTracer(tracer, otelCurrentTraceContext, eventPublisher,
- new OtelBaggageManager(otelCurrentTraceContext,
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields(),
+ io.micrometer.tracing.otel.bridge.OtelTracer
micrometerOtelTracer(io.opentelemetry.api.trace.Tracer tracer,
io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher eventPublisher,
+
io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext
otelCurrentTraceContext) {
+ return new io.micrometer.tracing.otel.bridge.OtelTracer(tracer,
otelCurrentTraceContext, eventPublisher,
+ new
io.micrometer.tracing.otel.bridge.OtelBaggageManager(otelCurrentTraceContext,
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields(),
Collections.emptyList()));
}
@Bean
@ConditionalOnMissingBean
- OtelPropagator otelPropagator(ContextPropagators contextPropagators,
Tracer tracer) {
- return new OtelPropagator(contextPropagators, tracer);
+ io.micrometer.tracing.otel.bridge.OtelPropagator
otelPropagator(io.opentelemetry.context.propagation.ContextPropagators
contextPropagators, io.opentelemetry.api.trace.Tracer tracer) {
+ return new
io.micrometer.tracing.otel.bridge.OtelPropagator(contextPropagators, tracer);
}
@Bean
@ConditionalOnMissingBean
- OtelTracer.EventPublisher otelTracerEventPublisher(List<EventListener>
eventListeners) {
+ io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher
otelTracerEventPublisher(List<io.micrometer.tracing.otel.bridge.EventListener>
eventListeners) {
return new OTelEventPublisher(eventListeners);
}
@Bean
@ConditionalOnMissingBean
- OtelCurrentTraceContext otelCurrentTraceContext(OtelTracer.EventPublisher
publisher) {
- ContextStorage.addWrapper(new
EventPublishingContextWrapper(publisher));
- return new OtelCurrentTraceContext();
+ io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext
otelCurrentTraceContext(io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher
publisher) {
+ io.opentelemetry.context.ContextStorage.addWrapper(new
io.micrometer.tracing.otel.bridge.EventPublishingContextWrapper(publisher));
+ return new io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext();
}
@Bean
@ConditionalOnMissingBean
- Slf4JEventListener otelSlf4JEventListener() {
- return new Slf4JEventListener();
+ io.micrometer.tracing.otel.bridge.Slf4JEventListener
otelSlf4JEventListener() {
+ return new io.micrometer.tracing.otel.bridge.Slf4JEventListener();
}
@Bean
- @ConditionalOnMissingBean(SpanCustomizer.class)
- OtelSpanCustomizer otelSpanCustomizer() {
- return new OtelSpanCustomizer();
+ @ConditionalOnMissingBean(io.micrometer.tracing.SpanCustomizer.class)
+ io.micrometer.tracing.otel.bridge.OtelSpanCustomizer otelSpanCustomizer() {
+ return new io.micrometer.tracing.otel.bridge.OtelSpanCustomizer();
}
@Configuration(proxyBeanMethods = false)
@@ -190,29 +159,29 @@ public class OpenTelemetryAutoConfiguration {
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_PROPAGATION, name = "type", havingValue =
"W3C",
matchIfMissing = true)
- TextMapPropagator
w3cTextMapPropagatorWithBaggage(OtelCurrentTraceContext
otelCurrentTraceContext) {
+ io.opentelemetry.context.propagation.TextMapPropagator
w3cTextMapPropagatorWithBaggage(io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext
otelCurrentTraceContext) {
List<String> remoteFields =
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields();
- return
TextMapPropagator.composite(W3CTraceContextPropagator.getInstance(),
- W3CBaggagePropagator.getInstance(), new
BaggageTextMapPropagator(remoteFields,
- new OtelBaggageManager(otelCurrentTraceContext,
remoteFields, Collections.emptyList())));
+ return
io.opentelemetry.context.propagation.TextMapPropagator.composite(io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator.getInstance(),
+
io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator.getInstance(),
new
io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator(remoteFields,
+ new
io.micrometer.tracing.otel.bridge.OtelBaggageManager(otelCurrentTraceContext,
remoteFields, Collections.emptyList())));
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_PROPAGATION, name = "type", havingValue = "B3")
- TextMapPropagator b3BaggageTextMapPropagator(OtelCurrentTraceContext
otelCurrentTraceContext) {
+ io.opentelemetry.context.propagation.TextMapPropagator
b3BaggageTextMapPropagator(io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext
otelCurrentTraceContext) {
List<String> remoteFields =
this.dubboConfigProperties.getTracing().getBaggage().getRemoteFields();
- return
TextMapPropagator.composite(B3Propagator.injectingSingleHeader(),
- new BaggageTextMapPropagator(remoteFields,
- new OtelBaggageManager(otelCurrentTraceContext,
remoteFields, Collections.emptyList())));
+ return
io.opentelemetry.context.propagation.TextMapPropagator.composite(io.opentelemetry.extension.trace.propagation.B3Propagator.injectingSingleHeader(),
+ new
io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator(remoteFields,
+ new
io.micrometer.tracing.otel.bridge.OtelBaggageManager(otelCurrentTraceContext,
remoteFields, Collections.emptyList())));
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_BAGGAGE_CORRELATION, name = "enabled",
matchIfMissing = true)
- Slf4JBaggageEventListener otelSlf4JBaggageEventListener() {
- return new
Slf4JBaggageEventListener(this.dubboConfigProperties.getTracing().getBaggage().getCorrelation().getFields());
+ io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener
otelSlf4JBaggageEventListener() {
+ return new
io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener(this.dubboConfigProperties.getTracing().getBaggage().getCorrelation().getFields());
}
}
@@ -224,31 +193,31 @@ public class OpenTelemetryAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_PROPAGATION, name = "type", havingValue = "B3")
- B3Propagator b3TextMapPropagator() {
- return B3Propagator.injectingSingleHeader();
+ io.opentelemetry.extension.trace.propagation.B3Propagator
b3TextMapPropagator() {
+ return
io.opentelemetry.extension.trace.propagation.B3Propagator.injectingSingleHeader();
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix =
ObservabilityUtils.DUBBO_TRACING_PROPAGATION, name = "type", havingValue =
"W3C",
matchIfMissing = true)
- W3CTraceContextPropagator w3cTextMapPropagatorWithoutBaggage() {
- return W3CTraceContextPropagator.getInstance();
+ io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator
w3cTextMapPropagatorWithoutBaggage() {
+ return
io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator.getInstance();
}
}
- static class OTelEventPublisher implements OtelTracer.EventPublisher {
+ static class OTelEventPublisher implements
io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher {
- private final List<EventListener> listeners;
+ private final List<io.micrometer.tracing.otel.bridge.EventListener>
listeners;
- OTelEventPublisher(List<EventListener> listeners) {
+
OTelEventPublisher(List<io.micrometer.tracing.otel.bridge.EventListener>
listeners) {
this.listeners = listeners;
}
@Override
public void publishEvent(Object event) {
- for (EventListener listener : this.listeners) {
+ for (io.micrometer.tracing.otel.bridge.EventListener listener :
this.listeners) {
listener.onEvent(event);
}
}