This is an automated email from the ASF dual-hosted git repository.
congguoqinghuhu pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new b14e5e3a12 fix: fix observationsender error & feat: add
DubboTracingObservationHandler (#13818)
b14e5e3a12 is described below
commit b14e5e3a12bea550b9fce3f3a94913e5d2ad3be5
Author: conghuhu <[email protected]>
AuthorDate: Wed Mar 6 19:33:40 2024 -0600
fix: fix observationsender error & feat: add DubboTracingObservationHandler
(#13818)
---
.../dubbo-demo-spring-boot-consumer/pom.xml | 6 +++
.../src/main/resources/application.yml | 3 --
.../src/main/resources/log4j2.xml | 2 +-
.../dubbo-demo-spring-boot-provider/pom.xml | 6 +++
.../src/main/resources/application.yml | 4 --
.../src/main/resources/log4j2.xml | 2 +-
...g.apache.dubbo.rpc.cluster.filter.ClusterFilter | 1 -
.../dubbo/tracing/DubboObservationRegistry.java | 8 +++-
.../dubbo/tracing/context/DubboClientContext.java | 3 +-
.../dubbo/tracing/context/DubboServerContext.java | 3 +-
.../tracing/filter/ObservationReceiverFilter.java | 4 +-
.../tracing/filter/ObservationSenderFilter.java | 4 +-
.../DubboClientTracingObservationHandler.java} | 37 ++++++----------
.../DubboServerTracingObservationHandler.java | 51 ++++++++++++++++++++++
.../DubboMicrometerTracingAutoConfiguration.java | 25 ++++++++++-
.../autoconfigure/ObservationHandlerGrouping.java | 7 ++-
.../brave/BraveAutoConfiguration.java | 8 ++--
.../otel/OpenTelemetryAutoConfiguration.java | 23 +++++-----
18 files changed, 139 insertions(+), 58 deletions(-)
diff --git
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml
index 9179bd6ff6..024baf4152 100644
--- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml
+++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/pom.xml
@@ -101,6 +101,12 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-logging</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
diff --git
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
index 10d0ec74e7..20bee1f724 100644
---
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
+++
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml
@@ -32,7 +32,4 @@ dubbo:
metadata-report:
address: zookeeper://127.0.0.1:2181
-logging:
- pattern:
- level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
diff --git
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
index 69e1321d22..87c6dd5b19 100644
---
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
+++
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/log4j2.xml
@@ -18,7 +18,7 @@
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
- <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta}
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue}
%style{-|}{White}
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}"
disableAnsi="false" charset="UTF-8"/>
+ <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta}
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue}
[%X{traceId}, %X{spanId}] %style{-|}{White}
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}"
disableAnsi="false" charset="UTF-8"/>
</Console>
</Appenders>
<Loggers>
diff --git
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml
index a14a0199b8..2c0d523449 100644
--- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml
+++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/pom.xml
@@ -101,6 +101,12 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-logging</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
diff --git
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
index d06fdfb28c..b1789be60f 100644
---
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
+++
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml
@@ -41,7 +41,3 @@ dubbo:
exporter:
enabled: true
enable-metadata: true
-logging:
- pattern:
- level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]'
-
diff --git
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
index 69e1321d22..87c6dd5b19 100644
---
a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
+++
b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/log4j2.xml
@@ -18,7 +18,7 @@
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
- <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta}
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue}
%style{-|}{White}
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}"
disableAnsi="false" charset="UTF-8"/>
+ <PatternLayout pattern="%style{%d{HH:mm:ss.SSS}}{Magenta}
%style{|-}{White}%highlight{%-5p} [%t] %style{%40.40c}{Cyan}:%style{%-3L}{Blue}
[%X{traceId}, %X{spanId}] %style{-|}{White}
%m%n%rEx{filters(jdk.internal.reflect,java.lang.reflect,sun.reflect)}"
disableAnsi="false" charset="UTF-8"/>
</Console>
</Appenders>
<Loggers>
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
index b9b03c571e..3d5a3f4937 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
+++
b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter
@@ -1,3 +1,2 @@
-observationsender=org.apache.dubbo.rpc.cluster.filter.support.ObservationSenderFilter
metricsClusterFilter=org.apache.dubbo.rpc.cluster.filter.support.MetricsClusterFilter
monitor=org.apache.dubbo.monitor.support.MonitorClusterFilter
diff --git
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
index 5ace0906b0..5e9b7b35b3 100644
---
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
+++
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java
@@ -23,6 +23,8 @@ import org.apache.dubbo.config.TracingConfig;
import org.apache.dubbo.metrics.MetricsGlobalRegistry;
import org.apache.dubbo.metrics.utils.MetricsSupportUtil;
import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.tracing.handler.DubboClientTracingObservationHandler;
+import org.apache.dubbo.tracing.handler.DubboServerTracingObservationHandler;
import org.apache.dubbo.tracing.tracer.PropagatorProvider;
import org.apache.dubbo.tracing.tracer.PropagatorProviderFactory;
import org.apache.dubbo.tracing.tracer.TracerProvider;
@@ -87,7 +89,11 @@ public class DubboObservationRegistry {
tracer, propagator),
new
io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<>(
tracer, propagator),
- new
io.micrometer.tracing.handler.DefaultTracingObservationHandler(tracer)));
+ new
io.micrometer.tracing.handler.DefaultTracingObservationHandler(tracer)))
+ .observationHandler(
+ new
io.micrometer.observation.ObservationHandler.FirstMatchingCompositeObservationHandler(
+ new
DubboClientTracingObservationHandler<>(tracer),
+ new
DubboServerTracingObservationHandler<>(tracer)));
if (MetricsSupportUtil.isSupportMetrics()) {
io.micrometer.core.instrument.MeterRegistry meterRegistry =
diff --git
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
index 3491585f40..ca91ea1c81 100644
---
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
+++
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
@@ -21,6 +21,7 @@ import org.apache.dubbo.rpc.Invoker;
import java.util.Objects;
+import io.micrometer.observation.transport.Kind;
import io.micrometer.observation.transport.SenderContext;
/**
@@ -33,7 +34,7 @@ public class DubboClientContext extends
SenderContext<Invocation> {
private final Invocation invocation;
public DubboClientContext(Invoker<?> invoker, Invocation invocation) {
- super((map, key, value) ->
Objects.requireNonNull(map).setAttachment(key, value));
+ super((carrier, key, value) ->
Objects.requireNonNull(carrier).setAttachment(key, value), Kind.CLIENT);
this.invoker = invoker;
this.invocation = invocation;
setCarrier(invocation);
diff --git
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
index 85de37203c..6ffe5e27e2 100644
---
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
+++
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java
@@ -19,6 +19,7 @@ package org.apache.dubbo.tracing.context;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
+import io.micrometer.observation.transport.Kind;
import io.micrometer.observation.transport.ReceiverContext;
/**
@@ -31,7 +32,7 @@ public class DubboServerContext extends
ReceiverContext<Invocation> {
private final Invocation invocation;
public DubboServerContext(Invoker<?> invoker, Invocation invocation) {
- super((stringObjectMap, s) ->
String.valueOf(stringObjectMap.getAttachment(s)));
+ super((carrier, s) -> String.valueOf(carrier.getAttachment(s)),
Kind.SERVER);
this.invoker = invoker;
this.invocation = invocation;
setCarrier(invocation);
diff --git
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
index 75d70d26f7..f19ada47a2 100644
---
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
+++
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java
@@ -44,9 +44,9 @@ import static
org.apache.dubbo.common.constants.CommonConstants.PROVIDER;
onClass = "io.micrometer.observation.NoopObservationRegistry")
public class ObservationReceiverFilter implements Filter, BaseFilter.Listener,
ScopeModelAware {
- private ObservationRegistry observationRegistry;
+ private final ObservationRegistry observationRegistry;
- private DubboServerObservationConvention serverObservationConvention;
+ private final DubboServerObservationConvention serverObservationConvention;
public ObservationReceiverFilter(ApplicationModel applicationModel) {
observationRegistry =
applicationModel.getBeanFactory().getBean(ObservationRegistry.class);
diff --git
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
index 3d0cd0ab20..ce93e7ff7a 100644
---
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
+++
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java
@@ -45,9 +45,9 @@ import static
org.apache.dubbo.common.constants.CommonConstants.CONSUMER;
onClass = "io.micrometer.observation.NoopObservationRegistry")
public class ObservationSenderFilter implements ClusterFilter,
BaseFilter.Listener, ScopeModelAware {
- private ObservationRegistry observationRegistry;
+ private final ObservationRegistry observationRegistry;
- private DubboClientObservationConvention clientObservationConvention;
+ private final DubboClientObservationConvention clientObservationConvention;
public ObservationSenderFilter(ApplicationModel applicationModel) {
observationRegistry =
applicationModel.getBeanFactory().getBean(ObservationRegistry.class);
diff --git
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboClientTracingObservationHandler.java
similarity index 54%
copy from
dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
copy to
dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboClientTracingObservationHandler.java
index 3491585f40..1f6542ba4f 100644
---
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java
+++
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboClientTracingObservationHandler.java
@@ -14,36 +14,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.dubbo.tracing.context;
+package org.apache.dubbo.tracing.handler;
-import org.apache.dubbo.rpc.Invocation;
-import org.apache.dubbo.rpc.Invoker;
-
-import java.util.Objects;
+import org.apache.dubbo.tracing.context.DubboClientContext;
+import io.micrometer.observation.Observation;
+import io.micrometer.observation.ObservationHandler;
import io.micrometer.observation.transport.SenderContext;
+import io.micrometer.tracing.Tracer;
-/**
- * Provider context for RPC.
- */
-public class DubboClientContext extends SenderContext<Invocation> {
-
- private final Invoker<?> invoker;
+public class DubboClientTracingObservationHandler<T extends
DubboClientContext> implements ObservationHandler<T> {
+ private final Tracer tracer;
- private final Invocation invocation;
-
- public DubboClientContext(Invoker<?> invoker, Invocation invocation) {
- super((map, key, value) ->
Objects.requireNonNull(map).setAttachment(key, value));
- this.invoker = invoker;
- this.invocation = invocation;
- setCarrier(invocation);
+ public DubboClientTracingObservationHandler(Tracer tracer) {
+ this.tracer = tracer;
}
- public Invoker<?> getInvoker() {
- return invoker;
- }
+ @Override
+ public void onScopeOpened(T context) {}
- public Invocation getInvocation() {
- return invocation;
+ @Override
+ public boolean supportsContext(Observation.Context context) {
+ return context instanceof SenderContext;
}
}
diff --git
a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboServerTracingObservationHandler.java
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboServerTracingObservationHandler.java
new file mode 100644
index 0000000000..e117b3ab68
--- /dev/null
+++
b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/handler/DubboServerTracingObservationHandler.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ * http://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.apache.dubbo.tracing.handler;
+
+import org.apache.dubbo.rpc.RpcContext;
+import org.apache.dubbo.tracing.context.DubboServerContext;
+
+import io.micrometer.observation.Observation;
+import io.micrometer.observation.ObservationHandler;
+import io.micrometer.observation.transport.ReceiverContext;
+import io.micrometer.tracing.TraceContext;
+import io.micrometer.tracing.Tracer;
+
+public class DubboServerTracingObservationHandler<T extends
DubboServerContext> implements ObservationHandler<T> {
+
+ private static final String DEFAULT_TRACE_ID_KEY = "traceId";
+
+ private final Tracer tracer;
+
+ public DubboServerTracingObservationHandler(Tracer tracer) {
+ this.tracer = tracer;
+ }
+
+ @Override
+ public void onScopeOpened(T context) {
+ TraceContext traceContext = tracer.currentTraceContext().context();
+ if (traceContext == null) {
+ return;
+ }
+ RpcContext.getServerContext().setAttachment(DEFAULT_TRACE_ID_KEY,
traceContext.traceId());
+ }
+
+ @Override
+ public boolean supportsContext(Observation.Context context) {
+ return context instanceof ReceiverContext;
+ }
+}
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
index 691dea9d9d..8ec987dabf 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboMicrometerTracingAutoConfiguration.java
@@ -16,7 +16,10 @@
*/
package org.apache.dubbo.spring.boot.observability.autoconfigure;
+import org.apache.dubbo.spring.boot.autoconfigure.DubboAutoConfiguration;
import
org.apache.dubbo.spring.boot.observability.autoconfigure.annotation.ConditionalOnDubboTracingEnable;
+import org.apache.dubbo.tracing.handler.DubboClientTracingObservationHandler;
+import org.apache.dubbo.tracing.handler.DubboServerTracingObservationHandler;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -40,7 +43,9 @@ import static
org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
"io.micrometer.tracing.Tracer",
"io.micrometer.tracing.propagation.Propagator"
})
-@AutoConfigureAfter(name =
"org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration")
+@AutoConfigureAfter(
+ name =
"org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration",
+ value = DubboAutoConfiguration.class)
public class DubboMicrometerTracingAutoConfiguration {
/**
@@ -82,4 +87,22 @@ public class DubboMicrometerTracingAutoConfiguration {
io.micrometer.tracing.Tracer tracer,
io.micrometer.tracing.propagation.Propagator propagator) {
return new
io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<>(tracer,
propagator);
}
+
+ @Bean
+ @ConditionalOnMissingBean
+ @ConditionalOnBean({io.micrometer.tracing.Tracer.class})
+ @Order(SENDER_TRACING_OBSERVATION_HANDLER_ORDER)
+ public DubboClientTracingObservationHandler<?>
dubboClientTracingObservationHandler(
+ io.micrometer.tracing.Tracer tracer) {
+ return new DubboClientTracingObservationHandler<>(tracer);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ @ConditionalOnBean({io.micrometer.tracing.Tracer.class})
+ @Order(RECEIVER_TRACING_OBSERVATION_HANDLER_ORDER)
+ public DubboServerTracingObservationHandler<?>
dubboServerTracingObservationHandler(
+ io.micrometer.tracing.Tracer tracer) {
+ return new DubboServerTracingObservationHandler<>(tracer);
+ }
}
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
index d2d1820352..4d848dbea8 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/ObservationHandlerGrouping.java
@@ -16,6 +16,7 @@
*/
package org.apache.dubbo.spring.boot.observability.autoconfigure;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -47,12 +48,13 @@ class ObservationHandlerGrouping {
void apply(List<ObservationHandler<?>> handlers,
ObservationRegistry.ObservationConfig config) {
MultiValueMap<Class<? extends ObservationHandler>,
ObservationHandler<?>> groupings =
new LinkedMultiValueMap<>();
+ List<ObservationHandler<?>> handlersWithoutCategory = new
ArrayList<>();
for (ObservationHandler<?> handler : handlers) {
Class<? extends ObservationHandler> category =
findCategory(handler);
if (category != null) {
groupings.add(category, handler);
} else {
- config.observationHandler(handler);
+ handlersWithoutCategory.add(handler);
}
}
for (Class<? extends ObservationHandler> category : this.categories) {
@@ -62,6 +64,9 @@ class ObservationHandlerGrouping {
new
ObservationHandler.FirstMatchingCompositeObservationHandler(handlerGroup));
}
}
+ for (ObservationHandler<?> observationHandler :
handlersWithoutCategory) {
+ config.observationHandler(observationHandler);
+ }
}
private Class<? extends ObservationHandler>
findCategory(ObservationHandler<?> handler) {
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
index 99ffc78136..03bcee9ed8 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/brave/BraveAutoConfiguration.java
@@ -36,6 +36,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
+import org.springframework.core.env.Environment;
import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
@@ -63,7 +64,7 @@ public class BraveAutoConfiguration {
/**
* Default value for application name if {@code spring.application.name}
is not set.
*/
- private static final String DEFAULT_APPLICATION_NAME = "dubbo-application";
+ private static final String DEFAULT_APPLICATION_NAME =
"unknown_dubbo_service";
private final DubboConfigurationProperties dubboConfigProperties;
@@ -87,14 +88,15 @@ public class BraveAutoConfiguration {
@Bean
@ConditionalOnMissingBean
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 =
dubboConfigProperties.getApplication().getName();
- if (StringUtils.isEmpty(applicationName)) {
- applicationName = DEFAULT_APPLICATION_NAME;
+ if (StringUtils.isBlank(applicationName)) {
+ applicationName =
environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME);
}
brave.Tracing.Builder builder = brave.Tracing.newBuilder()
.currentTraceContext(currentTraceContext)
diff --git
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
index 4eba4950dc..678b2e48e0 100644
---
a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
+++
b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/otel/OpenTelemetryAutoConfiguration.java
@@ -18,8 +18,7 @@ package
org.apache.dubbo.spring.boot.observability.autoconfigure.otel;
import org.apache.dubbo.common.Version;
import org.apache.dubbo.common.utils.ClassUtils;
-import org.apache.dubbo.config.ApplicationConfig;
-import org.apache.dubbo.rpc.model.ModuleModel;
+import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.spring.boot.autoconfigure.DubboConfigurationProperties;
import
org.apache.dubbo.spring.boot.observability.autoconfigure.DubboMicrometerTracingAutoConfiguration;
import
org.apache.dubbo.spring.boot.observability.autoconfigure.ObservabilityUtils;
@@ -38,6 +37,7 @@ import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import
org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_PREFIX;
@@ -62,15 +62,12 @@ public class OpenTelemetryAutoConfiguration {
/**
* Default value for application name if {@code spring.application.name}
is not set.
*/
- private static final String DEFAULT_APPLICATION_NAME = "application";
+ private static final String DEFAULT_APPLICATION_NAME =
"unknown_dubbo_service";
private final DubboConfigurationProperties dubboConfigProperties;
- private final ModuleModel moduleModel;
-
- OpenTelemetryAutoConfiguration(DubboConfigurationProperties
dubboConfigProperties, ModuleModel moduleModel) {
+ OpenTelemetryAutoConfiguration(DubboConfigurationProperties
dubboConfigProperties) {
this.dubboConfigProperties = dubboConfigProperties;
- this.moduleModel = moduleModel;
}
@Bean
@@ -87,14 +84,14 @@ public class OpenTelemetryAutoConfiguration {
@Bean
@ConditionalOnMissingBean
io.opentelemetry.sdk.trace.SdkTracerProvider otelSdkTracerProvider(
+ Environment environment,
ObjectProvider<io.opentelemetry.sdk.trace.SpanProcessor>
spanProcessors,
io.opentelemetry.sdk.trace.samplers.Sampler sampler) {
- String applicationName = moduleModel
- .getApplicationModel()
- .getApplicationConfigManager()
- .getApplication()
- .map(ApplicationConfig::getName)
- .orElse(DEFAULT_APPLICATION_NAME);
+ String applicationName =
dubboConfigProperties.getApplication().getName();
+ if (StringUtils.isBlank(applicationName)) {
+ applicationName =
environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME);
+ }
+
// Due to https://github.com/micrometer-metrics/tracing/issues/343
String RESOURCE_ATTRIBUTES_CLASS_NAME =
"io.opentelemetry.semconv.ResourceAttributes";
boolean isLowVersion = !ClassUtils.isPresent(