diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml
index 4068c27685d..aa824b2ae10 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml
@@ -176,12 +176,12 @@
io.micrometer
- micrometer-registry-statsd
+ micrometer-registry-stackdriver
true
io.micrometer
- micrometer-registry-stackdriver
+ micrometer-registry-statsd
true
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfiguration.java
index 458892d87a9..b3d9a20a3fe 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfiguration.java
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfiguration.java
@@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdrive
import io.micrometer.core.instrument.Clock;
import io.micrometer.stackdriver.StackdriverConfig;
import io.micrometer.stackdriver.StackdriverMeterRegistry;
+
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
@@ -34,9 +35,12 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
- * {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to Stackdriver.
+ * {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to
+ * Stackdriver.
*
* @author Johannes Graf
+ * @author Stephane Nicoll
+ * @since 2.3.0
*/
@Configuration(proxyBeanMethods = false)
@AutoConfigureBefore({ CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class })
@@ -44,10 +48,10 @@ import org.springframework.context.annotation.Configuration;
@ConditionalOnBean(Clock.class)
@ConditionalOnClass(StackdriverMeterRegistry.class)
@ConditionalOnProperty(prefix = "management.metrics.export.stackdriver", name = "enabled", havingValue = "true",
- matchIfMissing = true
-)
+ matchIfMissing = true)
@EnableConfigurationProperties(StackdriverProperties.class)
public class StackdriverMetricsExportAutoConfiguration {
+
private final StackdriverProperties properties;
public StackdriverMetricsExportAutoConfiguration(StackdriverProperties stackdriverProperties) {
@@ -62,9 +66,8 @@ public class StackdriverMetricsExportAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public StackdriverMeterRegistry StackdriverMeterRegistry(StackdriverConfig stackdriverConfig, Clock clock) {
- return StackdriverMeterRegistry.builder(stackdriverConfig)
- .clock(clock)
- .build();
+ public StackdriverMeterRegistry stackdriverMeterRegistry(StackdriverConfig stackdriverConfig, Clock clock) {
+ return StackdriverMeterRegistry.builder(stackdriverConfig).clock(clock).build();
}
+
}
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java
index 944a2437d2a..07c66682443 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java
@@ -19,28 +19,29 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdrive
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
-
/**
- * {@link ConfigurationProperties @ConfigurationProperties} for configuring Stackdriver metrics
- * export.
+ * {@link ConfigurationProperties @ConfigurationProperties} for configuring Stackdriver
+ * metrics export.
*
* @author Johannes Graf
+ * @author Stephane Nicoll
+ * @since 2.3.0
*/
@ConfigurationProperties(prefix = "management.metrics.export.stackdriver")
public class StackdriverProperties extends StepRegistryProperties {
/**
- * The ID of your google cloud platform project
+ * Identifier of the Google Cloud project to monitor.
*/
private String projectId;
/**
- * The resource type of the metrics
+ * Monitored resource type.
*/
private String resourceType = "global";
public String getProjectId() {
- return projectId;
+ return this.projectId;
}
public void setProjectId(String projectId) {
@@ -48,10 +49,11 @@ public class StackdriverProperties extends StepRegistryProperties {
}
public String getResourceType() {
- return resourceType;
+ return this.resourceType;
}
public void setResourceType(String resourceType) {
this.resourceType = resourceType;
}
+
}
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java
index ce605e8133f..9b14af43f7b 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java
@@ -17,14 +17,17 @@
package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver;
import io.micrometer.stackdriver.StackdriverConfig;
+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapter;
/**
* Adapter to convert {@link StackdriverProperties} to a {@link StackdriverConfig}.
*
* @author Johannes Graf
+ * @since 2.3.0
*/
-public class StackdriverPropertiesConfigAdapter extends StepRegistryPropertiesConfigAdapter implements StackdriverConfig {
+public class StackdriverPropertiesConfigAdapter extends StepRegistryPropertiesConfigAdapter
+ implements StackdriverConfig {
public StackdriverPropertiesConfigAdapter(StackdriverProperties properties) {
super(properties);
@@ -39,4 +42,5 @@ public class StackdriverPropertiesConfigAdapter extends StepRegistryPropertiesCo
public String resourceType() {
return get(StackdriverProperties::getResourceType, StackdriverConfig.super::resourceType);
}
+
}
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfigurationTest.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfigurationTest.java
index 46f3183f80f..ae9182774e8 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfigurationTest.java
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfigurationTest.java
@@ -20,6 +20,7 @@ import io.micrometer.core.instrument.Clock;
import io.micrometer.stackdriver.StackdriverConfig;
import io.micrometer.stackdriver.StackdriverMeterRegistry;
import org.junit.jupiter.api.Test;
+
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
@@ -52,7 +53,7 @@ class StackdriverMetricsExportAutoConfigurationTest {
@Test
void autoConfiguresConfigAndMeterRegistry() {
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
- .withPropertyValues("management.metrics.export.stackdriver.project-id=qwert")
+ .withPropertyValues("management.metrics.export.stackdriver.project-id=test-project")
.run((context) -> assertThat(context).hasSingleBean(StackdriverMeterRegistry.class)
.hasSingleBean(StackdriverConfig.class));
}
@@ -67,14 +68,15 @@ class StackdriverMetricsExportAutoConfigurationTest {
@Test
void allowsCustomConfigToBeUsed() {
- this.contextRunner.withUserConfiguration(CustomConfigConfiguration.class).run((context) -> assertThat(context)
- .hasSingleBean(StackdriverMeterRegistry.class).hasSingleBean(StackdriverConfig.class).hasBean("customConfig"));
+ this.contextRunner.withUserConfiguration(CustomConfigConfiguration.class)
+ .run((context) -> assertThat(context).hasSingleBean(StackdriverMeterRegistry.class)
+ .hasSingleBean(StackdriverConfig.class).hasBean("customConfig"));
}
@Test
void allowsCustomRegistryToBeUsed() {
this.contextRunner.withUserConfiguration(CustomRegistryConfiguration.class)
- .withPropertyValues("management.metrics.export.stackdriver.project-id=qwert")
+ .withPropertyValues("management.metrics.export.stackdriver.project-id=test-project")
.run((context) -> assertThat(context).hasSingleBean(StackdriverMeterRegistry.class)
.hasBean("customRegistry").hasSingleBean(StackdriverConfig.class));
}
@@ -82,7 +84,7 @@ class StackdriverMetricsExportAutoConfigurationTest {
@Test
void stopsMeterRegistryWhenContextIsClosed() {
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
- .withPropertyValues("management.metrics.export.stackdriver.project-id=qwert").run((context) -> {
+ .withPropertyValues("management.metrics.export.stackdriver.project-id=test-project").run((context) -> {
StackdriverMeterRegistry registry = context.getBean(StackdriverMeterRegistry.class);
assertThat(registry.isClosed()).isFalse();
context.close();
@@ -108,7 +110,7 @@ class StackdriverMetricsExportAutoConfigurationTest {
StackdriverConfig customConfig() {
return (key) -> {
if ("stackdriver.projectId".equals(key)) {
- return "qwert";
+ return "test-project";
}
return null;
};
@@ -126,4 +128,5 @@ class StackdriverMetricsExportAutoConfigurationTest {
}
}
+
}
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTest.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTest.java
index c48aa14c35e..6eb3650e963 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTest.java
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTest.java
@@ -16,7 +16,6 @@
package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver;
-
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,10 +33,12 @@ class StackdriverPropertiesConfigAdapterTest {
properties.setProjectId("my-gcp-project-id");
assertThat(new StackdriverPropertiesConfigAdapter(properties).projectId()).isEqualTo("my-gcp-project-id");
}
+
@Test
void whenPropertiesResourceTypeIsSetAdapterResourceTypeReturnsIt() {
StackdriverProperties properties = new StackdriverProperties();
properties.setResourceType("my-resource-type");
assertThat(new StackdriverPropertiesConfigAdapter(properties).resourceType()).isEqualTo("my-resource-type");
}
+
}
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesTest.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesTest.java
index 98a6a981d08..89c16cb9c0d 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesTest.java
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesTest.java
@@ -16,9 +16,9 @@
package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver;
-
import io.micrometer.stackdriver.StackdriverConfig;
import org.junit.jupiter.api.Test;
+
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesTests;
import static org.assertj.core.api.Assertions.assertThat;
@@ -37,4 +37,5 @@ class StackdriverPropertiesTest extends StepRegistryPropertiesTests {
assertStepRegistryDefaultValues(properties, config);
assertThat(properties.getResourceType()).isEqualTo(config.resourceType());
}
+
}
diff --git a/spring-boot-project/spring-boot-dependencies/pom.xml b/spring-boot-project/spring-boot-dependencies/pom.xml
index 38c72904ff1..ce2763d9eb5 100644
--- a/spring-boot-project/spring-boot-dependencies/pom.xml
+++ b/spring-boot-project/spring-boot-dependencies/pom.xml
@@ -1038,6 +1038,17 @@
lettuce-core
${lettuce.version}
+
+ io.micrometer
+ micrometer-registry-stackdriver
+ ${micrometer.version}
+
+
+ javax.annotation
+ javax.annotation-api
+
+
+
io.micrometer
micrometer-bom
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 24fd61b0322..1537c2f4f6d 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
@@ -1245,6 +1245,7 @@ Spring Boot Actuator provides dependency management and auto-configuration for h
- <>
- <>
- <>
+- <>
- <>
- <>
@@ -1584,6 +1585,25 @@ You can also disable it explicitly:
+[[production-ready-metrics-export-stackdriver]]
+==== Stackdriver
+Stackdriver registry pushes metrics to https://cloud.google.com/stackdriver/[Stackdriver] periodically.
+To export metrics to SaaS {micrometer-registry-docs}/stackdriver[Stackdriver], your Google Cloud project id must be provided:
+
+[source,properties,indent=0,configprops]
+----
+ management.metrics.export.stackdriver.project-id=my-project
+----
+
+You can also change the interval at which metrics are sent to Stackdriver:
+
+[source,properties,indent=0,configprops]
+----
+ management.metrics.export.stackdriver.step=30s
+----
+
+
+
[[production-ready-metrics-export-statsd]]
==== StatsD
The StatsD registry pushes metrics over UDP to a StatsD agent eagerly.