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