From 911ba08478e0f5e2c694765bd20101949b2afcad Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Fri, 8 Jul 2022 09:30:30 +0200 Subject: [PATCH] GH-5 - Upgrade observability module to Micrometer. Re-enable observability module after a migration from Spring Cloud Sleuth to Micrometer. Bind the application of the observability instrumentation to the management.tracing.enabled flag. --- pom.xml | 3 +- spring-modulith-observability/pom.xml | 63 +++++++++++-------- .../observability/ModuleEntryInterceptor.java | 8 +-- .../observability/ModuleEventListener.java | 4 +- .../ModuleTracingBeanPostProcessor.java | 2 +- ...ataRestModuleTracingBeanPostProcessor.java | 2 +- .../ModuleObservabilityAutoConfiguration.java | 4 +- ...tModuleObservabilityAutoConfiguration.java | 3 +- .../ExampleApplicationIntegrationTests.java | 13 +++- .../src/test/resources/application.properties | 4 +- 10 files changed, 64 insertions(+), 42 deletions(-) diff --git a/pom.xml b/pom.xml index 51e7617b..3a356ad0 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ spring-modulith-events spring-modulith-test spring-modulith-docs - + spring-modulith-observability spring-modulith-moments spring-modulith-starter-jpa spring-modulith-starter-test @@ -191,7 +191,6 @@ limitations under the License. org.projectlombok lombok - 1.18.24 provided diff --git a/spring-modulith-observability/pom.xml b/spring-modulith-observability/pom.xml index 68c50b44..8fb74373 100644 --- a/spring-modulith-observability/pom.xml +++ b/spring-modulith-observability/pom.xml @@ -16,18 +16,6 @@ 2021.0.0 - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - - @@ -42,17 +30,6 @@ true - - org.springframework.cloud - spring-cloud-sleuth-api - - - - org.springframework.cloud - spring-cloud-sleuth-brave - true - - org.springframework.data spring-data-rest-webmvc @@ -64,13 +41,45 @@ spring-boot-starter-test test - + - org.springframework.cloud - spring-cloud-starter-sleuth + io.micrometer + micrometer-observation + true + + + + io.zipkin.brave + brave + true + + + + io.micrometer + micrometer-tracing + true + + + + + + org.springframework.boot + spring-boot-actuator-autoconfigure + test + + + + io.micrometer + micrometer-core + test + + + + io.micrometer + micrometer-tracing-bridge-brave test - \ No newline at end of file + diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java index 29bd57a7..9b2216a1 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEntryInterceptor.java @@ -15,6 +15,10 @@ */ package org.springframework.modulith.observability; +import io.micrometer.tracing.BaggageInScope; +import io.micrometer.tracing.Span; +import io.micrometer.tracing.Tracer; +import io.micrometer.tracing.Tracer.SpanInScope; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -24,10 +28,6 @@ import java.util.Map; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; -import org.springframework.cloud.sleuth.BaggageInScope; -import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Tracer; -import org.springframework.cloud.sleuth.Tracer.SpanInScope; @Slf4j @RequiredArgsConstructor(access = AccessLevel.PRIVATE) diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java index 87bc6fba..0017605d 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleEventListener.java @@ -15,12 +15,12 @@ */ package org.springframework.modulith.observability; +import io.micrometer.tracing.Span; +import io.micrometer.tracing.Tracer; import lombok.RequiredArgsConstructor; import java.util.function.Supplier; -import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Tracer; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.PayloadApplicationEvent; diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingBeanPostProcessor.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingBeanPostProcessor.java index 0636ab86..b79dcba9 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingBeanPostProcessor.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/ModuleTracingBeanPostProcessor.java @@ -15,6 +15,7 @@ */ package org.springframework.modulith.observability; +import io.micrometer.tracing.Tracer; import lombok.RequiredArgsConstructor; import java.lang.reflect.Method; @@ -30,7 +31,6 @@ import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.aop.support.StaticMethodMatcher; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.cloud.sleuth.Tracer; import org.springframework.modulith.model.Modules; /** diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleTracingBeanPostProcessor.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleTracingBeanPostProcessor.java index d7ea8a73..d3275c91 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleTracingBeanPostProcessor.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/SpringDataRestModuleTracingBeanPostProcessor.java @@ -15,6 +15,7 @@ */ package org.springframework.modulith.observability; +import io.micrometer.tracing.Tracer; import lombok.RequiredArgsConstructor; import org.aopalliance.aop.Advice; @@ -24,7 +25,6 @@ import org.springframework.aop.Advisor; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.cloud.sleuth.Tracer; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.data.rest.webmvc.BasePathAwareController; import org.springframework.data.rest.webmvc.RootResourceInformation; diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java index d18060e5..e82726ff 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java @@ -22,10 +22,11 @@ import brave.baggage.BaggagePropagationCustomizer; import brave.handler.MutableSpan; import brave.handler.SpanHandler; import brave.propagation.TraceContext; +import io.micrometer.tracing.Tracer; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.sleuth.Tracer; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -38,6 +39,7 @@ import org.springframework.modulith.observability.ModulesRuntime; * @author Oliver Drotbohm */ @Configuration(proxyBeanMethods = false) +@ConditionalOnProperty(name = "management.tracing.enabled", havingValue = "true") class ModuleObservabilityAutoConfiguration { @Bean diff --git a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/SpringDataRestModuleObservabilityAutoConfiguration.java b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/SpringDataRestModuleObservabilityAutoConfiguration.java index 67e8fbdd..d226644b 100644 --- a/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/SpringDataRestModuleObservabilityAutoConfiguration.java +++ b/spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/SpringDataRestModuleObservabilityAutoConfiguration.java @@ -15,8 +15,9 @@ */ package org.springframework.modulith.observability.autoconfigure; +import io.micrometer.tracing.Tracer; + import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.sleuth.Tracer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.rest.webmvc.RepositoryController; diff --git a/spring-modulith-observability/src/test/java/example/ExampleApplicationIntegrationTests.java b/spring-modulith-observability/src/test/java/example/ExampleApplicationIntegrationTests.java index f93e456b..af14372b 100644 --- a/spring-modulith-observability/src/test/java/example/ExampleApplicationIntegrationTests.java +++ b/spring-modulith-observability/src/test/java/example/ExampleApplicationIntegrationTests.java @@ -15,15 +15,26 @@ */ package example; +import static org.assertj.core.api.Assertions.*; + import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationContext; +import org.springframework.modulith.observability.ModuleEventListener; /** * @author Oliver Drotbohm */ @SpringBootTest +@AutoConfigureObservability class ExampleApplicationIntegrationTests { + @Autowired ApplicationContext context; + @Test - void bootstrapsSuccessfully() {} + void bootstrapsSuccessfully() { + assertThat(context.getBean(ModuleEventListener.class)).isNotNull(); + } } diff --git a/spring-modulith-observability/src/test/resources/application.properties b/spring-modulith-observability/src/test/resources/application.properties index 02c4329b..dc0c4d75 100644 --- a/spring-modulith-observability/src/test/resources/application.properties +++ b/spring-modulith-observability/src/test/resources/application.properties @@ -1,2 +1,2 @@ -# As long as we're on a Spring Cloud version not officially compatible with Spring Boot 2.7 -spring.cloud.compatibility-verifier.enabled=false +management.tracing.enabled=true +