From da759f29d081cca1d8de6e40b88176d147e271b0 Mon Sep 17 00:00:00 2001 From: Jon Schneider Date: Sun, 18 Feb 2018 09:51:13 -0600 Subject: [PATCH 1/2] Restore behavior of management.metrics.export.simple.enabled See gh-12106 --- .../simple/SimpleMetricsExportAutoConfiguration.java | 2 ++ .../metrics/export/simple/SimpleProperties.java | 3 ++- .../export/simple/SimplePropertiesConfigAdapter.java | 5 ----- .../SimpleMetricsExportAutoConfigurationTests.java | 9 +++++++++ 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java index 983f8182bfe..d0796ca2a07 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java @@ -28,6 +28,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -46,6 +47,7 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnBean(Clock.class) @EnableConfigurationProperties(SimpleProperties.class) @ConditionalOnMissingBean(MeterRegistry.class) +@ConditionalOnProperty(prefix = "management.metrics.export.simple", name = "enabled", havingValue = "true", matchIfMissing = true) public class SimpleMetricsExportAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java index 8d0ec279d7e..ea0dacc0cfa 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java @@ -34,7 +34,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; public class SimpleProperties { /** - * Enable publishing to the backend. + * Enable in-memory metrics that aren't published anywhere (allows you to see + * what metrics are collected in the metrics actuator endpoint). */ private boolean enabled; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapter.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapter.java index 759fe3f8afb..9ae1a9bf3c8 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapter.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimplePropertiesConfigAdapter.java @@ -41,11 +41,6 @@ public class SimplePropertiesConfigAdapter return null; } - @Override - public boolean enabled() { - return get(SimpleProperties::getEnabled, SimpleConfig.super::enabled); - } - @Override public Duration step() { return get(SimpleProperties::getStep, SimpleConfig.super::step); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfigurationTests.java index b25b09a2505..e14c83b8814 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfigurationTests.java @@ -51,6 +51,15 @@ public class SimpleMetricsExportAutoConfigurationTests { .hasSingleBean(Clock.class).hasSingleBean(SimpleConfig.class)); } + @Test + public void backsOffWhenSpecificallyDisabled() { + this.contextRunner.withUserConfiguration(BaseConfiguration.class) + .withPropertyValues("management.metrics.export.simple.enabled=false") + .run((context) -> assertThat(context) + .doesNotHaveBean(SimpleMeterRegistry.class) + .doesNotHaveBean(SimpleConfig.class)); + } + @Test public void allowsConfigToBeCustomized() { this.contextRunner.withUserConfiguration(CustomConfigConfiguration.class) From 1dab83adaa16ddcf83126f5d52bed3619dd7f6f8 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 19 Feb 2018 10:44:09 +0100 Subject: [PATCH 2/2] Polish "Restore behavior of management.metrics.export.simple.enabled" Closes gh-12106 --- .../SimpleMetricsExportAutoConfiguration.java | 2 +- .../metrics/export/simple/SimpleProperties.java | 14 -------------- ...additional-spring-configuration-metadata.json | 6 ++++++ .../appendix-application-properties.adoc | 2 +- .../main/asciidoc/production-ready-features.adoc | 16 ++++++++++++++++ 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java index d0796ca2a07..8b1fd96b392 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleMetricsExportAutoConfiguration.java @@ -47,7 +47,7 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnBean(Clock.class) @EnableConfigurationProperties(SimpleProperties.class) @ConditionalOnMissingBean(MeterRegistry.class) -@ConditionalOnProperty(prefix = "management.metrics.export.simple", name = "enabled", havingValue = "true", matchIfMissing = true) +@ConditionalOnProperty(name = "management.metrics.export.simple.enabled", havingValue = "true", matchIfMissing = true) public class SimpleMetricsExportAutoConfiguration { @Bean diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java index ea0dacc0cfa..541952fc052 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/simple/SimpleProperties.java @@ -33,12 +33,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "management.metrics.export.simple") public class SimpleProperties { - /** - * Enable in-memory metrics that aren't published anywhere (allows you to see - * what metrics are collected in the metrics actuator endpoint). - */ - private boolean enabled; - /** * Step size (i.e. reporting frequency) to use. */ @@ -49,14 +43,6 @@ public class SimpleProperties { */ private CountingMode mode = CountingMode.CUMULATIVE; - public boolean getEnabled() { - return this.enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - public Duration getStep() { return this.step; } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 9632126d2cb..28a213cb614 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -215,6 +215,12 @@ "description": "Whether to enable uptime metrics.", "defaultValue": true }, + { + "name": "management.metrics.export.simple.enabled", + "type": "java.lang.Boolean", + "description": "Whether, in the absence of any other exporter, exporting of metrics to an in-memory backend is enabled.", + "defaultValue": true + }, { "name": "management.trace.http.enabled", "type": "java.lang.Boolean", diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 051ee33b317..27e7fee5015 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -1384,7 +1384,7 @@ content into your application. Rather, pick only the properties that you need. management.metrics.export.signalfx.uri= # Optional custom URI for the SignalFX API. management.metrics.export.simple.mode=cumulative # Counting mode. management.metrics.export.simple.step=10s # Step size (i.e. reporting frequency) to use. - management.metrics.export.statsd.enabled= # Whether exporting of metrics to this backend is enabled. + management.metrics.export.statsd.enabled=true # Whether, in the absence of any other exporter, exporting of metrics to an in-memory backend is enabled. management.metrics.export.statsd.flavor=datadog # StatsD line protocol to use. management.metrics.export.statsd.host=localhost # Host of the StatsD server to receive exported metrics. management.metrics.export.statsd.max-packet-length=1400 # Total length of a single payload should be kept within your network's MTU. diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc index 7504de0c0d3..c3893cf4c84 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc @@ -1272,6 +1272,22 @@ using: +[[production-ready-metrics-export-simple]] +==== Simple +Micrometer ships with a simple, in-memory backend that is automatically used as a fallback +if no other registry is configured. This allows you to see what metrics are collected in +the <>. + +The in-memory backend disables itself as soon as you're using any of the other available +backend. You can also disable it explicitly: + +[source,properties,indent=0] +---- + management.metrics.export.simple.enabled=false +---- + + + [[production-ready-metrics-export-newrelic]] ==== New Relic New Relic registry pushes metrics to New Relic periodically. To export metrics to