From ea35f7ed5c1d6d2a6ede821f1481eb5088254d28 Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Tue, 20 Jun 2023 10:02:30 +0800 Subject: [PATCH] Revert "refactor: migrate tracing core from boot-start to dubbo deployer (#12453)" This reverts commit a613cae2 --- .artifacts | 1 - dubbo-cluster/pom.xml | 5 + .../support}/ObservationSenderFilter.java | 23 +- ...che.dubbo.rpc.cluster.filter.ClusterFilter | 1 + .../filter/AbstractObservationFilterTest.java | 84 +++++++ .../filter/ObservationSenderFilterTest.java | 7 +- .../common/constants/LoggerCodeConstants.java | 2 - .../dubbo/config/nested/BaggageConfig.java | 25 --- .../dubbo/config/nested/ExporterConfig.java | 37 +-- .../config/nested/PropagationConfig.java | 7 - .../dubbo/config/nested/SamplingConfig.java | 7 - dubbo-config/dubbo-config-api/pom.xml | 6 - .../deploy/DefaultApplicationDeployer.java | 117 +++++----- .../DefaultApplicationDeployerTest.java | 6 +- dubbo-dependencies-bom/pom.xml | 17 +- dubbo-distribution/dubbo-all/pom.xml | 10 - dubbo-distribution/dubbo-bom/pom.xml | 7 - dubbo-distribution/dubbo-core-spi/pom.xml | 1 - dubbo-metrics/dubbo-metrics-api/pom.xml | 5 + .../apache/dubbo/metrics/aggregate/Pane.java | 0 .../metrics/aggregate/SlidingWindow.java | 0 ...ractDefaultDubboObservationConvention.java | 16 +- ...faultDubboClientObservationConvention.java | 7 +- ...faultDubboServerObservationConvention.java | 4 +- .../observation}/DubboClientContext.java | 9 +- .../DubboClientObservationConvention.java | 4 +- .../DubboObservationDocumentation.java | 2 +- .../observation}/DubboServerContext.java | 5 +- .../DubboServerObservationConvention.java | 4 +- .../metrics/utils/MetricsSupportUtil.java | 38 ---- .../aggregate/TimeWindowAggregatorTest.java | 3 +- ...tDubboClientObservationConventionTest.java | 5 +- ...tDubboServerObservationConventionTest.java | 6 +- .../utils/ObservationConventionUtils.java | 2 +- dubbo-metrics/dubbo-metrics-default/pom.xml | 5 + .../ObservationReceiverFilter.java | 19 +- .../internal/org.apache.dubbo.rpc.Filter | 2 + .../AbstractObservationFilterTest.java | 5 +- .../metrics/observation}/MockInvocation.java | 6 +- .../ObservationReceiverFilterTest.java | 12 +- dubbo-metrics/dubbo-tracing/pom.xml | 111 --------- .../tracing/DubboObservationRegistry.java | 90 -------- .../dubbo/tracing/exporter/TraceExporter.java | 37 --- .../exporter/TraceExporterFactory.java | 66 ------ .../tracing/exporter/otlp/OTlpExporter.java | 66 ------ .../exporter/zipkin/ZipkinExporter.java | 60 ----- .../tracing/tracer/PropagatorProvider.java | 29 --- .../tracer/PropagatorProviderFactory.java | 37 --- .../dubbo/tracing/tracer/TracerProvider.java | 30 --- .../tracing/tracer/TracerProviderFactory.java | 39 ---- .../tracer/brave/BravePropagatorProvider.java | 31 --- .../tracing/tracer/brave/BraveProvider.java | 41 ---- .../tracer/otel/OTelPropagatorProvider.java | 38 ---- .../tracer/otel/OpenTelemetryProvider.java | 212 ------------------ .../tracing/utils/ObservationSupportUtil.java | 49 ---- .../internal/org.apache.dubbo.rpc.Filter | 1 - ...che.dubbo.rpc.cluster.filter.ClusterFilter | 1 - .../tracer/PropagatorProviderFactoryTest.java | 34 --- .../otel/OTelPropagatorProviderTest.java | 39 ---- .../otel/OpenTelemetryProviderTest.java | 53 ----- .../utils/ObservationSupportUtilTest.java | 49 ---- dubbo-metrics/pom.xml | 1 - .../observability/autoconfigure/pom.xml | 6 - .../DubboObservationAutoConfiguration.java | 19 +- .../brave/BraveAutoConfiguration.java | 18 +- .../otel/OpenTelemetryAutoConfiguration.java | 17 +- dubbo-test/dubbo-dependencies-all/pom.xml | 6 +- 67 files changed, 250 insertions(+), 1452 deletions(-) rename {dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter => dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support}/ObservationSenderFilter.java (78%) create mode 100644 dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java rename {dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster}/filter/ObservationSenderFilterTest.java (92%) mode change 100644 => 100755 dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/Pane.java mode change 100644 => 100755 dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/SlidingWindow.java rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/AbstractDefaultDubboObservationConvention.java (87%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DefaultDubboClientObservationConvention.java (92%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DefaultDubboServerObservationConvention.java (94%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboClientContext.java (97%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboClientObservationConvention.java (92%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboObservationDocumentation.java (98%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboServerContext.java (97%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation}/DubboServerObservationConvention.java (92%) delete mode 100644 dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation}/DefaultDubboClientObservationConventionTest.java (94%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation}/DefaultDubboServerObservationConventionTest.java (93%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation}/utils/ObservationConventionUtils.java (97%) rename dubbo-metrics/{dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter => dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation}/ObservationReceiverFilter.java (80%) create mode 100644 dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter => dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation}/AbstractObservationFilterTest.java (94%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing => dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation}/MockInvocation.java (97%) rename dubbo-metrics/{dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter => dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation}/ObservationReceiverFilterTest.java (99%) delete mode 100644 dubbo-metrics/dubbo-tracing/pom.xml delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter delete mode 100644 dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java delete mode 100644 dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java diff --git a/.artifacts b/.artifacts index e18fed5eb5..539c51deed 100644 --- a/.artifacts +++ b/.artifacts @@ -114,5 +114,4 @@ dubbo-nacos-spring-boot-starter dubbo-zookeeper-spring-boot-starter dubbo-zookeeper-curator5-spring-boot-starter dubbo-spring-security -dubbo-tracing dubbo-xds diff --git a/dubbo-cluster/pom.xml b/dubbo-cluster/pom.xml index 08b83b8cca..130b7e3f7e 100644 --- a/dubbo-cluster/pom.xml +++ b/dubbo-cluster/pom.xml @@ -86,5 +86,10 @@ ${project.parent.version} true + + io.micrometer + micrometer-tracing-integration-test + test + diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ObservationSenderFilter.java similarity index 78% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java rename to dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ObservationSenderFilter.java index bce47b7b9a..233a5ed35b 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationSenderFilter.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/filter/support/ObservationSenderFilter.java @@ -14,9 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.rpc.cluster.filter.support; import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.metrics.observation.DefaultDubboClientObservationConvention; +import org.apache.dubbo.metrics.observation.DubboClientContext; +import org.apache.dubbo.metrics.observation.DubboClientObservationConvention; +import org.apache.dubbo.metrics.observation.DubboObservationDocumentation; import org.apache.dubbo.rpc.BaseFilter; import org.apache.dubbo.rpc.Filter; import org.apache.dubbo.rpc.Invocation; @@ -26,10 +30,6 @@ import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.cluster.filter.ClusterFilter; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ScopeModelAware; -import org.apache.dubbo.tracing.DefaultDubboClientObservationConvention; -import org.apache.dubbo.tracing.DubboClientObservationConvention; -import org.apache.dubbo.tracing.DubboObservationDocumentation; -import org.apache.dubbo.tracing.context.DubboClientContext; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationRegistry; @@ -39,7 +39,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.CONSUMER; /** * A {@link Filter} that creates an {@link Observation} around the outgoing message. */ -@Activate(group = CONSUMER, order = Integer.MIN_VALUE + 50, onClass = "io.micrometer.observation.NoopObservationRegistry") +@Activate(group = CONSUMER, order = -1, onClass = "io.micrometer.observation.NoopObservationRegistry") public class ObservationSenderFilter implements ClusterFilter, BaseFilter.Listener, ScopeModelAware { private ObservationRegistry observationRegistry; @@ -47,8 +47,12 @@ public class ObservationSenderFilter implements ClusterFilter, BaseFilter.Listen private DubboClientObservationConvention clientObservationConvention; public ObservationSenderFilter(ApplicationModel applicationModel) { - observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); - clientObservationConvention = applicationModel.getBeanFactory().getBean(DubboClientObservationConvention.class); + applicationModel.getApplicationConfigManager().getTracing().ifPresent(cfg -> { + if (Boolean.TRUE.equals(cfg.getEnabled())) { + observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); + clientObservationConvention = applicationModel.getBeanFactory().getBean(DubboClientObservationConvention.class); + } + }); } @Override @@ -71,9 +75,6 @@ public class ObservationSenderFilter implements ClusterFilter, BaseFilter.Listen if (observation == null) { return; } - if (appResponse != null && appResponse.hasException()) { - observation.error(appResponse.getException()); - } observation.stop(); } diff --git a/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter b/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter index 28a9e73853..cd0a2f44e8 100644 --- a/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter +++ b/dubbo-cluster/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter @@ -1,4 +1,5 @@ consumercontext=org.apache.dubbo.rpc.cluster.filter.support.ConsumerContextFilter consumer-classloader=org.apache.dubbo.rpc.cluster.filter.support.ConsumerClassLoaderFilter router-snapshot=org.apache.dubbo.rpc.cluster.router.RouterSnapshotFilter +observationsender=org.apache.dubbo.rpc.cluster.filter.support.ObservationSenderFilter metricsClusterFilter=org.apache.dubbo.rpc.cluster.filter.support.MetricsClusterFilter \ No newline at end of file diff --git a/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java new file mode 100644 index 0000000000..567e9cab3b --- /dev/null +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/AbstractObservationFilterTest.java @@ -0,0 +1,84 @@ +/* + * 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.rpc.cluster.filter; + +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.config.TracingConfig; +import org.apache.dubbo.rpc.AppResponse; +import org.apache.dubbo.rpc.BaseFilter; +import org.apache.dubbo.rpc.Invoker; +import org.apache.dubbo.rpc.RpcInvocation; +import org.apache.dubbo.rpc.model.ApplicationModel; + +import io.micrometer.tracing.test.SampleTestRunner; +import org.junit.jupiter.api.AfterEach; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +abstract class AbstractObservationFilterTest extends SampleTestRunner { + + ApplicationModel applicationModel; + RpcInvocation invocation; + + BaseFilter filter; + + Invoker invoker = mock(Invoker.class); + + static final String INTERFACE_NAME = "org.apache.dubbo.MockInterface"; + static final String METHOD_NAME = "mockMethod"; + static final String GROUP = "mockGroup"; + static final String VERSION = "1.0.0"; + + @AfterEach + public void teardown() { + if (applicationModel != null) { + applicationModel.destroy(); + } + } + + abstract BaseFilter createFilter(ApplicationModel applicationModel); + + void setupConfig() { + ApplicationConfig config = new ApplicationConfig(); + config.setName("MockObservations"); + + applicationModel = ApplicationModel.defaultModel(); + applicationModel.getApplicationConfigManager().setApplication(config); + + invocation = new RpcInvocation(new MockInvocation()); + invocation.addInvokedInvoker(invoker); + + applicationModel.getBeanFactory().registerBean(getObservationRegistry()); + TracingConfig tracingConfig = new TracingConfig(); + tracingConfig.setEnabled(true); + applicationModel.getApplicationConfigManager().setTracing(tracingConfig); + + filter = createFilter(applicationModel); + + given(invoker.invoke(invocation)).willReturn(new AppResponse("success")); + + initParam(); + } + + private void initParam() { + invocation.setTargetServiceUniqueName(GROUP + "/" + INTERFACE_NAME + ":" + VERSION); + invocation.setMethodName(METHOD_NAME); + invocation.setParameterTypes(new Class[] {String.class}); + } + +} diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationSenderFilterTest.java b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/ObservationSenderFilterTest.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationSenderFilterTest.java rename to dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/ObservationSenderFilterTest.java index 071bc0e978..1315686740 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationSenderFilterTest.java +++ b/dubbo-cluster/src/test/java/org/apache/dubbo/rpc/cluster/filter/ObservationSenderFilterTest.java @@ -15,22 +15,23 @@ * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.rpc.cluster.filter; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.RpcContext; -import org.apache.dubbo.rpc.cluster.filter.ClusterFilter; +import org.apache.dubbo.rpc.cluster.filter.support.ObservationSenderFilter; import org.apache.dubbo.rpc.model.ApplicationModel; import io.micrometer.common.KeyValues; import io.micrometer.core.tck.MeterRegistryAssert; +import io.micrometer.tracing.test.SampleTestRunner; import io.micrometer.tracing.test.simple.SpansAssert; import org.assertj.core.api.BDDAssertions; class ObservationSenderFilterTest extends AbstractObservationFilterTest { @Override - public SampleTestRunnerConsumer yourCode() { + public SampleTestRunner.SampleTestRunnerConsumer yourCode() { return (buildingBlocks, meterRegistry) -> { setupConfig(); setupAttachments(); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java index 83e7b62dfa..0a3bfa2125 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/constants/LoggerCodeConstants.java @@ -92,8 +92,6 @@ public interface LoggerCodeConstants { String VULNERABILITY_WARNING = "0-28"; - String COMMON_NOT_FOUND_TRACER_DEPENDENCY = "0-29"; - // Registry module diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java index b39f0ece30..beba9b5ddd 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/BaggageConfig.java @@ -39,19 +39,6 @@ public class BaggageConfig implements Serializable { */ private List remoteFields = new ArrayList<>(); - public BaggageConfig() { - } - - public BaggageConfig(Boolean enabled) { - this.enabled = enabled; - } - - public BaggageConfig(Boolean enabled, Correlation correlation, List remoteFields) { - this.enabled = enabled; - this.correlation = correlation; - this.remoteFields = remoteFields; - } - public Boolean getEnabled() { return enabled; } @@ -89,18 +76,6 @@ public class BaggageConfig implements Serializable { */ private List fields = new ArrayList<>(); - public Correlation() { - } - - public Correlation(boolean enabled) { - this.enabled = enabled; - } - - public Correlation(boolean enabled, List fields) { - this.enabled = enabled; - this.fields = fields; - } - public boolean isEnabled() { return this.enabled; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java index 871a5afbab..58de4dcd80 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/ExporterConfig.java @@ -56,28 +56,15 @@ public class ExporterConfig implements Serializable { private String endpoint; /** - * Connection timeout for requests to Zipkin. (seconds) + * Connection timeout for requests to Zipkin. */ private Duration connectTimeout = Duration.ofSeconds(1); /** - * Read timeout for requests to Zipkin. (seconds) + * Read timeout for requests to Zipkin. */ private Duration readTimeout = Duration.ofSeconds(10); - public ZipkinConfig() { - } - - public ZipkinConfig(String endpoint) { - this.endpoint = endpoint; - } - - public ZipkinConfig(String endpoint, Duration connectTimeout, Duration readTimeout) { - this.endpoint = endpoint; - this.connectTimeout = connectTimeout; - this.readTimeout = readTimeout; - } - public String getEndpoint() { return endpoint; } @@ -111,7 +98,7 @@ public class ExporterConfig implements Serializable { private String endpoint; /** - * The maximum time to wait for the collector to process an exported batch of spans. (seconds) + * The maximum time to wait for the collector to process an exported batch of spans. */ private Duration timeout = Duration.ofSeconds(10); @@ -123,24 +110,6 @@ public class ExporterConfig implements Serializable { private Map headers = new HashMap<>(); - public OtlpConfig() { - } - - public OtlpConfig(String endpoint) { - this.endpoint = endpoint; - } - - public OtlpConfig(String endpoint, Duration timeout) { - this.endpoint = endpoint; - this.timeout = timeout; - } - - public OtlpConfig(String endpoint, Duration timeout, String compressionMethod) { - this.endpoint = endpoint; - this.timeout = timeout; - this.compressionMethod = compressionMethod; - } - public String getEndpoint() { return endpoint; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java index c574bd0e6d..8e52353323 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/PropagationConfig.java @@ -29,13 +29,6 @@ public class PropagationConfig implements Serializable { */ private String type = W3C; - public PropagationConfig() { - } - - public PropagationConfig(String type) { - this.type = type; - } - public String getType() { return type; } diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java index 0e98a98b5f..a605527190 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/nested/SamplingConfig.java @@ -25,13 +25,6 @@ public class SamplingConfig implements Serializable { */ private float probability = 0.10f; - public SamplingConfig() { - } - - public SamplingConfig(float probability) { - this.probability = probability; - } - public float getProbability() { return this.probability; } diff --git a/dubbo-config/dubbo-config-api/pom.xml b/dubbo-config/dubbo-config-api/pom.xml index 7bd4234ebd..fec3459350 100644 --- a/dubbo-config/dubbo-config-api/pom.xml +++ b/dubbo-config/dubbo-config-api/pom.xml @@ -72,12 +72,6 @@ ${project.parent.version} - - org.apache.dubbo - dubbo-tracing - ${project.parent.version} - - org.apache.dubbo dubbo-monitor-api diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java index 6302ee6eb3..ac012ee3d5 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/deploy/DefaultApplicationDeployer.java @@ -38,6 +38,7 @@ import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.threadpool.manager.ExecutorRepository; import org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository; import org.apache.dubbo.common.utils.ArrayUtils; +import org.apache.dubbo.common.utils.ClassUtils; import org.apache.dubbo.common.utils.CollectionUtils; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.ApplicationConfig; @@ -46,7 +47,6 @@ import org.apache.dubbo.config.DubboShutdownHook; import org.apache.dubbo.config.MetadataReportConfig; import org.apache.dubbo.config.MetricsConfig; import org.apache.dubbo.config.RegistryConfig; -import org.apache.dubbo.config.TracingConfig; import org.apache.dubbo.config.context.ConfigManager; import org.apache.dubbo.config.utils.CompositeReferenceCache; import org.apache.dubbo.config.utils.ConfigValidationUtils; @@ -60,7 +60,6 @@ import org.apache.dubbo.metrics.report.DefaultMetricsReporterFactory; import org.apache.dubbo.metrics.report.MetricsReporter; import org.apache.dubbo.metrics.report.MetricsReporterFactory; import org.apache.dubbo.metrics.service.MetricsServiceExporter; -import org.apache.dubbo.metrics.utils.MetricsSupportUtil; import org.apache.dubbo.registry.Registry; import org.apache.dubbo.registry.RegistryFactory; import org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataUtils; @@ -71,8 +70,6 @@ import org.apache.dubbo.rpc.model.ModuleServiceRepository; import org.apache.dubbo.rpc.model.ProviderModel; import org.apache.dubbo.rpc.model.ScopeModel; import org.apache.dubbo.rpc.model.ScopeModelUtil; -import org.apache.dubbo.tracing.DubboObservationRegistry; -import org.apache.dubbo.tracing.utils.ObservationSupportUtil; import java.io.IOException; import java.util.ArrayList; @@ -155,7 +152,7 @@ public class DefaultApplicationDeployer extends AbstractDeployer deployListeners = applicationModel.getExtensionLoader(ApplicationDeployListener.class) - .getSupportedExtensionInstances(); + .getSupportedExtensionInstances(); for (ApplicationDeployListener listener : deployListeners) { this.addDeployListener(listener); } @@ -229,9 +226,6 @@ public class DefaultApplicationDeployer extends AbstractDeployer defaultRegistries = configManager.getDefaultRegistries(); if (defaultRegistries.size() > 0) { defaultRegistries - .stream() - .filter(this::isUsedRegistryAsConfigCenter) - .map(this::registryAsConfigCenter) - .forEach(configCenter -> { - if (configManager.getConfigCenter(configCenter.getId()).isPresent()) { - return; - } - configManager.addConfigCenter(configCenter); - logger.info("use registry as config-center: " + configCenter); + .stream() + .filter(this::isUsedRegistryAsConfigCenter) + .map(this::registryAsConfigCenter) + .forEach(configCenter -> { + if (configManager.getConfigCenter(configCenter.getId()).isPresent()) { + return; + } + configManager.addConfigCenter(configCenter); + logger.info("use registry as config-center: " + configCenter); - }); + }); } } @@ -378,16 +372,16 @@ public class DefaultApplicationDeployer extends AbstractDeployer configOptional = configManager.getMetrics(); //If no specific metrics type is configured and there is no Prometheus dependency in the dependencies. MetricsConfig metricsConfig = configOptional.orElse(new MetricsConfig(applicationModel)); if (StringUtils.isBlank(metricsConfig.getProtocol())) { - metricsConfig.setProtocol(MetricsSupportUtil.isSupportPrometheus() ? PROTOCOL_PROMETHEUS : PROTOCOL_DEFAULT); + metricsConfig.setProtocol(isSupportPrometheus() ? PROTOCOL_PROMETHEUS : PROTOCOL_DEFAULT); } collector.setCollectEnabled(true); collector.collectApplication(); @@ -415,35 +409,26 @@ public class DefaultApplicationDeployer extends AbstractDeployer 1.10.0"); - } - return; - } - if (!ObservationSupportUtil.isSupportTracing()) { - if (logger.isDebugEnabled()) { - logger.debug("Not found micrometer-tracing dependency, skip init ObservationRegistry."); - } - return; - } - Optional configOptional = configManager.getTracing(); - if (!configOptional.isPresent() || !configOptional.get().getEnabled()) { - return; - } + public boolean isSupportMetrics() { + return isClassPresent("io.micrometer.core.instrument.MeterRegistry"); + } - DubboObservationRegistry dubboObservationRegistry = new DubboObservationRegistry(applicationModel, configOptional.get()); - dubboObservationRegistry.initObservationRegistry(); + public static boolean isSupportPrometheus() { + return isClassPresent("io.micrometer.prometheus.PrometheusConfig") + && isClassPresent("io.prometheus.client.exporter.BasicAuthHttpConnectionFactory") + && isClassPresent("io.prometheus.client.exporter.HttpConnectionFactory") + && isClassPresent("io.prometheus.client.exporter.PushGateway"); + } + + + private static boolean isClassPresent(String className) { + return ClassUtils.isPresent(className, DefaultApplicationDeployer.class.getClassLoader()); } private boolean isUsedRegistryAsConfigCenter(RegistryConfig registryConfig) { return isUsedRegistryAsCenter(registryConfig, registryConfig::getUseAsConfigCenter, "config", - DynamicConfigurationFactory.class); + DynamicConfigurationFactory.class); } private ConfigCenterConfig registryAsConfigCenter(RegistryConfig registryConfig) { @@ -485,9 +470,9 @@ public class DefaultApplicationDeployer extends AbstractDeployer metadataConfigsToOverride = originMetadataConfigs - .stream() - .filter(m -> Objects.isNull(m.getAddress())) - .collect(Collectors.toList()); + .stream() + .filter(m -> Objects.isNull(m.getAddress())) + .collect(Collectors.toList()); if (metadataConfigsToOverride.size() > 1) { return; @@ -498,12 +483,12 @@ public class DefaultApplicationDeployer extends AbstractDeployer defaultRegistries = configManager.getDefaultRegistries(); if (!defaultRegistries.isEmpty()) { defaultRegistries - .stream() - .filter(this::isUsedRegistryAsMetadataCenter) - .map(registryConfig -> registryAsMetadataCenter(registryConfig, metadataConfigToOverride)) - .forEach(metadataReportConfig -> { - overrideMetadataReportConfig(metadataConfigToOverride, metadataReportConfig); - }); + .stream() + .filter(this::isUsedRegistryAsMetadataCenter) + .map(registryConfig -> registryAsMetadataCenter(registryConfig, metadataConfigToOverride)) + .forEach(metadataReportConfig -> { + overrideMetadataReportConfig(metadataConfigToOverride, metadataReportConfig); + }); } } @@ -532,7 +517,7 @@ public class DefaultApplicationDeployer extends AbstractDeployer { - ServiceInstanceMetadataUtils.registerMetadataAndInstance(applicationModel); - return null; - } + () -> { + ServiceInstanceMetadataUtils.registerMetadataAndInstance(applicationModel); + return null; + } ); } catch (Exception e) { logger.error(CONFIG_REGISTER_INSTANCE_ERROR, "configuration server disconnected", "", "Register instance error.", e); @@ -1032,7 +1017,7 @@ public class DefaultApplicationDeployer extends AbstractDeployer1.8.0 0.1.35 1.11.1 - 1.26.0 - 2.16.4 + 1.1.2 3.3 0.16.0 @@ -232,20 +231,6 @@ pom import - - io.opentelemetry - opentelemetry-bom - ${opentelemetry.version} - pom - import - - - io.zipkin.reporter2 - zipkin-reporter-bom - ${zipkin-reporter.version} - pom - import - io.netty netty-all diff --git a/dubbo-distribution/dubbo-all/pom.xml b/dubbo-distribution/dubbo-all/pom.xml index 76fc002d1c..3951a9fd9d 100644 --- a/dubbo-distribution/dubbo-all/pom.xml +++ b/dubbo-distribution/dubbo-all/pom.xml @@ -219,15 +219,6 @@ true - - - org.apache.dubbo - dubbo-tracing - ${project.version} - compile - true - - org.apache.dubbo @@ -539,7 +530,6 @@ org.apache.dubbo:dubbo-metrics-metadata org.apache.dubbo:dubbo-metrics-config-center org.apache.dubbo:dubbo-metrics-prometheus - org.apache.dubbo:dubbo-tracing org.apache.dubbo:dubbo-monitor-api org.apache.dubbo:dubbo-monitor-default org.apache.dubbo:dubbo-qos diff --git a/dubbo-distribution/dubbo-bom/pom.xml b/dubbo-distribution/dubbo-bom/pom.xml index dac1366414..2d163f10e8 100644 --- a/dubbo-distribution/dubbo-bom/pom.xml +++ b/dubbo-distribution/dubbo-bom/pom.xml @@ -256,13 +256,6 @@ ${project.version} - - - org.apache.dubbo - dubbo-tracing - ${project.version} - - org.apache.dubbo diff --git a/dubbo-distribution/dubbo-core-spi/pom.xml b/dubbo-distribution/dubbo-core-spi/pom.xml index 2a441485f8..88939753e9 100644 --- a/dubbo-distribution/dubbo-core-spi/pom.xml +++ b/dubbo-distribution/dubbo-core-spi/pom.xml @@ -134,7 +134,6 @@ org.apache.dubbo:dubbo-metadata-api org.apache.dubbo:dubbo-metrics-api org.apache.dubbo:dubbo-metrics-default - org.apache.dubbo:dubbo-tracing org.apache.dubbo:dubbo-monitor-api org.apache.dubbo:dubbo-registry-api org.apache.dubbo:dubbo-remoting-api diff --git a/dubbo-metrics/dubbo-metrics-api/pom.xml b/dubbo-metrics/dubbo-metrics-api/pom.xml index 3c31ae389c..a35c238395 100644 --- a/dubbo-metrics/dubbo-metrics-api/pom.xml +++ b/dubbo-metrics/dubbo-metrics-api/pom.xml @@ -49,5 +49,10 @@ com.tdunning t-digest + + io.micrometer + micrometer-tracing-integration-test + test + diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/Pane.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/Pane.java old mode 100644 new mode 100755 diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/SlidingWindow.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/aggregate/SlidingWindow.java old mode 100644 new mode 100755 diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/AbstractDefaultDubboObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/AbstractDefaultDubboObservationConvention.java similarity index 87% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/AbstractDefaultDubboObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/AbstractDefaultDubboObservationConvention.java index a688a4c826..410af9d674 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/AbstractDefaultDubboObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/AbstractDefaultDubboObservationConvention.java @@ -14,20 +14,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import io.micrometer.common.KeyValues; -import io.micrometer.common.docs.KeyName; -import io.micrometer.common.lang.Nullable; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.common.constants.CommonConstants; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.support.RpcUtils; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_METHOD; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SERVICE; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SYSTEM; +import io.micrometer.common.KeyValues; +import io.micrometer.common.docs.KeyName; +import io.micrometer.common.lang.Nullable; + +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_METHOD; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SERVICE; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.RPC_SYSTEM; class AbstractDefaultDubboObservationConvention { KeyValues getLowCardinalityKeyValues(Invocation invocation) { diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConvention.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConvention.java index 481861d1f9..91e88da2a3 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConvention.java @@ -14,20 +14,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcContextAttachment; -import org.apache.dubbo.tracing.context.DubboClientContext; import io.micrometer.common.KeyValues; import java.util.List; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_NAME; -import static org.apache.dubbo.tracing.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_PORT; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_NAME; +import static org.apache.dubbo.metrics.observation.DubboObservationDocumentation.LowCardinalityKeyNames.NET_PEER_PORT; /** * Default implementation of the {@link DubboClientObservationConvention}. diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConvention.java similarity index 94% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConvention.java index c78be59806..adcebdbdac 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConvention.java @@ -14,9 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import org.apache.dubbo.tracing.context.DubboServerContext; +package org.apache.dubbo.metrics.observation; import io.micrometer.common.KeyValues; diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientContext.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientContext.java index f1998bc91a..910d6f74c0 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboClientContext.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientContext.java @@ -14,14 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.context; +package org.apache.dubbo.metrics.observation; -import java.util.Objects; - -import io.micrometer.observation.transport.SenderContext; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; +import io.micrometer.observation.transport.SenderContext; + +import java.util.Objects; + /** * Provider context for RPC. */ diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboClientObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientObservationConvention.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboClientObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientObservationConvention.java index 5bd74dec50..d33164294d 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboClientObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboClientObservationConvention.java @@ -14,9 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import org.apache.dubbo.tracing.context.DubboClientContext; +package org.apache.dubbo.metrics.observation; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationConvention; diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationDocumentation.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboObservationDocumentation.java similarity index 98% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationDocumentation.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboObservationDocumentation.java index cd0dfe3d61..855a2e01e1 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationDocumentation.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboObservationDocumentation.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; import io.micrometer.common.docs.KeyName; import io.micrometer.common.lang.NonNullApi; diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerContext.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerContext.java index 3e5bd13fae..bb1d7005d7 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/context/DubboServerContext.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerContext.java @@ -14,12 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.context; +package org.apache.dubbo.metrics.observation; -import io.micrometer.observation.transport.ReceiverContext; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; +import io.micrometer.observation.transport.ReceiverContext; + /** * Consumer context for RPC. */ diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboServerObservationConvention.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerObservationConvention.java similarity index 92% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboServerObservationConvention.java rename to dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerObservationConvention.java index 0f7917aded..678226ee7f 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboServerObservationConvention.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/observation/DubboServerObservationConvention.java @@ -14,9 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; - -import org.apache.dubbo.tracing.context.DubboServerContext; +package org.apache.dubbo.metrics.observation; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationConvention; diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java deleted file mode 100644 index e0a02f5f04..0000000000 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/utils/MetricsSupportUtil.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.metrics.utils; - -import org.apache.dubbo.common.utils.ClassUtils; - -public class MetricsSupportUtil { - - public static boolean isSupportMetrics() { - return isClassPresent("io.micrometer.core.instrument.MeterRegistry"); - } - - public static boolean isSupportPrometheus() { - return isClassPresent("io.micrometer.prometheus.PrometheusConfig") - && isClassPresent("io.prometheus.client.exporter.BasicAuthHttpConnectionFactory") - && isClassPresent("io.prometheus.client.exporter.HttpConnectionFactory") - && isClassPresent("io.prometheus.client.exporter.PushGateway"); - } - - private static boolean isClassPresent(String className) { - return ClassUtils.isPresent(className, MetricsSupportUtil.class.getClassLoader()); - } -} diff --git a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java index 2a660a5dd4..e0db96730f 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/aggregate/TimeWindowAggregatorTest.java @@ -17,9 +17,8 @@ package org.apache.dubbo.metrics.aggregate; - +import org.junit.Test; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import java.util.concurrent.TimeUnit; diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConventionTest.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConventionTest.java similarity index 94% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConventionTest.java rename to dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConventionTest.java index 0f1e641c4a..ce83f9e886 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboClientObservationConventionTest.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboClientObservationConventionTest.java @@ -14,12 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; +import org.apache.dubbo.metrics.observation.utils.ObservationConventionUtils; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcInvocation; -import org.apache.dubbo.tracing.context.DubboClientContext; -import org.apache.dubbo.tracing.utils.ObservationConventionUtils; import io.micrometer.common.KeyValues; import org.junit.jupiter.api.Assertions; diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConventionTest.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConventionTest.java similarity index 93% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConventionTest.java rename to dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConventionTest.java index 95a755cd98..7ca6398c9e 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/DefaultDubboServerObservationConventionTest.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/DefaultDubboServerObservationConventionTest.java @@ -14,13 +14,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; +import org.apache.dubbo.metrics.observation.utils.ObservationConventionUtils; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcInvocation; -import org.apache.dubbo.tracing.context.DubboClientContext; -import org.apache.dubbo.tracing.context.DubboServerContext; -import org.apache.dubbo.tracing.utils.ObservationConventionUtils; import io.micrometer.common.KeyValues; import org.junit.jupiter.api.Assertions; diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationConventionUtils.java b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/utils/ObservationConventionUtils.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationConventionUtils.java rename to dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/utils/ObservationConventionUtils.java index f0b75c8c2c..e6de96f069 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationConventionUtils.java +++ b/dubbo-metrics/dubbo-metrics-api/src/test/java/org/apache/dubbo/metrics/observation/utils/ObservationConventionUtils.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.utils; +package org.apache.dubbo.metrics.observation.utils; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.Invoker; diff --git a/dubbo-metrics/dubbo-metrics-default/pom.xml b/dubbo-metrics/dubbo-metrics-default/pom.xml index 0d2fd8a6bf..71be413c6a 100644 --- a/dubbo-metrics/dubbo-metrics-default/pom.xml +++ b/dubbo-metrics/dubbo-metrics-default/pom.xml @@ -41,5 +41,10 @@ micrometer-test test + + io.micrometer + micrometer-tracing-integration-test + test + diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilter.java similarity index 80% rename from dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java rename to dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilter.java index 25b7008c67..5a33ced437 100644 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilter.java +++ b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilter.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.common.extension.Activate; import org.apache.dubbo.rpc.BaseFilter; @@ -25,10 +25,6 @@ import org.apache.dubbo.rpc.Result; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.rpc.model.ScopeModelAware; -import org.apache.dubbo.tracing.DefaultDubboServerObservationConvention; -import org.apache.dubbo.tracing.DubboObservationDocumentation; -import org.apache.dubbo.tracing.DubboServerObservationConvention; -import org.apache.dubbo.tracing.context.DubboServerContext; import io.micrometer.observation.Observation; import io.micrometer.observation.ObservationRegistry; @@ -38,7 +34,7 @@ import static org.apache.dubbo.common.constants.CommonConstants.PROVIDER; /** * A {@link Filter} that creates an {@link Observation} around the incoming message. */ -@Activate(group = PROVIDER, order = Integer.MIN_VALUE + 50, onClass = "io.micrometer.observation.NoopObservationRegistry") +@Activate(group = PROVIDER, order = -1, onClass = "io.micrometer.observation.NoopObservationRegistry") public class ObservationReceiverFilter implements Filter, BaseFilter.Listener, ScopeModelAware { private ObservationRegistry observationRegistry; @@ -46,8 +42,12 @@ public class ObservationReceiverFilter implements Filter, BaseFilter.Listener, S private DubboServerObservationConvention serverObservationConvention; public ObservationReceiverFilter(ApplicationModel applicationModel) { - observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); - serverObservationConvention = applicationModel.getBeanFactory().getBean(DubboServerObservationConvention.class); + applicationModel.getApplicationConfigManager().getTracing().ifPresent(cfg -> { + if (Boolean.TRUE.equals(cfg.getEnabled())) { + observationRegistry = applicationModel.getBeanFactory().getBean(ObservationRegistry.class); + serverObservationConvention = applicationModel.getBeanFactory().getBean(DubboServerObservationConvention.class); + } + }); } @Override @@ -70,9 +70,6 @@ public class ObservationReceiverFilter implements Filter, BaseFilter.Listener, S if (observation == null) { return; } - if (appResponse != null && appResponse.hasException()) { - observation.error(appResponse.getException()); - } observation.stop(); } diff --git a/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter new file mode 100644 index 0000000000..5ee6c1d455 --- /dev/null +++ b/dubbo-metrics/dubbo-metrics-default/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter @@ -0,0 +1,2 @@ +metrics-beta=org.apache.dubbo.metrics.filter.MetricsFilter +observationreceiver=org.apache.dubbo.metrics.observation.ObservationReceiverFilter \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/AbstractObservationFilterTest.java b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/AbstractObservationFilterTest.java similarity index 94% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/AbstractObservationFilterTest.java rename to dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/AbstractObservationFilterTest.java index 046a0f1f95..31715ca94b 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/AbstractObservationFilterTest.java +++ b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/AbstractObservationFilterTest.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.TracingConfig; @@ -24,7 +24,6 @@ import org.apache.dubbo.rpc.BaseFilter; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.RpcInvocation; import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.MockInvocation; import io.micrometer.tracing.test.SampleTestRunner; import org.junit.jupiter.api.AfterEach; @@ -80,7 +79,7 @@ abstract class AbstractObservationFilterTest extends SampleTestRunner { private void initParam() { invocation.setTargetServiceUniqueName(GROUP + "/" + INTERFACE_NAME + ":" + VERSION); invocation.setMethodName(METHOD_NAME); - invocation.setParameterTypes(new Class[]{String.class}); + invocation.setParameterTypes(new Class[] {String.class}); } } diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/MockInvocation.java b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/MockInvocation.java similarity index 97% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/MockInvocation.java rename to dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/MockInvocation.java index cd9c0335dd..8cb43471d8 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/MockInvocation.java +++ b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/MockInvocation.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.dubbo.tracing; +package org.apache.dubbo.metrics.observation; import org.apache.dubbo.rpc.AttachmentsAdapter; import org.apache.dubbo.rpc.Invoker; @@ -68,11 +68,11 @@ public class MockInvocation extends RpcInvocation { } public Class[] getParameterTypes() { - return new Class[]{String.class}; + return new Class[] {String.class}; } public Object[] getArguments() { - return new Object[]{"aa"}; + return new Object[] {"aa"}; } public Map getAttachments() { diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilterTest.java b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilterTest.java similarity index 99% rename from dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilterTest.java rename to dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilterTest.java index 4cb0282430..91101e1aa0 100644 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/filter/ObservationReceiverFilterTest.java +++ b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/observation/ObservationReceiverFilterTest.java @@ -15,13 +15,8 @@ * limitations under the License. */ -package org.apache.dubbo.tracing.filter; +package org.apache.dubbo.metrics.observation; -import io.micrometer.common.KeyValues; -import io.micrometer.core.tck.MeterRegistryAssert; -import io.micrometer.tracing.Span; -import io.micrometer.tracing.Tracer; -import io.micrometer.tracing.test.simple.SpansAssert; import org.apache.dubbo.common.URL; import org.apache.dubbo.rpc.AppResponse; import org.apache.dubbo.rpc.Filter; @@ -32,6 +27,11 @@ import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.model.ApplicationModel; +import io.micrometer.common.KeyValues; +import io.micrometer.core.tck.MeterRegistryAssert; +import io.micrometer.tracing.Span; +import io.micrometer.tracing.Tracer; +import io.micrometer.tracing.test.simple.SpansAssert; import org.assertj.core.api.BDDAssertions; class ObservationReceiverFilterTest extends AbstractObservationFilterTest { diff --git a/dubbo-metrics/dubbo-tracing/pom.xml b/dubbo-metrics/dubbo-tracing/pom.xml deleted file mode 100644 index e50dae23bd..0000000000 --- a/dubbo-metrics/dubbo-tracing/pom.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - 4.0.0 - - org.apache.dubbo - dubbo-metrics - ${revision} - ../pom.xml - - - dubbo-tracing - jar - ${project.artifactId} - The tracing module of dubbo project - - - 11 - 11 - UTF-8 - false - - - - - org.apache.dubbo - dubbo-common - ${project.parent.version} - - - org.apache.dubbo - dubbo-cluster - ${project.parent.version} - - - org.apache.dubbo - dubbo-rpc-api - ${project.parent.version} - - - org.apache.dubbo - dubbo-metrics-default - ${project.parent.version} - - - - - io.micrometer - micrometer-core - - - io.micrometer - micrometer-tracing - - - io.micrometer - micrometer-test - test - - - io.micrometer - micrometer-tracing-integration-test - test - - - - - io.micrometer - micrometer-tracing-bridge-otel - true - - - io.micrometer - micrometer-tracing-bridge-brave - true - - - - - io.opentelemetry - opentelemetry-exporter-zipkin - true - - - io.opentelemetry - opentelemetry-exporter-otlp - true - - - io.zipkin.reporter2 - zipkin-reporter-brave - true - - - \ No newline at end of file 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 deleted file mode 100644 index a8497d998b..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/DubboObservationRegistry.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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; - -import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; -import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.common.utils.JsonUtils; -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.tracer.PropagatorProvider; -import org.apache.dubbo.tracing.tracer.PropagatorProviderFactory; -import org.apache.dubbo.tracing.tracer.TracerProvider; -import org.apache.dubbo.tracing.tracer.TracerProviderFactory; - -import static org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_NOT_FOUND_TRACER_DEPENDENCY; - -public class DubboObservationRegistry { - - private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(DubboObservationRegistry.class); - - private final ApplicationModel applicationModel; - - private final TracingConfig tracingConfig; - - public DubboObservationRegistry(ApplicationModel applicationModel, TracingConfig tracingConfig) { - this.applicationModel = applicationModel; - this.tracingConfig = tracingConfig; - } - - public void initObservationRegistry() { - // If get ObservationRegistry.class from external(eg Spring.), use external. - io.micrometer.observation.ObservationRegistry externalObservationRegistry = applicationModel.getBeanFactory().getBean(io.micrometer.observation.ObservationRegistry.class); - if (externalObservationRegistry != null) { - if (logger.isDebugEnabled()) { - logger.debug("ObservationRegistry.class from external is existed."); - } - return; - } - - if (logger.isDebugEnabled()) { - logger.debug("Tracing config is: " + JsonUtils.toJson(tracingConfig)); - } - - TracerProvider tracerProvider = TracerProviderFactory.getProvider(applicationModel, tracingConfig); - if (tracerProvider == null) { - logger.warn(COMMON_NOT_FOUND_TRACER_DEPENDENCY, "", "", "Can not found OpenTelemetry/Brave tracer dependencies, skip init ObservationRegistry."); - return; - } - // The real tracer will come from tracer implementation (OTel / Brave) - io.micrometer.tracing.Tracer tracer = tracerProvider.getTracer(); - - // The real propagator will come from tracer implementation (OTel / Brave) - PropagatorProvider propagatorProvider = PropagatorProviderFactory.getPropagatorProvider(); - io.micrometer.tracing.propagation.Propagator propagator = propagatorProvider != null ? propagatorProvider.getPropagator() : io.micrometer.tracing.propagation.Propagator.NOOP; - - io.micrometer.observation.ObservationRegistry registry = io.micrometer.observation.ObservationRegistry.create(); - registry.observationConfig() - // set up a first matching handler that creates spans - it comes from Micrometer Tracing. - // set up spans for sending and receiving data over the wire and a default one. - .observationHandler(new io.micrometer.observation.ObservationHandler.FirstMatchingCompositeObservationHandler( - new io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler<>(tracer, propagator), - new io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler<>(tracer, propagator), - new io.micrometer.tracing.handler.DefaultTracingObservationHandler(tracer))); - - if (MetricsSupportUtil.isSupportMetrics()) { - io.micrometer.core.instrument.MeterRegistry meterRegistry = MetricsGlobalRegistry.getCompositeRegistry(applicationModel); - registry.observationConfig().observationHandler(new io.micrometer.core.instrument.observation.DefaultMeterObservationHandler(meterRegistry)); - } - - applicationModel.getBeanFactory().registerBean(registry); - applicationModel.getBeanFactory().registerBean(tracer); - applicationModel.getBeanFactory().registerBean(propagator); - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java deleted file mode 100644 index 9b8f12ee4b..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporter.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.exporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.sdk.trace.export.SpanExporter; - -public interface TraceExporter { - - /** - * for otel - * - * @return - */ - SpanExporter getSpanExporter(); - - /** - * for brave - * - * @return - */ - SpanHandler getSpanHandler(); -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java deleted file mode 100644 index 7327cf038e..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/TraceExporterFactory.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.exporter; - -import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; -import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.common.utils.StringUtils; -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.otlp.OTlpExporter; -import org.apache.dubbo.tracing.exporter.zipkin.ZipkinExporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.sdk.trace.export.SpanExporter; - -import java.util.ArrayList; -import java.util.List; - -public class TraceExporterFactory { - - private final static ErrorTypeAwareLogger LOGGER = LoggerFactory.getErrorTypeAwareLogger(TraceExporterFactory.class); - - /** - * for OTel - */ - public static List getSpanExporters(ApplicationModel applicationModel, ExporterConfig exporterConfig) { - ExporterConfig.ZipkinConfig zipkinConfig = exporterConfig.getZipkinConfig(); - ExporterConfig.OtlpConfig otlpConfig = exporterConfig.getOtlpConfig(); - List res = new ArrayList<>(); - if (zipkinConfig != null && StringUtils.isNotEmpty(zipkinConfig.getEndpoint())) { - ZipkinExporter zipkinExporter = new ZipkinExporter(applicationModel, zipkinConfig); - LOGGER.info("Create zipkin span exporter."); - res.add(zipkinExporter.getSpanExporter()); - } - if (otlpConfig != null && StringUtils.isNotEmpty(otlpConfig.getEndpoint())) { - OTlpExporter otlpExporter = new OTlpExporter(applicationModel, otlpConfig); - LOGGER.info("Create OTlp span exporter."); - res.add(otlpExporter.getSpanExporter()); - } - - return res; - } - - /** - * for Brave - */ - public static List getSpanHandlers(ApplicationModel applicationModel, ExporterConfig exporterConfig) { - List res = new ArrayList<>(); - // TODO brave SpanHandler impl - return res; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java deleted file mode 100644 index 72da78a795..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/otlp/OTlpExporter.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.exporter.otlp; - -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.TraceExporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter; -import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter; -import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder; -import io.opentelemetry.sdk.trace.export.SpanExporter; - -import java.util.Map; - -public class OTlpExporter implements TraceExporter { - - private final ApplicationModel applicationModel; - private final ExporterConfig.OtlpConfig otlpConfig; - - public OTlpExporter(ApplicationModel applicationModel, ExporterConfig.OtlpConfig otlpConfig) { - this.applicationModel = applicationModel; - this.otlpConfig = otlpConfig; - } - - @Override - public SpanExporter getSpanExporter() { - OtlpGrpcSpanExporter externalOTlpGrpcSpanExporter = applicationModel.getBeanFactory().getBean(OtlpGrpcSpanExporter.class); - if (externalOTlpGrpcSpanExporter != null) { - return externalOTlpGrpcSpanExporter; - } - OtlpHttpSpanExporter externalOtlpHttpSpanExporter = applicationModel.getBeanFactory().getBean(OtlpHttpSpanExporter.class); - if (externalOtlpHttpSpanExporter != null) { - return externalOtlpHttpSpanExporter; - } - OtlpGrpcSpanExporterBuilder builder = OtlpGrpcSpanExporter.builder() - .setEndpoint(otlpConfig.getEndpoint()) - .setTimeout(otlpConfig.getTimeout()) - .setCompression(otlpConfig.getCompressionMethod()); - for (Map.Entry entry : otlpConfig.getHeaders().entrySet()) { - builder.addHeader(entry.getKey(), entry.getValue()); - } - return builder.build(); - } - - @Override - public SpanHandler getSpanHandler() { - // OTlp is only belong to OTel. - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java deleted file mode 100644 index c0c00c6fa8..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/exporter/zipkin/ZipkinExporter.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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.exporter.zipkin; - -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.TraceExporter; - -import brave.handler.SpanHandler; -import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter; -import io.opentelemetry.sdk.trace.export.SpanExporter; -import zipkin2.Span; -import zipkin2.codec.BytesEncoder; -import zipkin2.codec.SpanBytesEncoder; - -public class ZipkinExporter implements TraceExporter { - - private final ApplicationModel applicationModel; - private final ExporterConfig.ZipkinConfig zipkinConfig; - - public ZipkinExporter(ApplicationModel applicationModel, ExporterConfig.ZipkinConfig zipkinConfig) { - this.applicationModel = applicationModel; - this.zipkinConfig = zipkinConfig; - } - - @Override - public SpanExporter getSpanExporter() { - BytesEncoder encoder = getSpanBytesEncoder(); - return ZipkinSpanExporter.builder() - .setEncoder(encoder) - .setEndpoint(zipkinConfig.getEndpoint()) - .setReadTimeout(zipkinConfig.getReadTimeout()) - .build(); - } - - @Override - public SpanHandler getSpanHandler() { - // TODO SpanHandler of Brave impl - return null; - } - - private BytesEncoder getSpanBytesEncoder() { - BytesEncoder encoder = applicationModel.getBeanFactory().getBean(BytesEncoder.class); - return encoder == null ? SpanBytesEncoder.JSON_V2 : encoder; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java deleted file mode 100644 index dc9b58f4e0..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProvider.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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.tracer; - -import io.micrometer.tracing.propagation.Propagator; - -public interface PropagatorProvider { - - /** - * The real propagator will come from tracer implementation (OTel / Brave) - * - * @return Propagator - */ - Propagator getPropagator(); -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java deleted file mode 100644 index 066cb7ad63..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.tracer; - -import org.apache.dubbo.tracing.tracer.brave.BravePropagatorProvider; -import org.apache.dubbo.tracing.tracer.otel.OTelPropagatorProvider; -import org.apache.dubbo.tracing.utils.ObservationSupportUtil; - -public class PropagatorProviderFactory { - - public static PropagatorProvider getPropagatorProvider() { - // If support OTel firstly, return OTel, then Brave. - if (ObservationSupportUtil.isSupportOTelTracer()) { - return new OTelPropagatorProvider(); - } - - if (ObservationSupportUtil.isSupportBraveTracer()) { - return new BravePropagatorProvider(); - } - - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java deleted file mode 100644 index 05305ada67..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProvider.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.tracer; - -import io.micrometer.tracing.Tracer; - -public interface TracerProvider { - - /** - * Tracer of Micrometer. The real tracer will come from tracer implementation (OTel / Brave) - * - * @return Tracer - */ - Tracer getTracer(); - -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java deleted file mode 100644 index 7e325809cb..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/TracerProviderFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.tracer; - -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.tracer.brave.BraveProvider; -import org.apache.dubbo.tracing.tracer.otel.OpenTelemetryProvider; -import org.apache.dubbo.tracing.utils.ObservationSupportUtil; - -public class TracerProviderFactory { - - public static TracerProvider getProvider(ApplicationModel applicationModel, TracingConfig tracingConfig) { - // If support OTel firstly, return OTel, then Brave. - if (ObservationSupportUtil.isSupportOTelTracer()) { - return new OpenTelemetryProvider(applicationModel, tracingConfig); - } - - if (ObservationSupportUtil.isSupportBraveTracer()) { - return new BraveProvider(applicationModel, tracingConfig); - } - - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java deleted file mode 100644 index 8560a5b149..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BravePropagatorProvider.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.tracer.brave; - -import org.apache.dubbo.tracing.tracer.PropagatorProvider; - -import io.micrometer.tracing.propagation.Propagator; - - -public class BravePropagatorProvider implements PropagatorProvider { - - @Override - public Propagator getPropagator() { - // TODO impl - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java deleted file mode 100644 index 9ab8172b02..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/brave/BraveProvider.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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.tracer.brave; - -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.tracer.TracerProvider; - -import io.micrometer.tracing.Tracer; - - -public class BraveProvider implements TracerProvider { - - private final ApplicationModel applicationModel; - private final TracingConfig tracingConfig; - - public BraveProvider(ApplicationModel applicationModel, TracingConfig tracingConfig) { - this.applicationModel = applicationModel; - this.tracingConfig = tracingConfig; - } - - @Override - public Tracer getTracer() { - // TODO impl - return null; - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java deleted file mode 100644 index 9f537f1e4d..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.tracer.otel; - -import org.apache.dubbo.tracing.tracer.PropagatorProvider; - -import io.micrometer.tracing.otel.bridge.OtelPropagator; -import io.micrometer.tracing.propagation.Propagator; -import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; - -public class OTelPropagatorProvider implements PropagatorProvider { - - private static Propagator propagator; - - @Override - public Propagator getPropagator() { - return propagator; - } - - protected static void createMicrometerPropagator(ContextPropagators contextPropagators, Tracer tracer) { - propagator = new OtelPropagator(contextPropagators, tracer); - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java deleted file mode 100644 index 36b3c3f191..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProvider.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * 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.tracer.otel; - -import org.apache.dubbo.common.Version; -import org.apache.dubbo.common.lang.Nullable; -import org.apache.dubbo.config.ApplicationConfig; -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.config.nested.BaggageConfig; -import org.apache.dubbo.config.nested.PropagationConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.exporter.TraceExporterFactory; -import org.apache.dubbo.tracing.tracer.TracerProvider; - -import io.micrometer.tracing.Tracer; -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.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.baggage.propagation.W3CBaggagePropagator; -import io.opentelemetry.api.common.Attributes; -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.export.BatchSpanProcessor; -import io.opentelemetry.sdk.trace.export.SpanExporter; -import io.opentelemetry.sdk.trace.samplers.Sampler; -import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class OpenTelemetryProvider implements TracerProvider { - - private static final String DEFAULT_APPLICATION_NAME = "dubbo-application"; - private final ApplicationModel applicationModel; - private final TracingConfig tracingConfig; - - private OTelEventPublisher publisher; - private OtelCurrentTraceContext otelCurrentTraceContext; - - public OpenTelemetryProvider(ApplicationModel applicationModel, TracingConfig tracingConfig) { - this.applicationModel = applicationModel; - this.tracingConfig = tracingConfig; - } - - @Override - public Tracer getTracer() { - // [OTel component] SpanExporter is a component that gets called when a span is finished. - List spanExporters = TraceExporterFactory.getSpanExporters(applicationModel, tracingConfig.getTracingExporter()); - - String applicationName = applicationModel.getApplicationConfigManager().getApplication() - .map(ApplicationConfig::getName) - .orElse(DEFAULT_APPLICATION_NAME); - - this.publisher = new OTelEventPublisher(getEventListeners()); - - // [Micrometer Tracing component] A Micrometer Tracing wrapper for OTel - this.otelCurrentTraceContext = createCurrentTraceContext(); - - // [OTel component] SdkTracerProvider is an SDK implementation for TracerProvider - SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() - .setSampler(getSampler()) - .setResource(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, applicationName))) - .addSpanProcessor(BatchSpanProcessor - .builder(new CompositeSpanExporter(spanExporters, null, null, null)) - .build()) - .build(); - - ContextPropagators otelContextPropagators = createOtelContextPropagators(); - - // [OTel component] The SDK implementation of OpenTelemetry - OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder() - .setTracerProvider(sdkTracerProvider) - .setPropagators(otelContextPropagators) - .build(); - - // [OTel component] Tracer is a component that handles the life-cycle of a span - io.opentelemetry.api.trace.Tracer otelTracer = openTelemetrySdk.getTracerProvider() - .get("org.apache.dubbo", Version.getVersion()); - - OTelPropagatorProvider.createMicrometerPropagator(otelContextPropagators, otelTracer); - - // [Micrometer Tracing component] A Micrometer Tracing wrapper for OTel's Tracer. - return new OtelTracer(otelTracer, otelCurrentTraceContext, publisher, - new OtelBaggageManager(otelCurrentTraceContext, - tracingConfig.getBaggage().getRemoteFields(), - Collections.emptyList())); - } - - /** - * sampler with probability - * - * @return sampler - */ - private Sampler getSampler() { - Sampler rootSampler = Sampler.traceIdRatioBased(tracingConfig.getSampling().getProbability()); - return Sampler.parentBased(rootSampler); - } - - private List getEventListeners() { - List listeners = new ArrayList<>(); - - // [Micrometer Tracing component] A Micrometer Tracing listener for setting up MDC. - Slf4JEventListener slf4JEventListener = new Slf4JEventListener(); - listeners.add(slf4JEventListener); - - if (tracingConfig.getBaggage().getEnabled()) { - // [Micrometer Tracing component] A Micrometer Tracing listener for setting Baggage in MDC. - // Customizable with correlation fields. - Slf4JBaggageEventListener slf4JBaggageEventListener = new Slf4JBaggageEventListener(tracingConfig.getBaggage().getCorrelation().getFields()); - listeners.add(slf4JBaggageEventListener); - } - - return listeners; - } - - private OtelCurrentTraceContext createCurrentTraceContext() { - ContextStorage.addWrapper(new EventPublishingContextWrapper(publisher)); - return new OtelCurrentTraceContext(); - } - - private ContextPropagators createOtelContextPropagators() { - return ContextPropagators.create( - TextMapPropagator.composite( - PropagatorFactory.getPropagator(tracingConfig.getPropagation(), - tracingConfig.getBaggage(), - otelCurrentTraceContext - ))); - } - - static class OTelEventPublisher implements OtelTracer.EventPublisher { - - private final List listeners; - - OTelEventPublisher(List listeners) { - this.listeners = listeners; - } - - @Override - public void publishEvent(Object event) { - for (EventListener listener : this.listeners) { - listener.onEvent(event); - } - } - } - - static class PropagatorFactory { - - public static TextMapPropagator getPropagator(PropagationConfig propagationConfig, - @Nullable BaggageConfig baggageConfig, - @Nullable OtelCurrentTraceContext currentTraceContext) { - if (baggageConfig == null || !baggageConfig.getEnabled()) { - return getPropagatorWithoutBaggage(propagationConfig); - } - return getPropagatorWithBaggage(propagationConfig, baggageConfig, currentTraceContext); - } - - private static TextMapPropagator getPropagatorWithoutBaggage(PropagationConfig propagationConfig) { - String type = propagationConfig.getType(); - if ("B3".equals(type)) { - return B3Propagator.injectingSingleHeader(); - } else if ("W3C".equals(type)) { - return W3CTraceContextPropagator.getInstance(); - } - return TextMapPropagator.noop(); - } - - private static TextMapPropagator getPropagatorWithBaggage(PropagationConfig propagationConfig, - BaggageConfig baggageConfig, - OtelCurrentTraceContext currentTraceContext) { - String type = propagationConfig.getType(); - if ("B3".equals(type)) { - List remoteFields = baggageConfig.getRemoteFields(); - return TextMapPropagator.composite(B3Propagator.injectingSingleHeader(), - new BaggageTextMapPropagator(remoteFields, - new OtelBaggageManager(currentTraceContext, remoteFields, Collections.emptyList()))); - } else if ("W3C".equals(type)) { - List remoteFields = baggageConfig.getRemoteFields(); - return TextMapPropagator.composite(W3CTraceContextPropagator.getInstance(), - W3CBaggagePropagator.getInstance(), new BaggageTextMapPropagator(remoteFields, - new OtelBaggageManager(currentTraceContext, remoteFields, Collections.emptyList()))); - } - return TextMapPropagator.noop(); - } - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java b/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java deleted file mode 100644 index 4cf8e05edf..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/java/org/apache/dubbo/tracing/utils/ObservationSupportUtil.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.utils; - -import org.apache.dubbo.common.utils.ClassUtils; - -public class ObservationSupportUtil { - - public static boolean isSupportObservation() { - return isClassPresent("io.micrometer.observation.Observation") - && isClassPresent("io.micrometer.observation.ObservationRegistry") - && isClassPresent("io.micrometer.observation.ObservationHandler"); - } - - public static boolean isSupportTracing() { - return isClassPresent("io.micrometer.tracing.Tracer") - && isClassPresent("io.micrometer.tracing.propagation.Propagator"); - } - - public static boolean isSupportOTelTracer() { - return isClassPresent("io.micrometer.tracing.otel.bridge.OtelTracer") - && isClassPresent("io.opentelemetry.sdk.trace.SdkTracerProvider") - && isClassPresent("io.opentelemetry.api.OpenTelemetry"); - } - - public static boolean isSupportBraveTracer() { - return isClassPresent("io.micrometer.tracing.Tracer") - && isClassPresent("io.micrometer.tracing.brave.bridge.BraveTracer") - && isClassPresent("brave.Tracing"); - } - - private static boolean isClassPresent(String className) { - return ClassUtils.isPresent(className, ObservationSupportUtil.class.getClassLoader()); - } -} diff --git a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter b/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter deleted file mode 100644 index a7efac7c5e..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter +++ /dev/null @@ -1 +0,0 @@ -observationreceiver=org.apache.dubbo.tracing.filter.ObservationReceiverFilter \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter b/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter deleted file mode 100644 index f13199c666..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/main/resources/META-INF/dubbo/internal/org.apache.dubbo.rpc.cluster.filter.ClusterFilter +++ /dev/null @@ -1 +0,0 @@ -observationsender=org.apache.dubbo.tracing.filter.ObservationSenderFilter \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java deleted file mode 100644 index 18f1a74e0e..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/PropagatorProviderFactoryTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.tracer; - -import org.apache.dubbo.common.utils.Assert; -import org.apache.dubbo.tracing.tracer.otel.OTelPropagatorProvider; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class PropagatorProviderFactoryTest { - - @Test - void testPropagatorProviderFactory() { - PropagatorProvider propagatorProvider = PropagatorProviderFactory.getPropagatorProvider(); - Assert.notNull(propagatorProvider, "PropagatorProvider should not be null"); - assertEquals(OTelPropagatorProvider.class, propagatorProvider.getClass()); - } -} \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java deleted file mode 100644 index 83f2cd2df0..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OTelPropagatorProviderTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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.tracer.otel; - -import org.apache.dubbo.common.utils.Assert; - -import io.micrometer.tracing.propagation.Propagator; -import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; -import org.junit.jupiter.api.Test; - -import static org.mockito.Mockito.mock; - -class OTelPropagatorProviderTest { - - @Test - void testOTelPropagatorProvider() { - ContextPropagators contextPropagators = mock(ContextPropagators.class); - Tracer tracer = mock(Tracer.class); - OTelPropagatorProvider.createMicrometerPropagator(contextPropagators, tracer); - OTelPropagatorProvider oTelPropagatorProvider = new OTelPropagatorProvider(); - Propagator propagator = oTelPropagatorProvider.getPropagator(); - Assert.notNull(propagator, "Propagator don't be null."); - } -} \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java deleted file mode 100644 index 0374912c3a..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/tracer/otel/OpenTelemetryProviderTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.tracer.otel; - -import org.apache.dubbo.common.utils.Assert; -import org.apache.dubbo.config.TracingConfig; -import org.apache.dubbo.config.nested.BaggageConfig; -import org.apache.dubbo.config.nested.ExporterConfig; -import org.apache.dubbo.rpc.model.ApplicationModel; -import org.apache.dubbo.tracing.tracer.TracerProvider; -import org.apache.dubbo.tracing.tracer.TracerProviderFactory; - -import io.micrometer.tracing.Tracer; -import io.micrometer.tracing.otel.bridge.OtelTracer; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class OpenTelemetryProviderTest { - - @Test - void testGetTracer() { - TracingConfig tracingConfig = new TracingConfig(); - tracingConfig.setEnabled(true); - ExporterConfig exporterConfig = new ExporterConfig(); - exporterConfig.setZipkinConfig(new ExporterConfig.ZipkinConfig("")); - tracingConfig.setTracingExporter(exporterConfig); - TracerProvider tracerProvider1 = TracerProviderFactory.getProvider(ApplicationModel.defaultModel(), tracingConfig); - Assert.notNull(tracerProvider1, "TracerProvider should not be null."); - Tracer tracer1 = tracerProvider1.getTracer(); - assertEquals(OtelTracer.class, tracer1.getClass()); - - tracingConfig.setBaggage(new BaggageConfig(false)); - TracerProvider tracerProvider2 = TracerProviderFactory.getProvider(ApplicationModel.defaultModel(), tracingConfig); - Assert.notNull(tracerProvider2, "TracerProvider should not be null."); - Tracer tracer2 = tracerProvider2.getTracer(); - assertEquals(OtelTracer.class, tracer2.getClass()); - } -} \ No newline at end of file diff --git a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java b/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java deleted file mode 100644 index 3903053ca8..0000000000 --- a/dubbo-metrics/dubbo-tracing/src/test/java/org/apache/dubbo/tracing/utils/ObservationSupportUtilTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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.utils; - -import org.apache.dubbo.common.utils.Assert; - -import org.junit.jupiter.api.Test; - -public class ObservationSupportUtilTest { - - @Test - void testIsSupportObservation() { - boolean supportObservation = ObservationSupportUtil.isSupportObservation(); - Assert.assertTrue(supportObservation, "ObservationSupportUtil.isSupportObservation() should return true"); - } - - @Test - void testIsSupportTracing() { - boolean supportTracing = ObservationSupportUtil.isSupportTracing(); - Assert.assertTrue(supportTracing, "ObservationSupportUtil.isSupportTracing() should return true"); - } - - @Test - void testIsSupportOTelTracer() { - boolean supportOTelTracer = ObservationSupportUtil.isSupportOTelTracer(); - Assert.assertTrue(supportOTelTracer, "ObservationSupportUtil.isSupportOTelTracer() should return true"); - } - - @Test - void testIsSupportBraveTracer() { - boolean supportBraveTracer = ObservationSupportUtil.isSupportBraveTracer(); - Assert.assertTrue(supportBraveTracer, "ObservationSupportUtil.isSupportOTelTracer() should return true"); - } -} diff --git a/dubbo-metrics/pom.xml b/dubbo-metrics/pom.xml index c10defb8d6..04abd6e077 100644 --- a/dubbo-metrics/pom.xml +++ b/dubbo-metrics/pom.xml @@ -24,7 +24,6 @@ dubbo-metrics-metadata dubbo-metrics-prometheus dubbo-metrics-config-center - dubbo-tracing org.apache.dubbo diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml index e8d997bda9..b9e1369556 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/pom.xml @@ -137,12 +137,6 @@ ${project.version} true - - org.apache.dubbo - dubbo-config-spring - ${project.version} - true - diff --git a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java index 10ffaa9be1..37f552fadf 100644 --- a/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java +++ b/dubbo-spring-boot/dubbo-spring-boot-starters/observability/autoconfigure/src/main/java/org/apache/dubbo/spring/boot/observability/autoconfigure/DubboObservationAutoConfiguration.java @@ -18,7 +18,6 @@ package org.apache.dubbo.spring.boot.observability.autoconfigure; import org.apache.dubbo.common.logger.ErrorTypeAwareLogger; import org.apache.dubbo.common.logger.LoggerFactory; -import org.apache.dubbo.config.spring.context.event.DubboConfigInitEvent; import org.apache.dubbo.qos.protocol.QosProtocolWrapper; import org.apache.dubbo.rpc.model.ApplicationModel; import org.apache.dubbo.spring.boot.observability.autoconfigure.annotation.ConditionalOnDubboTracingEnable; @@ -29,15 +28,14 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.NoSuchBeanDefinitionException; 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; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; -import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; import java.util.Arrays; @@ -48,7 +46,7 @@ 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, ApplicationListener, Ordered { +public class DubboObservationAutoConfiguration implements BeanFactoryAware, SmartInitializingSingleton { private final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(QosProtocolWrapper.class); @@ -81,21 +79,16 @@ public class DubboObservationAutoConfiguration implements BeanFactoryAware, Appl } @Override - public void onApplicationEvent(DubboConfigInitEvent event) { + public void afterSingletonsInstantiated() { try { applicationModel.getBeanFactory().registerBean(beanFactory.getBean(io.micrometer.observation.ObservationRegistry.class)); - applicationModel.getBeanFactory().registerBean(beanFactory.getBean(io.micrometer.tracing.Tracer.class)); - applicationModel.getBeanFactory().registerBean(beanFactory.getBean(io.micrometer.tracing.propagation.Propagator.class)); + io.micrometer.tracing.Tracer bean = beanFactory.getBean(io.micrometer.tracing.Tracer.class); + applicationModel.getBeanFactory().registerBean(bean); } catch (NoSuchBeanDefinitionException e) { - logger.info("Please use a version of micrometer higher than 1.10.0: " + e.getMessage()); + logger.info("Please use a version of micrometer higher than 1.10.0 :{}" + e.getMessage()); } } - @Override - public int getOrder() { - return HIGHEST_PRECEDENCE; - } - @Configuration(proxyBeanMethods = false) @ConditionalOnClass(MeterRegistry.class) @ConditionalOnMissingClass("io.micrometer.tracing.Tracer") 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 8894b890cb..24be95c4ec 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 @@ -16,7 +16,8 @@ */ package org.apache.dubbo.spring.boot.observability.autoconfigure.brave; -import org.apache.dubbo.common.utils.StringUtils; +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.rpc.model.ModuleModel; 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; @@ -52,12 +53,12 @@ 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 = "application"; - private final DubboConfigurationProperties dubboConfigProperties; + private final ModuleModel moduleModel; - public BraveAutoConfiguration(DubboConfigurationProperties dubboConfigProperties) { - this.dubboConfigProperties = dubboConfigProperties; + public BraveAutoConfiguration(ModuleModel moduleModel) { + this.moduleModel = moduleModel; } @Bean @@ -75,10 +76,9 @@ public class BraveAutoConfiguration { public brave.Tracing braveTracing(List spanHandlers, List 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; - } + String applicationName = moduleModel.getApplicationModel().getApplicationConfigManager().getApplication() + .map(ApplicationConfig::getName) + .orElse(DEFAULT_APPLICATION_NAME); brave.Tracing.Builder builder = brave.Tracing.newBuilder().currentTraceContext(currentTraceContext).traceId128Bit(true) .supportsJoin(false).propagationFactory(propagationFactory).sampler(sampler) .localServiceName(applicationName); 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 6b4e38f7c9..85babb77f8 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,7 +18,8 @@ package org.apache.dubbo.spring.boot.observability.autoconfigure.otel; import org.apache.dubbo.common.Version; -import org.apache.dubbo.common.utils.StringUtils; +import org.apache.dubbo.config.ApplicationConfig; +import org.apache.dubbo.rpc.model.ModuleModel; 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; @@ -51,12 +52,15 @@ public class OpenTelemetryAutoConfiguration { /** * 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 = "application"; private final DubboConfigurationProperties dubboConfigProperties; - OpenTelemetryAutoConfiguration(DubboConfigurationProperties dubboConfigProperties) { + private final ModuleModel moduleModel; + + OpenTelemetryAutoConfiguration(DubboConfigurationProperties dubboConfigProperties, ModuleModel moduleModel) { this.dubboConfigProperties = dubboConfigProperties; + this.moduleModel = moduleModel; } @Bean @@ -70,10 +74,9 @@ public class OpenTelemetryAutoConfiguration { @ConditionalOnMissingBean io.opentelemetry.sdk.trace.SdkTracerProvider otelSdkTracerProvider(ObjectProvider spanProcessors, io.opentelemetry.sdk.trace.samplers.Sampler sampler) { - String applicationName = dubboConfigProperties.getApplication().getName(); - if (StringUtils.isEmpty(applicationName)) { - applicationName = DEFAULT_APPLICATION_NAME; - } + String applicationName = moduleModel.getApplicationModel().getApplicationConfigManager().getApplication() + .map(ApplicationConfig::getName) + .orElse(DEFAULT_APPLICATION_NAME); 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); diff --git a/dubbo-test/dubbo-dependencies-all/pom.xml b/dubbo-test/dubbo-dependencies-all/pom.xml index 991154acbb..526743f360 100644 --- a/dubbo-test/dubbo-dependencies-all/pom.xml +++ b/dubbo-test/dubbo-dependencies-all/pom.xml @@ -193,11 +193,6 @@ dubbo-metrics-prometheus ${project.version} - - org.apache.dubbo - dubbo-tracing - ${project.version} - @@ -210,6 +205,7 @@ dubbo-monitor-default ${project.version} + org.apache.dubbo