Merge pull request #10519 from Jon Schneider
* gh-10519: Improve new metrics endpoint Add auto-configuration for exporting metrics to StatsD Make the Graphite export protocol configurable Start building against Micrometer snapshots for 1.0.0-rc.2 Closes gh-10519pull/10535/head
commit
7d5f3a341f
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.metrics.export.statsd;
|
||||
|
||||
import io.micrometer.core.instrument.Clock;
|
||||
import io.micrometer.statsd.StatsdConfig;
|
||||
import io.micrometer.statsd.StatsdMeterRegistry;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.MetricsExporter;
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.StringToDurationConverter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
/**
|
||||
* Configuration for exporting metrics to StatsD.
|
||||
*
|
||||
* @author Jon Schneider
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass(StatsdMeterRegistry.class)
|
||||
@Import(StringToDurationConverter.class)
|
||||
@EnableConfigurationProperties(StatsdProperties.class)
|
||||
public class StatsdExportConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(StatsdConfig.class)
|
||||
public StatsdConfig statsdConfig(StatsdProperties statsdProperties) {
|
||||
return new StatsdPropertiesConfigAdapter(statsdProperties);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(value = "spring.metrics.statsd.enabled", matchIfMissing = true)
|
||||
public MetricsExporter statsdExporter(StatsdConfig statsdConfig, Clock clock) {
|
||||
return () -> new StatsdMeterRegistry(statsdConfig, clock);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public Clock micrometerClock() {
|
||||
return Clock.SYSTEM;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,157 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.metrics.export.statsd;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import io.micrometer.statsd.StatsdFlavor;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
/**
|
||||
* {@link ConfigurationProperties} for configuring StatsD metrics export.
|
||||
*
|
||||
* @author Jon Schneider
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "spring.metrics.statsd")
|
||||
public class StatsdProperties {
|
||||
|
||||
/**
|
||||
* Enable publishing to the backend.
|
||||
*/
|
||||
private Boolean enabled = true;
|
||||
|
||||
/**
|
||||
* Variant of the StatsD line protocol to use.
|
||||
*/
|
||||
private StatsdFlavor flavor = StatsdFlavor.Datadog;
|
||||
|
||||
/**
|
||||
* Host name of the StatsD agent.
|
||||
*/
|
||||
private String host = "localhost";
|
||||
|
||||
/**
|
||||
* UDP port of the StatsD agent.
|
||||
*/
|
||||
private Integer port = 8125;
|
||||
|
||||
/**
|
||||
* Total length of a single payload should be kept within your network's MTU.
|
||||
*/
|
||||
private Integer maxPacketLength = 1400;
|
||||
|
||||
/**
|
||||
* Determines how often gauges will be polled. When a gauge is polled, its value is
|
||||
* recalculated. If the value has changed, it is sent to the StatsD server.
|
||||
*/
|
||||
private Duration pollingFrequency = Duration.ofSeconds(10);
|
||||
|
||||
/**
|
||||
* Governs the maximum size of the queue of items waiting to be sent to a StatsD agent
|
||||
* over UDP.
|
||||
*/
|
||||
private Integer queueSize = Integer.MAX_VALUE;
|
||||
|
||||
/**
|
||||
* Used to create a bucket filter clamping the bucket domain of timer percentiles
|
||||
* histograms to some max value. This is used to limit the number of buckets shipped
|
||||
* to StatsD to save on storage.
|
||||
*/
|
||||
private Duration timerPercentilesMax = Duration.ofMinutes(2);
|
||||
|
||||
/**
|
||||
* Used to create a bucket filter clamping the bucket domain of timer percentiles
|
||||
* histograms to some min value. This is used to limit the number of buckets shipped
|
||||
* to StatsD to save on storage.
|
||||
*/
|
||||
private Duration timerPercentilesMin = Duration.ofMillis(10);
|
||||
|
||||
public Duration getTimerPercentilesMax() {
|
||||
return this.timerPercentilesMax;
|
||||
}
|
||||
|
||||
public void setTimerPercentilesMax(Duration timerPercentilesMax) {
|
||||
this.timerPercentilesMax = timerPercentilesMax;
|
||||
}
|
||||
|
||||
public Duration getTimerPercentilesMin() {
|
||||
return this.timerPercentilesMin;
|
||||
}
|
||||
|
||||
public void setTimerPercentilesMin(Duration timerPercentilesMin) {
|
||||
this.timerPercentilesMin = timerPercentilesMin;
|
||||
}
|
||||
|
||||
public Boolean getEnabled() {
|
||||
return this.enabled;
|
||||
}
|
||||
|
||||
public void setEnabled(Boolean enabled) {
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
public StatsdFlavor getFlavor() {
|
||||
return this.flavor;
|
||||
}
|
||||
|
||||
public void setFlavor(StatsdFlavor flavor) {
|
||||
this.flavor = flavor;
|
||||
}
|
||||
|
||||
public String getHost() {
|
||||
return this.host;
|
||||
}
|
||||
|
||||
public void setHost(String host) {
|
||||
this.host = host;
|
||||
}
|
||||
|
||||
public Integer getPort() {
|
||||
return this.port;
|
||||
}
|
||||
|
||||
public void setPort(Integer port) {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public Integer getMaxPacketLength() {
|
||||
return this.maxPacketLength;
|
||||
}
|
||||
|
||||
public void setMaxPacketLength(Integer maxPacketLength) {
|
||||
this.maxPacketLength = maxPacketLength;
|
||||
}
|
||||
|
||||
public Duration getPollingFrequency() {
|
||||
return this.pollingFrequency;
|
||||
}
|
||||
|
||||
public void setPollingFrequency(Duration pollingFrequency) {
|
||||
this.pollingFrequency = pollingFrequency;
|
||||
}
|
||||
|
||||
public Integer getQueueSize() {
|
||||
return this.queueSize;
|
||||
}
|
||||
|
||||
public void setQueueSize(Integer queueSize) {
|
||||
this.queueSize = queueSize;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.metrics.export.statsd;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import io.micrometer.statsd.StatsdConfig;
|
||||
import io.micrometer.statsd.StatsdFlavor;
|
||||
|
||||
import org.springframework.boot.actuate.autoconfigure.metrics.export.PropertiesConfigAdapter;
|
||||
|
||||
/**
|
||||
* Adapter to convert {@link StatsdProperties} to a {@link StatsdConfig}.
|
||||
*
|
||||
* @author Jon Schneider
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public class StatsdPropertiesConfigAdapter extends
|
||||
PropertiesConfigAdapter<StatsdProperties, StatsdConfig> implements StatsdConfig {
|
||||
|
||||
private static final StatsdConfig DEFAULTS = (key) -> null;
|
||||
|
||||
public StatsdPropertiesConfigAdapter(StatsdProperties properties) {
|
||||
super(properties, DEFAULTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String get(String s) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StatsdFlavor flavor() {
|
||||
return get(StatsdProperties::getFlavor, StatsdConfig::flavor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enabled() {
|
||||
return get(StatsdProperties::getEnabled, StatsdConfig::enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String host() {
|
||||
return get(StatsdProperties::getHost, StatsdConfig::host);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int port() {
|
||||
return get(StatsdProperties::getPort, StatsdConfig::port);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int maxPacketLength() {
|
||||
return get(StatsdProperties::getMaxPacketLength, StatsdConfig::maxPacketLength);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Duration pollingFrequency() {
|
||||
return get(StatsdProperties::getPollingFrequency, StatsdConfig::pollingFrequency);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int queueSize() {
|
||||
return get(StatsdProperties::getQueueSize, StatsdConfig::queueSize);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Support for exporting actuator metrics to StatsD.
|
||||
*/
|
||||
package org.springframework.boot.actuate.autoconfigure.metrics.export.statsd;
|
Loading…
Reference in New Issue