Skip to content

Commit 43b60a1

Browse files
committed
Create spring-boot-micrometer-observation module
1 parent 8522c46 commit 43b60a1

File tree

54 files changed

+613
-328
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+613
-328
lines changed

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ include "spring-boot-project:spring-boot-liquibase"
100100
include "spring-boot-project:spring-boot-neo4j"
101101
include "spring-boot-project:spring-boot-mail"
102102
include "spring-boot-project:spring-boot-metrics"
103+
include "spring-boot-project:spring-boot-micrometer-observation"
103104
include "spring-boot-project:spring-boot-mongodb"
104105
include "spring-boot-project:spring-boot-mustache"
105106
include "spring-boot-project:spring-boot-netty"

spring-boot-project/spring-boot-actuator-autoconfigure-all/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ dependencies {
3939
optional(project(":spring-boot-project:spring-boot-jsonb"))
4040
optional(project(":spring-boot-project:spring-boot-kafka"))
4141
optional(project(":spring-boot-project:spring-boot-metrics"))
42+
optional(project(":spring-boot-project:spring-boot-micrometer-observation"))
4243
optional(project(":spring-boot-project:spring-boot-opentelemetry"))
4344
optional(project(":spring-boot-project:spring-boot-r2dbc"))
4445
optional(project(":spring-boot-project:spring-boot-restclient"))

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jersey/JerseyServerMetricsAutoConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
import org.glassfish.jersey.server.ResourceConfig;
2424

2525
import org.springframework.beans.factory.ObjectProvider;
26-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
27-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2826
import org.springframework.boot.autoconfigure.AutoConfiguration;
2927
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3028
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -34,6 +32,8 @@
3432
import org.springframework.boot.jersey.autoconfigure.ResourceConfigCustomizer;
3533
import org.springframework.boot.metrics.OnlyOnceLoggingDenyMeterFilter;
3634
import org.springframework.boot.metrics.autoconfigure.MetricsProperties;
35+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
36+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
3737
import org.springframework.context.annotation.Bean;
3838
import org.springframework.core.annotation.Order;
3939

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -14,40 +14,32 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.actuate.autoconfigure.observation;
17+
package org.springframework.boot.actuate.autoconfigure.observability;
1818

1919
import java.util.List;
2020

2121
import io.micrometer.core.instrument.MeterRegistry;
2222
import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler;
2323
import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler.IgnoredMeters;
2424
import io.micrometer.core.instrument.observation.MeterObservationHandler;
25-
import io.micrometer.observation.GlobalObservationConvention;
2625
import io.micrometer.observation.Observation;
27-
import io.micrometer.observation.ObservationFilter;
28-
import io.micrometer.observation.ObservationHandler;
29-
import io.micrometer.observation.ObservationPredicate;
3026
import io.micrometer.observation.ObservationRegistry;
31-
import io.micrometer.observation.aop.ObservedAspect;
3227
import io.micrometer.tracing.Tracer;
3328
import io.micrometer.tracing.handler.TracingAwareMeterObservationHandler;
3429
import io.micrometer.tracing.handler.TracingObservationHandler;
35-
import org.aspectj.weaver.Advice;
3630

37-
import org.springframework.beans.factory.ObjectProvider;
3831
import org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration;
3932
import org.springframework.boot.autoconfigure.AutoConfiguration;
4033
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
4134
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
42-
import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty;
4335
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
4436
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
4537
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
4638
import org.springframework.boot.context.properties.EnableConfigurationProperties;
47-
import org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration;
39+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationHandlerGrouping;
40+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
4841
import org.springframework.context.annotation.Bean;
4942
import org.springframework.context.annotation.Configuration;
50-
import org.springframework.core.annotation.Order;
5143

5244
/**
5345
* {@link EnableAutoConfiguration Auto-configuration} for the Micrometer Observation API.
@@ -58,34 +50,12 @@
5850
* @author Vedran Pavic
5951
* @since 3.0.0
6052
*/
61-
@AutoConfiguration(after = { CompositeMeterRegistryAutoConfiguration.class, MicrometerTracingAutoConfiguration.class })
53+
@AutoConfiguration(
54+
beforeName = "org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration",
55+
afterName = "org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration",
56+
after = MicrometerTracingAutoConfiguration.class)
6257
@ConditionalOnClass(ObservationRegistry.class)
63-
@EnableConfigurationProperties(ObservationProperties.class)
64-
public class ObservationAutoConfiguration {
65-
66-
@Bean
67-
static ObservationRegistryPostProcessor observationRegistryPostProcessor(
68-
ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers,
69-
ObjectProvider<ObservationPredicate> observationPredicates,
70-
ObjectProvider<GlobalObservationConvention<?>> observationConventions,
71-
ObjectProvider<ObservationHandler<?>> observationHandlers,
72-
ObjectProvider<ObservationHandlerGrouping> observationHandlerGrouping,
73-
ObjectProvider<ObservationFilter> observationFilters) {
74-
return new ObservationRegistryPostProcessor(observationRegistryCustomizers, observationPredicates,
75-
observationConventions, observationHandlers, observationHandlerGrouping, observationFilters);
76-
}
77-
78-
@Bean
79-
@ConditionalOnMissingBean
80-
ObservationRegistry observationRegistry() {
81-
return ObservationRegistry.create();
82-
}
83-
84-
@Bean
85-
@Order(0)
86-
PropertiesObservationFilterPredicate propertiesObservationFilter(ObservationProperties properties) {
87-
return new PropertiesObservationFilterPredicate(properties);
88-
}
58+
public class ObservabilityAutoConfiguration {
8959

9060
@Configuration(proxyBeanMethods = false)
9161
@ConditionalOnClass(MeterRegistry.class)
@@ -126,6 +96,7 @@ ObservationHandlerGrouping metricsAndTracingObservationHandlerGrouping() {
12696
@Configuration(proxyBeanMethods = false)
12797
@ConditionalOnBean(MeterRegistry.class)
12898
@ConditionalOnMissingBean(MeterObservationHandler.class)
99+
@EnableConfigurationProperties(ObservationProperties.class)
129100
static class MeterObservationHandlerConfiguration {
130101

131102
@ConditionalOnMissingBean(type = "io.micrometer.tracing.Tracer")
@@ -158,17 +129,4 @@ TracingAwareMeterObservationHandler<Observation.Context> tracingAwareMeterObserv
158129

159130
}
160131

161-
@Configuration(proxyBeanMethods = false)
162-
@ConditionalOnClass(Advice.class)
163-
@ConditionalOnBooleanProperty("management.observations.annotations.enabled")
164-
static class ObservedAspectConfiguration {
165-
166-
@Bean
167-
@ConditionalOnMissingBean
168-
ObservedAspect observedAspect(ObservationRegistry observationRegistry) {
169-
return new ObservedAspect(observationRegistry);
170-
}
171-
172-
}
173-
174132
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright 2012-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
/**
18+
* Auto-configuration for observability (metrics and tracing).
19+
*/
20+
package org.springframework.boot.actuate.autoconfigure.observability;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/batch/BatchObservationAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
import io.micrometer.observation.ObservationRegistry;
2020

2121
import org.springframework.batch.core.configuration.annotation.BatchObservabilityBeanPostProcessor;
22-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
2322
import org.springframework.boot.autoconfigure.AutoConfiguration;
2423
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2524
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2625
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2726
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
27+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
2828
import org.springframework.context.annotation.Bean;
2929

3030
/**

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/graphql/GraphQlObservationAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
import io.micrometer.observation.ObservationRegistry;
2222

2323
import org.springframework.beans.factory.ObjectProvider;
24-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
2524
import org.springframework.boot.autoconfigure.AutoConfiguration;
2625
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2726
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2827
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2928
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
29+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
3030
import org.springframework.context.annotation.Bean;
3131
import org.springframework.graphql.execution.GraphQlSource;
3232
import org.springframework.graphql.observation.DataFetcherObservationConvention;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/client/HttpClientObservationsAutoConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import io.micrometer.observation.Observation;
2222
import io.micrometer.observation.ObservationRegistry;
2323

24-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
25-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2624
import org.springframework.boot.autoconfigure.AutoConfiguration;
2725
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2826
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -32,6 +30,8 @@
3230
import org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration;
3331
import org.springframework.boot.metrics.autoconfigure.MetricsProperties;
3432
import org.springframework.boot.metrics.autoconfigure.MetricsProperties.Web.Client;
33+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
34+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
3535
import org.springframework.context.annotation.Bean;
3636
import org.springframework.context.annotation.Configuration;
3737
import org.springframework.context.annotation.Import;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/client/RestClientObservationConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
import io.micrometer.observation.ObservationRegistry;
2020

2121
import org.springframework.beans.factory.ObjectProvider;
22-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2322
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2423
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
24+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
2525
import org.springframework.boot.restclient.RestClientCustomizer;
2626
import org.springframework.boot.restclient.actuate.observation.ObservationRestClientCustomizer;
2727
import org.springframework.context.annotation.Bean;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/client/RestTemplateObservationConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
import io.micrometer.observation.ObservationRegistry;
2020

2121
import org.springframework.beans.factory.ObjectProvider;
22-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2322
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2423
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
24+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
2525
import org.springframework.boot.restclient.RestTemplateBuilder;
2626
import org.springframework.boot.restclient.actuate.observation.ObservationRestTemplateCustomizer;
2727
import org.springframework.context.annotation.Bean;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/client/WebClientObservationConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
import io.micrometer.observation.ObservationRegistry;
2020

2121
import org.springframework.beans.factory.ObjectProvider;
22-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2322
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2423
import org.springframework.boot.metrics.autoconfigure.MetricsProperties;
24+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
2525
import org.springframework.boot.webclient.actuate.observation.ObservationWebClientCustomizer;
2626
import org.springframework.context.annotation.Bean;
2727
import org.springframework.context.annotation.Configuration;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/reactive/WebFluxObservationAutoConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import io.micrometer.observation.Observation;
2222
import io.micrometer.observation.ObservationRegistry;
2323

24-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
25-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2624
import org.springframework.boot.autoconfigure.AutoConfiguration;
2725
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2826
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -33,6 +31,8 @@
3331
import org.springframework.boot.metrics.OnlyOnceLoggingDenyMeterFilter;
3432
import org.springframework.boot.metrics.autoconfigure.MetricsProperties;
3533
import org.springframework.boot.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration;
34+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
35+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
3636
import org.springframework.context.annotation.Bean;
3737
import org.springframework.core.annotation.Order;
3838
import org.springframework.http.server.reactive.observation.DefaultServerRequestObservationConvention;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/web/servlet/WebMvcObservationAutoConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
import jakarta.servlet.DispatcherType;
2424

2525
import org.springframework.beans.factory.ObjectProvider;
26-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
27-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationProperties;
2826
import org.springframework.boot.autoconfigure.AutoConfiguration;
2927
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3028
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@@ -37,6 +35,8 @@
3735
import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration;
3836
import org.springframework.boot.metrics.autoconfigure.MetricsProperties;
3937
import org.springframework.boot.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration;
38+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
39+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationProperties;
4040
import org.springframework.boot.web.servlet.FilterRegistrationBean;
4141
import org.springframework.context.annotation.Bean;
4242
import org.springframework.context.annotation.Configuration;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/r2dbc/R2dbcObservationAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@
2525
import io.r2dbc.spi.ConnectionFactoryOptions;
2626

2727
import org.springframework.beans.factory.ObjectProvider;
28-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
2928
import org.springframework.boot.autoconfigure.AutoConfiguration;
3029
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3130
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
3231
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3332
import org.springframework.boot.context.properties.EnableConfigurationProperties;
33+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
3434
import org.springframework.boot.r2dbc.OptionsCapableConnectionFactory;
3535
import org.springframework.boot.r2dbc.autoconfigure.ProxyConnectionFactoryCustomizer;
3636
import org.springframework.context.annotation.Bean;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/scheduling/ScheduledTasksObservabilityAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@
1818

1919
import io.micrometer.observation.ObservationRegistry;
2020

21-
import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration;
2221
import org.springframework.boot.autoconfigure.AutoConfiguration;
2322
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2423
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2524
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
25+
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
2626
import org.springframework.context.annotation.Bean;
2727
import org.springframework.scheduling.annotation.SchedulingConfigurer;
2828
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,12 +308,6 @@
308308
"level": "error"
309309
}
310310
},
311-
{
312-
"name": "management.observations.annotations.enabled",
313-
"type": "java.lang.Boolean",
314-
"description": "Whether auto-configuration of Micrometer annotations is enabled.",
315-
"defaultValue": false
316-
},
317311
{
318312
"name": "management.otlp.logging.export.enabled",
319313
"type": "java.lang.Boolean",

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAuto
1616
org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration
1717
org.springframework.boot.actuate.autoconfigure.metrics.jersey.JerseyServerMetricsAutoConfiguration
1818
org.springframework.boot.actuate.autoconfigure.metrics.task.TaskExecutorMetricsAutoConfiguration
19+
org.springframework.boot.actuate.autoconfigure.observability.ObservabilityAutoConfiguration
1920
org.springframework.boot.actuate.autoconfigure.observation.batch.BatchObservationAutoConfiguration
2021
org.springframework.boot.actuate.autoconfigure.observation.graphql.GraphQlObservationAutoConfiguration
21-
org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration
2222
org.springframework.boot.actuate.autoconfigure.observation.web.client.HttpClientObservationsAutoConfiguration
2323
org.springframework.boot.actuate.autoconfigure.observation.web.reactive.WebFluxObservationAutoConfiguration
2424
org.springframework.boot.actuate.autoconfigure.observation.web.servlet.WebMvcObservationAutoConfiguration

0 commit comments

Comments
 (0)