Skip to content

Commit 462442e

Browse files
committed
Polish "Add Stackdriver metrics export support"
See gh-19528
1 parent d42256d commit 462442e

File tree

9 files changed

+70
-25
lines changed

9 files changed

+70
-25
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,12 +176,12 @@
176176
</dependency>
177177
<dependency>
178178
<groupId>io.micrometer</groupId>
179-
<artifactId>micrometer-registry-statsd</artifactId>
179+
<artifactId>micrometer-registry-stackdriver</artifactId>
180180
<optional>true</optional>
181181
</dependency>
182182
<dependency>
183183
<groupId>io.micrometer</groupId>
184-
<artifactId>micrometer-registry-stackdriver</artifactId>
184+
<artifactId>micrometer-registry-statsd</artifactId>
185185
<optional>true</optional>
186186
</dependency>
187187
<dependency>

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfiguration.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.micrometer.core.instrument.Clock;
2020
import io.micrometer.stackdriver.StackdriverConfig;
2121
import io.micrometer.stackdriver.StackdriverMeterRegistry;
22+
2223
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
2324
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
2425
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
@@ -34,20 +35,23 @@
3435
import org.springframework.context.annotation.Configuration;
3536

3637
/**
37-
* {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to Stackdriver.
38+
* {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to
39+
* Stackdriver.
3840
*
3941
* @author Johannes Graf
42+
* @author Stephane Nicoll
43+
* @since 2.3.0
4044
*/
4145
@Configuration(proxyBeanMethods = false)
4246
@AutoConfigureBefore({ CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class })
4347
@AutoConfigureAfter(MetricsAutoConfiguration.class)
4448
@ConditionalOnBean(Clock.class)
4549
@ConditionalOnClass(StackdriverMeterRegistry.class)
4650
@ConditionalOnProperty(prefix = "management.metrics.export.stackdriver", name = "enabled", havingValue = "true",
47-
matchIfMissing = true
48-
)
51+
matchIfMissing = true)
4952
@EnableConfigurationProperties(StackdriverProperties.class)
5053
public class StackdriverMetricsExportAutoConfiguration {
54+
5155
private final StackdriverProperties properties;
5256

5357
public StackdriverMetricsExportAutoConfiguration(StackdriverProperties stackdriverProperties) {
@@ -62,9 +66,8 @@ public StackdriverConfig stackdriverConfig() {
6266

6367
@Bean
6468
@ConditionalOnMissingBean
65-
public StackdriverMeterRegistry StackdriverMeterRegistry(StackdriverConfig stackdriverConfig, Clock clock) {
66-
return StackdriverMeterRegistry.builder(stackdriverConfig)
67-
.clock(clock)
68-
.build();
69+
public StackdriverMeterRegistry stackdriverMeterRegistry(StackdriverConfig stackdriverConfig, Clock clock) {
70+
return StackdriverMeterRegistry.builder(stackdriverConfig).clock(clock).build();
6971
}
72+
7073
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverProperties.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,39 +19,41 @@
1919
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryProperties;
2020
import org.springframework.boot.context.properties.ConfigurationProperties;
2121

22-
2322
/**
24-
* {@link ConfigurationProperties @ConfigurationProperties} for configuring Stackdriver metrics
25-
* export.
23+
* {@link ConfigurationProperties @ConfigurationProperties} for configuring Stackdriver
24+
* metrics export.
2625
*
2726
* @author Johannes Graf
27+
* @author Stephane Nicoll
28+
* @since 2.3.0
2829
*/
2930
@ConfigurationProperties(prefix = "management.metrics.export.stackdriver")
3031
public class StackdriverProperties extends StepRegistryProperties {
3132

3233
/**
33-
* The ID of your google cloud platform project
34+
* Identifier of the Google Cloud project to monitor.
3435
*/
3536
private String projectId;
3637

3738
/**
38-
* The resource type of the metrics
39+
* Monitored resource type.
3940
*/
4041
private String resourceType = "global";
4142

4243
public String getProjectId() {
43-
return projectId;
44+
return this.projectId;
4445
}
4546

4647
public void setProjectId(String projectId) {
4748
this.projectId = projectId;
4849
}
4950

5051
public String getResourceType() {
51-
return resourceType;
52+
return this.resourceType;
5253
}
5354

5455
public void setResourceType(String resourceType) {
5556
this.resourceType = resourceType;
5657
}
58+
5759
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,17 @@
1717
package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver;
1818

1919
import io.micrometer.stackdriver.StackdriverConfig;
20+
2021
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapter;
2122

2223
/**
2324
* Adapter to convert {@link StackdriverProperties} to a {@link StackdriverConfig}.
2425
*
2526
* @author Johannes Graf
27+
* @since 2.3.0
2628
*/
27-
public class StackdriverPropertiesConfigAdapter extends StepRegistryPropertiesConfigAdapter<StackdriverProperties> implements StackdriverConfig {
29+
public class StackdriverPropertiesConfigAdapter extends StepRegistryPropertiesConfigAdapter<StackdriverProperties>
30+
implements StackdriverConfig {
2831

2932
public StackdriverPropertiesConfigAdapter(StackdriverProperties properties) {
3033
super(properties);
@@ -39,4 +42,5 @@ public String projectId() {
3942
public String resourceType() {
4043
return get(StackdriverProperties::getResourceType, StackdriverConfig.super::resourceType);
4144
}
45+
4246
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverMetricsExportAutoConfigurationTest.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.micrometer.stackdriver.StackdriverConfig;
2121
import io.micrometer.stackdriver.StackdriverMeterRegistry;
2222
import org.junit.jupiter.api.Test;
23+
2324
import org.springframework.boot.autoconfigure.AutoConfigurations;
2425
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2526
import org.springframework.context.annotation.Bean;
@@ -52,7 +53,7 @@ void failsWithoutAnProjectId() {
5253
@Test
5354
void autoConfiguresConfigAndMeterRegistry() {
5455
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
55-
.withPropertyValues("management.metrics.export.stackdriver.project-id=qwert")
56+
.withPropertyValues("management.metrics.export.stackdriver.project-id=test-project")
5657
.run((context) -> assertThat(context).hasSingleBean(StackdriverMeterRegistry.class)
5758
.hasSingleBean(StackdriverConfig.class));
5859
}
@@ -67,22 +68,23 @@ void autoConfigurationCanBeDisabled() {
6768

6869
@Test
6970
void allowsCustomConfigToBeUsed() {
70-
this.contextRunner.withUserConfiguration(CustomConfigConfiguration.class).run((context) -> assertThat(context)
71-
.hasSingleBean(StackdriverMeterRegistry.class).hasSingleBean(StackdriverConfig.class).hasBean("customConfig"));
71+
this.contextRunner.withUserConfiguration(CustomConfigConfiguration.class)
72+
.run((context) -> assertThat(context).hasSingleBean(StackdriverMeterRegistry.class)
73+
.hasSingleBean(StackdriverConfig.class).hasBean("customConfig"));
7274
}
7375

7476
@Test
7577
void allowsCustomRegistryToBeUsed() {
7678
this.contextRunner.withUserConfiguration(CustomRegistryConfiguration.class)
77-
.withPropertyValues("management.metrics.export.stackdriver.project-id=qwert")
79+
.withPropertyValues("management.metrics.export.stackdriver.project-id=test-project")
7880
.run((context) -> assertThat(context).hasSingleBean(StackdriverMeterRegistry.class)
7981
.hasBean("customRegistry").hasSingleBean(StackdriverConfig.class));
8082
}
8183

8284
@Test
8385
void stopsMeterRegistryWhenContextIsClosed() {
8486
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
85-
.withPropertyValues("management.metrics.export.stackdriver.project-id=qwert").run((context) -> {
87+
.withPropertyValues("management.metrics.export.stackdriver.project-id=test-project").run((context) -> {
8688
StackdriverMeterRegistry registry = context.getBean(StackdriverMeterRegistry.class);
8789
assertThat(registry.isClosed()).isFalse();
8890
context.close();
@@ -108,7 +110,7 @@ static class CustomConfigConfiguration {
108110
StackdriverConfig customConfig() {
109111
return (key) -> {
110112
if ("stackdriver.projectId".equals(key)) {
111-
return "qwert";
113+
return "test-project";
112114
}
113115
return null;
114116
};
@@ -126,4 +128,5 @@ StackdriverMeterRegistry customRegistry(StackdriverConfig config, Clock clock) {
126128
}
127129

128130
}
131+
129132
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesConfigAdapterTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver;
1818

19-
2019
import org.junit.jupiter.api.Test;
2120

2221
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,10 +33,12 @@ void whenPropertiesProjectIdIsSetAdapterProjectIdReturnsIt() {
3433
properties.setProjectId("my-gcp-project-id");
3534
assertThat(new StackdriverPropertiesConfigAdapter(properties).projectId()).isEqualTo("my-gcp-project-id");
3635
}
36+
3737
@Test
3838
void whenPropertiesResourceTypeIsSetAdapterResourceTypeReturnsIt() {
3939
StackdriverProperties properties = new StackdriverProperties();
4040
properties.setResourceType("my-resource-type");
4141
assertThat(new StackdriverPropertiesConfigAdapter(properties).resourceType()).isEqualTo("my-resource-type");
4242
}
43+
4344
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/stackdriver/StackdriverPropertiesTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver;
1818

19-
2019
import io.micrometer.stackdriver.StackdriverConfig;
2120
import org.junit.jupiter.api.Test;
21+
2222
import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesTests;
2323

2424
import static org.assertj.core.api.Assertions.assertThat;
@@ -37,4 +37,5 @@ void defaultValuesAreConsistent() {
3737
assertStepRegistryDefaultValues(properties, config);
3838
assertThat(properties.getResourceType()).isEqualTo(config.resourceType());
3939
}
40+
4041
}

spring-boot-project/spring-boot-dependencies/pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,17 @@
10381038
<artifactId>lettuce-core</artifactId>
10391039
<version>${lettuce.version}</version>
10401040
</dependency>
1041+
<dependency>
1042+
<groupId>io.micrometer</groupId>
1043+
<artifactId>micrometer-registry-stackdriver</artifactId>
1044+
<version>${micrometer.version}</version>
1045+
<exclusions>
1046+
<exclusion>
1047+
<groupId>javax.annotation</groupId>
1048+
<artifactId>javax.annotation-api</artifactId>
1049+
</exclusion>
1050+
</exclusions>
1051+
</dependency>
10411052
<dependency>
10421053
<groupId>io.micrometer</groupId>
10431054
<artifactId>micrometer-bom</artifactId>

spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,6 +1245,7 @@ Spring Boot Actuator provides dependency management and auto-configuration for h
12451245
- <<production-ready-metrics-export-prometheus,Prometheus>>
12461246
- <<production-ready-metrics-export-signalfx,SignalFx>>
12471247
- <<production-ready-metrics-export-simple,Simple (in-memory)>>
1248+
- <<production-ready-metrics-export-stackdriver,Stackdriver>>
12481249
- <<production-ready-metrics-export-statsd,StatsD>>
12491250
- <<production-ready-metrics-export-wavefront,Wavefront>>
12501251

@@ -1584,6 +1585,25 @@ You can also disable it explicitly:
15841585

15851586

15861587

1588+
[[production-ready-metrics-export-stackdriver]]
1589+
==== Stackdriver
1590+
Stackdriver registry pushes metrics to https://cloud.google.com/stackdriver/[Stackdriver] periodically.
1591+
To export metrics to SaaS {micrometer-registry-docs}/stackdriver[Stackdriver], your Google Cloud project id must be provided:
1592+
1593+
[source,properties,indent=0,configprops]
1594+
----
1595+
management.metrics.export.stackdriver.project-id=my-project
1596+
----
1597+
1598+
You can also change the interval at which metrics are sent to Stackdriver:
1599+
1600+
[source,properties,indent=0,configprops]
1601+
----
1602+
management.metrics.export.stackdriver.step=30s
1603+
----
1604+
1605+
1606+
15871607
[[production-ready-metrics-export-statsd]]
15881608
==== StatsD
15891609
The StatsD registry pushes metrics over UDP to a StatsD agent eagerly.

0 commit comments

Comments
 (0)