From 32cd9761f936ab7daaa72cbe2c60c14cb6726ede Mon Sep 17 00:00:00 2001 From: ShenFeng312 <49786112+ShenFeng312@users.noreply.github.com> Date: Mon, 6 Feb 2023 19:57:37 +0800 Subject: [PATCH] Polish ObservationConfiguration (#11456) * polish ObservationConfiguration * update application.yml --- .../consumer/ObservationConfiguration.java | 31 ++++++++++--------- .../src/main/resources/application.yml | 11 ++++++- .../demo/provider/DemoServiceImpl.java | 6 +++- .../provider/ObservationConfiguration.java | 31 +++++++++---------- .../src/main/resources/application.yml | 11 ++++++- 5 files changed, 56 insertions(+), 34 deletions(-) diff --git a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/java/org/apache/dubbo/springboot/demo/consumer/ObservationConfiguration.java b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/java/org/apache/dubbo/springboot/demo/consumer/ObservationConfiguration.java index 450415362a..717e36a8f9 100644 --- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/java/org/apache/dubbo/springboot/demo/consumer/ObservationConfiguration.java +++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/java/org/apache/dubbo/springboot/demo/consumer/ObservationConfiguration.java @@ -18,11 +18,6 @@ package org.apache.dubbo.springboot.demo.consumer; -import java.util.Collections; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; @@ -34,6 +29,7 @@ import io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandle import io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler; import io.micrometer.tracing.handler.TracingAwareMeterObservationHandler; import io.micrometer.tracing.otel.bridge.ArrayListSpanProcessor; +import io.micrometer.tracing.otel.bridge.EventPublishingContextWrapper; import io.micrometer.tracing.otel.bridge.OtelBaggageManager; import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext; import io.micrometer.tracing.otel.bridge.OtelPropagator; @@ -42,6 +38,7 @@ import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener; import io.micrometer.tracing.otel.bridge.Slf4JEventListener; import io.micrometer.tracing.propagation.Propagator; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.context.ContextStorage; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.extension.trace.propagation.B3Propagator; import io.opentelemetry.sdk.OpenTelemetrySdk; @@ -54,26 +51,28 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.util.Collections; + import static io.opentelemetry.sdk.trace.samplers.Sampler.alwaysOn; @Configuration public class ObservationConfiguration { - /** * Default value for application name if {@code spring.application.name} is not set. */ private static final String DEFAULT_APPLICATION_NAME = "application"; - @Bean - ApplicationModel applicationModel() { - ApplicationModel applicationModel = ApplicationModel.defaultModel(); - applicationModel.getBeanFactory().registerBean(observationRegistry()); - return applicationModel; - } + @javax.annotation.Resource + private ApplicationModel applicationModel; @Bean ObservationRegistry observationRegistry() { - return ObservationRegistry.create(); + ObservationRegistry observationRegistry = ObservationRegistry.create(); + applicationModel.getBeanFactory().registerBean(observationRegistry); + return observationRegistry; + } @Bean @@ -129,10 +128,12 @@ public class ObservationConfiguration { OtelTracer tracer(io.opentelemetry.api.trace.Tracer otelTracer, OtelCurrentTraceContext otelCurrentTraceContext) { Slf4JEventListener slf4JEventListener = slf4JEventListener(); Slf4JBaggageEventListener slf4JBaggageEventListener = slf4JBaggageEventListener(); - return new OtelTracer(otelTracer, otelCurrentTraceContext, event -> { + OtelTracer.EventPublisher eventPublisher = event -> { slf4JEventListener.onEvent(event); slf4JBaggageEventListener.onEvent(event); - }, new OtelBaggageManager(otelCurrentTraceContext, Collections.emptyList(), Collections.emptyList())); + }; + ContextStorage.addWrapper(new EventPublishingContextWrapper(eventPublisher)); + return new OtelTracer(otelTracer, otelCurrentTraceContext, eventPublisher, new OtelBaggageManager(otelCurrentTraceContext, Collections.emptyList(), Collections.emptyList())); } @Bean diff --git a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml index 9f29958e6e..10d0ec74e7 100644 --- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml +++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-consumer/src/main/resources/application.yml @@ -14,9 +14,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -dubbo: +spring: application: name: dubbo-springboot-demo-consumer + +dubbo: + application: + name: ${spring.application.name} protocol: name: dubbo port: -1 @@ -27,3 +31,8 @@ dubbo: address: zookeeper://127.0.0.1:2181 metadata-report: address: zookeeper://127.0.0.1:2181 + +logging: + pattern: + level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]' + diff --git a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/DemoServiceImpl.java b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/DemoServiceImpl.java index 0c1460ce74..f0c1aecc3e 100644 --- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/DemoServiceImpl.java +++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/DemoServiceImpl.java @@ -20,14 +20,18 @@ package org.apache.dubbo.springboot.demo.provider; import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.springboot.demo.DemoService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @DubboService public class DemoServiceImpl implements DemoService { + private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class); @Override public String sayHello(String name) { - System.out.println("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress()); + logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress()); return "Hello " + name; + } diff --git a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ObservationConfiguration.java b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ObservationConfiguration.java index 77e0b06277..722427fcc5 100644 --- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ObservationConfiguration.java +++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ObservationConfiguration.java @@ -18,11 +18,6 @@ package org.apache.dubbo.springboot.demo.provider; -import java.util.Collections; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; @@ -34,6 +29,7 @@ import io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandle import io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler; import io.micrometer.tracing.handler.TracingAwareMeterObservationHandler; import io.micrometer.tracing.otel.bridge.ArrayListSpanProcessor; +import io.micrometer.tracing.otel.bridge.EventPublishingContextWrapper; import io.micrometer.tracing.otel.bridge.OtelBaggageManager; import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext; import io.micrometer.tracing.otel.bridge.OtelPropagator; @@ -42,6 +38,7 @@ import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener; import io.micrometer.tracing.otel.bridge.Slf4JEventListener; import io.micrometer.tracing.propagation.Propagator; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.context.ContextStorage; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.extension.trace.propagation.B3Propagator; import io.opentelemetry.sdk.OpenTelemetrySdk; @@ -50,11 +47,14 @@ import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; import org.apache.dubbo.rpc.model.ApplicationModel; - import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.util.Collections; + import static io.opentelemetry.sdk.trace.samplers.Sampler.alwaysOn; @Configuration @@ -64,17 +64,14 @@ public class ObservationConfiguration { * Default value for application name if {@code spring.application.name} is not set. */ private static final String DEFAULT_APPLICATION_NAME = "application"; - - @Bean - ApplicationModel applicationModel() { - ApplicationModel applicationModel = ApplicationModel.defaultModel(); - applicationModel.getBeanFactory().registerBean(observationRegistry()); - return applicationModel; - } + @javax.annotation.Resource + private ApplicationModel applicationModel; @Bean ObservationRegistry observationRegistry() { - return ObservationRegistry.create(); + ObservationRegistry observationRegistry = ObservationRegistry.create(); + applicationModel.getBeanFactory().registerBean(observationRegistry); + return observationRegistry; } @Bean @@ -130,10 +127,12 @@ public class ObservationConfiguration { OtelTracer tracer(io.opentelemetry.api.trace.Tracer otelTracer, OtelCurrentTraceContext otelCurrentTraceContext) { Slf4JEventListener slf4JEventListener = slf4JEventListener(); Slf4JBaggageEventListener slf4JBaggageEventListener = slf4JBaggageEventListener(); - return new OtelTracer(otelTracer, otelCurrentTraceContext, event -> { + OtelTracer.EventPublisher eventPublisher = event -> { slf4JEventListener.onEvent(event); slf4JBaggageEventListener.onEvent(event); - }, new OtelBaggageManager(otelCurrentTraceContext, Collections.emptyList(), Collections.emptyList())); + }; + ContextStorage.addWrapper(new EventPublishingContextWrapper(eventPublisher)); + return new OtelTracer(otelTracer, otelCurrentTraceContext, eventPublisher, new OtelBaggageManager(otelCurrentTraceContext, Collections.emptyList(), Collections.emptyList())); } @Bean diff --git a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml index 37a249fdcc..19a08111b6 100644 --- a/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml +++ b/dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-provider/src/main/resources/application.yml @@ -14,9 +14,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -dubbo: +spring: application: name: dubbo-springboot-demo-provider + +dubbo: + application: + name: ${spring.application.name} protocol: name: dubbo port: -1 @@ -27,3 +31,8 @@ dubbo: address: zookeeper://127.0.0.1:2181 metadata-report: address: zookeeper://127.0.0.1:2181 + +logging: + pattern: + level: '%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]' +