Commit 42896823 authored by Andy Wilkinson's avatar Andy Wilkinson

Merge pull request #12022 from Tommy Ludwig

* gh-12022:
  Polish “Auto-configure FileDescriptorMetrics”
  Auto-configure FileDescriptorMetrics
  Auto-configure ClassLoaderMetrics
parents 83e0978a 25520a9e
...@@ -18,10 +18,12 @@ package org.springframework.boot.actuate.autoconfigure.metrics; ...@@ -18,10 +18,12 @@ package org.springframework.boot.actuate.autoconfigure.metrics;
import io.micrometer.core.annotation.Timed; import io.micrometer.core.annotation.Timed;
import io.micrometer.core.instrument.Clock; 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.JvmGcMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
import io.micrometer.core.instrument.binder.logging.LogbackMetrics; 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.ProcessorMetrics;
import io.micrometer.core.instrument.binder.system.UptimeMetrics; import io.micrometer.core.instrument.binder.system.UptimeMetrics;
...@@ -92,6 +94,12 @@ public class MetricsAutoConfiguration { ...@@ -92,6 +94,12 @@ public class MetricsAutoConfiguration {
return new JvmThreadMetrics(); return new JvmThreadMetrics();
} }
@Bean
@ConditionalOnMissingBean
public ClassLoaderMetrics classLoaderMetrics() {
return new ClassLoaderMetrics();
}
} }
@Configuration @Configuration
...@@ -119,6 +127,13 @@ public class MetricsAutoConfiguration { ...@@ -119,6 +127,13 @@ public class MetricsAutoConfiguration {
return new ProcessorMetrics(); return new ProcessorMetrics();
} }
@Bean
@ConditionalOnProperty(name = "management.metrics.binders.files.enabled", matchIfMissing = true)
@ConditionalOnMissingBean
public FileDescriptorMetrics fileDescriptorMetrics() {
return new FileDescriptorMetrics();
}
} }
} }
...@@ -179,7 +179,13 @@ ...@@ -179,7 +179,13 @@
"name": "management.info.git.mode", "name": "management.info.git.mode",
"defaultValue": "simple" "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", "name": "management.metrics.binders.integration.enabled",
"type": "java.lang.Boolean", "type": "java.lang.Boolean",
"description": "Whether to enable Spring Integration metrics.", "description": "Whether to enable Spring Integration metrics.",
......
...@@ -21,10 +21,12 @@ import java.util.List; ...@@ -21,10 +21,12 @@ import java.util.List;
import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.MeterBinder; 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.JvmGcMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
import io.micrometer.core.instrument.binder.logging.LogbackMetrics; 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.ProcessorMetrics;
import io.micrometer.core.instrument.binder.system.UptimeMetrics; import io.micrometer.core.instrument.binder.system.UptimeMetrics;
import io.micrometer.core.instrument.composite.CompositeMeterRegistry; import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
...@@ -94,7 +96,8 @@ public class MetricsAutoConfigurationTests { ...@@ -94,7 +96,8 @@ public class MetricsAutoConfigurationTests {
public void autoConfiguresJvmMetrics() { public void autoConfiguresJvmMetrics() {
this.runner.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) this.runner.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasSingleBean(JvmMemoryMetrics.class) .hasSingleBean(JvmMemoryMetrics.class)
.hasSingleBean(JvmThreadMetrics.class)); .hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class));
} }
@Test @Test
...@@ -102,7 +105,8 @@ public class MetricsAutoConfigurationTests { ...@@ -102,7 +105,8 @@ public class MetricsAutoConfigurationTests {
this.runner.withPropertyValues("management.metrics.binders.jvm.enabled=false") this.runner.withPropertyValues("management.metrics.binders.jvm.enabled=false")
.run((context) -> assertThat(context).doesNotHaveBean(JvmGcMetrics.class) .run((context) -> assertThat(context).doesNotHaveBean(JvmGcMetrics.class)
.doesNotHaveBean(JvmMemoryMetrics.class) .doesNotHaveBean(JvmMemoryMetrics.class)
.doesNotHaveBean(JvmThreadMetrics.class)); .doesNotHaveBean(JvmThreadMetrics.class)
.doesNotHaveBean(ClassLoaderMetrics.class));
} }
@Test @Test
...@@ -111,7 +115,8 @@ public class MetricsAutoConfigurationTests { ...@@ -111,7 +115,8 @@ public class MetricsAutoConfigurationTests {
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasBean("customJvmGcMetrics") .hasBean("customJvmGcMetrics")
.hasSingleBean(JvmMemoryMetrics.class) .hasSingleBean(JvmMemoryMetrics.class)
.hasSingleBean(JvmThreadMetrics.class)); .hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class));
} }
@Test @Test
...@@ -120,7 +125,8 @@ public class MetricsAutoConfigurationTests { ...@@ -120,7 +125,8 @@ public class MetricsAutoConfigurationTests {
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasSingleBean(JvmMemoryMetrics.class) .hasSingleBean(JvmMemoryMetrics.class)
.hasBean("customJvmMemoryMetrics") .hasBean("customJvmMemoryMetrics")
.hasSingleBean(JvmThreadMetrics.class)); .hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class));
} }
@Test @Test
...@@ -129,9 +135,20 @@ public class MetricsAutoConfigurationTests { ...@@ -129,9 +135,20 @@ public class MetricsAutoConfigurationTests {
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
.hasSingleBean(JvmMemoryMetrics.class) .hasSingleBean(JvmMemoryMetrics.class)
.hasSingleBean(JvmThreadMetrics.class) .hasSingleBean(JvmThreadMetrics.class)
.hasSingleBean(ClassLoaderMetrics.class)
.hasBean("customJvmThreadMetrics")); .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 @Test
public void autoConfiguresLogbackMetrics() { public void autoConfiguresLogbackMetrics() {
this.runner.run( this.runner.run(
...@@ -194,6 +211,27 @@ public class MetricsAutoConfigurationTests { ...@@ -194,6 +211,27 @@ public class MetricsAutoConfigurationTests {
.hasBean("customProcessorMetrics")); .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.files.enabled=false")
.run((context) -> assertThat(context)
.doesNotHaveBean(FileDescriptorMetrics.class));
}
@Test
public void allowsCustomFileDescriptorMetricsToBeUsed() {
this.runner.withUserConfiguration(CustomFileDescriptorMetricsConfiguration.class)
.run((context) -> assertThat(context)
.hasSingleBean(FileDescriptorMetrics.class)
.hasBean("customFileDescriptorMetrics"));
}
@Configuration @Configuration
static class CustomClockConfiguration { static class CustomClockConfiguration {
...@@ -256,6 +294,16 @@ public class MetricsAutoConfigurationTests { ...@@ -256,6 +294,16 @@ public class MetricsAutoConfigurationTests {
} }
@Configuration
static class CustomClassLoaderMetricsConfiguration {
@Bean
ClassLoaderMetrics customClassLoaderMetrics() {
return new ClassLoaderMetrics();
}
}
@Configuration @Configuration
static class CustomLogbackMetricsConfiguration { static class CustomLogbackMetricsConfiguration {
...@@ -286,4 +334,14 @@ public class MetricsAutoConfigurationTests { ...@@ -286,4 +334,14 @@ public class MetricsAutoConfigurationTests {
} }
@Configuration
static class CustomFileDescriptorMetricsConfiguration {
@Bean
FileDescriptorMetrics customFileDescriptorMetrics() {
return new FileDescriptorMetrics();
}
}
} }
...@@ -1295,6 +1295,7 @@ content into your application. Rather, pick only the properties that you need. ...@@ -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. management.info.git.mode=simple # Mode to use to expose git information.
# METRICS # 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.integration.enabled=true # Whether to enable Spring Integration metrics.
management.metrics.binders.jvm.enabled=true # Whether to enable JVM metrics. management.metrics.binders.jvm.enabled=true # Whether to enable JVM metrics.
management.metrics.binders.logback.enabled=true # Whether to enable Logback metrics. management.metrics.binders.logback.enabled=true # Whether to enable Logback metrics.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment