Skip to content

Commit 780172a

Browse files
authored
Disable actuator metrics by default (#927)
* disable actuator metrics by default * replace application.yml metrics filtering by meterRegistryCustomizer This makes it easier to enable/disable the metrics just by exposing 'metrics', instead of changing two separate configuration settings. Also clarifies the intention of filtering and is easier to override using env variable MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE. * rename ActuatorConfig to ActuatorMetricsConfig * enable/expose http.server.requests metrics in MetricsTest
1 parent 12526b8 commit 780172a

3 files changed

Lines changed: 38 additions & 9 deletions

File tree

src/main/java/org/fairdatateam/fairdatapoint/config/ActuatorConfig.java renamed to src/main/java/org/fairdatateam/fairdatapoint/config/ActuatorMetricsConfig.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,50 @@
2323
package org.fairdatateam.fairdatapoint.config;
2424

2525
import io.micrometer.common.KeyValue;
26+
import io.micrometer.core.instrument.MeterRegistry;
27+
import io.micrometer.core.instrument.config.MeterFilter;
28+
import lombok.extern.slf4j.Slf4j;
29+
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
30+
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
2631
import org.springframework.context.annotation.Bean;
2732
import org.springframework.context.annotation.Configuration;
2833
import org.springframework.http.server.observation.DefaultServerRequestObservationConvention;
2934
import org.springframework.http.server.observation.ServerRequestObservationContext;
3035

36+
@Slf4j
3137
@Configuration
32-
public class ActuatorConfig {
38+
@ConditionalOnExpression("'${management.endpoints.web.exposure.include}'.contains('metrics')")
39+
public class ActuatorMetricsConfig {
40+
41+
private final String meterName = "http.server.requests";
42+
43+
/**
44+
* Disables all actuator meters except for http.server.requests.
45+
* See <a href="https://docs.micrometer.io/micrometer/reference/concepts/meter-filters.html">meter filters</a>.
46+
* This is the equivalent of the following <code>application.yml</code> settings:
47+
* <pre>
48+
* management:
49+
* metrics:
50+
* enable:
51+
* all: false
52+
* http.server.requests: true
53+
* http.server.requests.active: false
54+
* </pre>
55+
*/
56+
@Bean
57+
public MeterRegistryCustomizer<MeterRegistry> meterRegistryCustomizer() {
58+
log.info("Denying all meters except {}", meterName);
59+
return registry -> {
60+
registry.config().meterFilter(MeterFilter.denyUnless(id -> id.getName().equals(meterName)));
61+
};
62+
}
3363

3464
/**
35-
* Replaces the default `uri` path-pattern values with full paths in actuator metrics http.server.requests
65+
* Replaces the default uri path-pattern values with full paths in actuator metrics http.server.requests
3666
*/
3767
@Bean
3868
DefaultServerRequestObservationConvention customServerRequestObservationConvention() {
69+
log.info("Using custom http.url metric for {}.", meterName);
3970
return new DefaultServerRequestObservationConvention() {
4071
/**
4172
* Replace the default URI path pattern (e.g. `/catalog/{id}`) with the full URI path (e.g. `/catalog/123`).

src/main/resources/application.yml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,10 @@ management:
3232
endpoints:
3333
web:
3434
exposure:
35-
include: health, info, metrics
36-
metrics:
37-
enable:
38-
all: false
39-
http.server.requests: true
40-
http.server.requests.active: false
35+
# To expose custom http.server.requests http.url metric, include "metrics".
36+
# This can also be done using env variable MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE.
37+
# Note the ActuatorMetricsConfig ensures that only the http.server.requests meter is enabled.
38+
include: health, info
4139

4240
security:
4341
jwt:

src/test/java/org/fairdatateam/fairdatapoint/acceptance/actuator/MetricsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545

4646
@ActiveProfiles(Profiles.TESTING)
4747
@AutoConfigureMockMvc
48-
@SpringBootTest
48+
@SpringBootTest(properties = {"management.endpoints.web.exposure.include=health,info,metrics"})
4949
@WithMockUser
5050
class MetricsTest {
5151

0 commit comments

Comments
 (0)