mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Polish "Add Stackdriver metrics export support"
See gh-19528
This commit is contained in:
parent
d42256d856
commit
462442e7d2
@ -176,12 +176,12 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-registry-statsd</artifactId>
|
||||
<artifactId>micrometer-registry-stackdriver</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-registry-stackdriver</artifactId>
|
||||
<artifactId>micrometer-registry-statsd</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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<StackdriverProperties> implements StackdriverConfig {
|
||||
public class StackdriverPropertiesConfigAdapter extends StepRegistryPropertiesConfigAdapter<StackdriverProperties>
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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 {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1038,6 +1038,17 @@
|
||||
<artifactId>lettuce-core</artifactId>
|
||||
<version>${lettuce.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-registry-stackdriver</artifactId>
|
||||
<version>${micrometer.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>javax.annotation</groupId>
|
||||
<artifactId>javax.annotation-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-bom</artifactId>
|
||||
|
@ -1245,6 +1245,7 @@ Spring Boot Actuator provides dependency management and auto-configuration for h
|
||||
- <<production-ready-metrics-export-prometheus,Prometheus>>
|
||||
- <<production-ready-metrics-export-signalfx,SignalFx>>
|
||||
- <<production-ready-metrics-export-simple,Simple (in-memory)>>
|
||||
- <<production-ready-metrics-export-stackdriver,Stackdriver>>
|
||||
- <<production-ready-metrics-export-statsd,StatsD>>
|
||||
- <<production-ready-metrics-export-wavefront,Wavefront>>
|
||||
|
||||
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user