From 149963bc6109fc6160b463e38287f206540511e2 Mon Sep 17 00:00:00 2001 From: Tommy Ludwig Date: Tue, 13 Feb 2018 18:17:26 +0900 Subject: [PATCH 1/3] Auto-configure ClassLoaderMetrics Auto-configure ClassLoaderMetrics as part of the JVM metrics from Micrometer. See gh-12022 --- .../metrics/MetricsAutoConfiguration.java | 7 ++++ .../MetricsAutoConfigurationTests.java | 34 ++++++++++++++++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java index 1beceb70c0..644d4425c4 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics; import io.micrometer.core.annotation.Timed; import io.micrometer.core.instrument.Clock; +import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; @@ -92,6 +93,12 @@ public class MetricsAutoConfiguration { return new JvmThreadMetrics(); } + @Bean + @ConditionalOnMissingBean + public ClassLoaderMetrics classLoaderMetrics() { + return new ClassLoaderMetrics(); + } + } @Configuration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java index 5ace579ba7..5c0b8b8f67 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java @@ -21,6 +21,7 @@ import java.util.List; import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.MeterBinder; +import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; @@ -94,7 +95,8 @@ public class MetricsAutoConfigurationTests { public void autoConfiguresJvmMetrics() { this.runner.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .hasSingleBean(JvmMemoryMetrics.class) - .hasSingleBean(JvmThreadMetrics.class)); + .hasSingleBean(JvmThreadMetrics.class) + .hasSingleBean(ClassLoaderMetrics.class)); } @Test @@ -102,7 +104,8 @@ public class MetricsAutoConfigurationTests { this.runner.withPropertyValues("management.metrics.binders.jvm.enabled=false") .run((context) -> assertThat(context).doesNotHaveBean(JvmGcMetrics.class) .doesNotHaveBean(JvmMemoryMetrics.class) - .doesNotHaveBean(JvmThreadMetrics.class)); + .doesNotHaveBean(JvmThreadMetrics.class) + .doesNotHaveBean(ClassLoaderMetrics.class)); } @Test @@ -111,7 +114,8 @@ public class MetricsAutoConfigurationTests { .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .hasBean("customJvmGcMetrics") .hasSingleBean(JvmMemoryMetrics.class) - .hasSingleBean(JvmThreadMetrics.class)); + .hasSingleBean(JvmThreadMetrics.class) + .hasSingleBean(ClassLoaderMetrics.class)); } @Test @@ -120,7 +124,8 @@ public class MetricsAutoConfigurationTests { .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .hasSingleBean(JvmMemoryMetrics.class) .hasBean("customJvmMemoryMetrics") - .hasSingleBean(JvmThreadMetrics.class)); + .hasSingleBean(JvmThreadMetrics.class) + .hasSingleBean(ClassLoaderMetrics.class)); } @Test @@ -129,9 +134,20 @@ public class MetricsAutoConfigurationTests { .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .hasSingleBean(JvmMemoryMetrics.class) .hasSingleBean(JvmThreadMetrics.class) + .hasSingleBean(ClassLoaderMetrics.class) .hasBean("customJvmThreadMetrics")); } + @Test + public void allowsCustomClassLoaderMetricsToBeUsed() { + this.runner.withUserConfiguration(CustomClassLoaderMetricsConfiguration.class) + .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) + .hasSingleBean(JvmMemoryMetrics.class) + .hasSingleBean(JvmThreadMetrics.class) + .hasSingleBean(ClassLoaderMetrics.class) + .hasBean("customClassLoaderMetrics")); + } + @Test public void autoConfiguresLogbackMetrics() { this.runner.run( @@ -256,6 +272,16 @@ public class MetricsAutoConfigurationTests { } + @Configuration + static class CustomClassLoaderMetricsConfiguration { + + @Bean + ClassLoaderMetrics customClassLoaderMetrics() { + return new ClassLoaderMetrics(); + } + + } + @Configuration static class CustomLogbackMetricsConfiguration { From a51fcd071e71527036d55a66a9add932b32fd8d8 Mon Sep 17 00:00:00 2001 From: Tommy Ludwig Date: Tue, 13 Feb 2018 18:34:50 +0900 Subject: [PATCH 2/3] Auto-configure FileDescriptorMetrics See gh-12022 --- .../metrics/MetricsAutoConfiguration.java | 8 +++++ .../MetricsAutoConfigurationTests.java | 33 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java index 644d4425c4..2493e741c7 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java @@ -23,6 +23,7 @@ import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import io.micrometer.core.instrument.binder.logging.LogbackMetrics; +import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics; import io.micrometer.core.instrument.binder.system.ProcessorMetrics; import io.micrometer.core.instrument.binder.system.UptimeMetrics; @@ -126,6 +127,13 @@ public class MetricsAutoConfiguration { return new ProcessorMetrics(); } + @Bean + @ConditionalOnProperty(name = "management.metrics.binders.fds.enabled", matchIfMissing = true) + @ConditionalOnMissingBean + public FileDescriptorMetrics fileDescriptorMetrics() { + return new FileDescriptorMetrics(); + } + } } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java index 5c0b8b8f67..4d886713fd 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java @@ -26,6 +26,7 @@ import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import io.micrometer.core.instrument.binder.logging.LogbackMetrics; +import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics; import io.micrometer.core.instrument.binder.system.ProcessorMetrics; import io.micrometer.core.instrument.binder.system.UptimeMetrics; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; @@ -210,6 +211,28 @@ public class MetricsAutoConfigurationTests { .hasBean("customProcessorMetrics")); } + @Test + public void autoConfiguresFileDescriptorMetrics() { + this.runner.run( + (context) -> assertThat(context) + .hasSingleBean(FileDescriptorMetrics.class)); + } + + @Test + public void allowsFileDescriptorMetricsToBeDisabled() { + this.runner.withPropertyValues("management.metrics.binders.fds.enabled=false") + .run((context) -> assertThat(context) + .doesNotHaveBean(FileDescriptorMetrics.class)); + } + + @Test + public void allowsCustomFileDescriptorToBeUsed() { + this.runner.withUserConfiguration(CustomFileDescriptorMetricsConfiguration.class) + .run((context) -> assertThat(context) + .hasSingleBean(FileDescriptorMetrics.class) + .hasBean("customFileDescriptorMetrics")); + } + @Configuration static class CustomClockConfiguration { @@ -312,4 +335,14 @@ public class MetricsAutoConfigurationTests { } + @Configuration + static class CustomFileDescriptorMetricsConfiguration { + + @Bean + FileDescriptorMetrics customFileDescriptorMetrics() { + return new FileDescriptorMetrics(); + } + + } + } From 25520a9e32d57fc0c5e8cec01b832363e3b7d43c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 13 Feb 2018 16:35:12 +0000 Subject: [PATCH 3/3] =?UTF-8?q?Polish=20=E2=80=9CAuto-configure=20FileDesc?= =?UTF-8?q?riptorMetrics=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes gh-12022 --- .../autoconfigure/metrics/MetricsAutoConfiguration.java | 2 +- .../additional-spring-configuration-metadata.json | 8 +++++++- .../metrics/MetricsAutoConfigurationTests.java | 9 ++++----- .../main/asciidoc/appendix-application-properties.adoc | 1 + 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java index 2493e741c7..96eaf0a939 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java @@ -128,7 +128,7 @@ public class MetricsAutoConfiguration { } @Bean - @ConditionalOnProperty(name = "management.metrics.binders.fds.enabled", matchIfMissing = true) + @ConditionalOnProperty(name = "management.metrics.binders.files.enabled", matchIfMissing = true) @ConditionalOnMissingBean public FileDescriptorMetrics fileDescriptorMetrics() { return new FileDescriptorMetrics(); 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 d44005d147..9632126d2c 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 @@ -179,7 +179,13 @@ "name": "management.info.git.mode", "defaultValue": "simple" }, - { + { + "name": "management.metrics.binders.files.enabled", + "type": "java.lang.Boolean", + "description": "Whether to enable files metrics.", + "defaultValue": true + }, + { "name": "management.metrics.binders.integration.enabled", "type": "java.lang.Boolean", "description": "Whether to enable Spring Integration metrics.", diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java index 4d886713fd..fcb05065bc 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java @@ -213,20 +213,19 @@ public class MetricsAutoConfigurationTests { @Test public void autoConfiguresFileDescriptorMetrics() { - this.runner.run( - (context) -> assertThat(context) - .hasSingleBean(FileDescriptorMetrics.class)); + this.runner.run((context) -> assertThat(context) + .hasSingleBean(FileDescriptorMetrics.class)); } @Test public void allowsFileDescriptorMetricsToBeDisabled() { - this.runner.withPropertyValues("management.metrics.binders.fds.enabled=false") + this.runner.withPropertyValues("management.metrics.binders.files.enabled=false") .run((context) -> assertThat(context) .doesNotHaveBean(FileDescriptorMetrics.class)); } @Test - public void allowsCustomFileDescriptorToBeUsed() { + public void allowsCustomFileDescriptorMetricsToBeUsed() { this.runner.withUserConfiguration(CustomFileDescriptorMetricsConfiguration.class) .run((context) -> assertThat(context) .hasSingleBean(FileDescriptorMetrics.class) 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 26543ff2cc..84e471527a 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 @@ -1295,6 +1295,7 @@ content into your application. Rather, pick only the properties that you need. management.info.git.mode=simple # Mode to use to expose git information. # METRICS + management.metrics.binders.files.enabled=true # Whether to enable files metrics. management.metrics.binders.integration.enabled=true # Whether to enable Spring Integration metrics. management.metrics.binders.jvm.enabled=true # Whether to enable JVM metrics. management.metrics.binders.logback.enabled=true # Whether to enable Logback metrics.