Drop support for "all" from management.metrics.distribution.sla
See gh-14684
This commit is contained in:
parent
ef7c2bc6ea
commit
ccb964e886
|
|
@ -192,10 +192,9 @@ public class MetricsProperties {
|
|||
|
||||
/**
|
||||
* Specific SLA boundaries for meter IDs starting-with the specified name. The
|
||||
* longest match wins, the key `all` can also be used to configure all meters.
|
||||
* Counters will be published for each specified boundary. Values can be specified
|
||||
* as a long or as a Duration value (for timer meters, defaulting to ms if no unit
|
||||
* specified).
|
||||
* longest match wins. Counters will be published for each specified boundary.
|
||||
* Values can be specified as a long or as a Duration value (for timer meters,
|
||||
* defaulting to ms if no unit specified).
|
||||
*/
|
||||
private final Map<String, ServiceLevelAgreementBoundary[]> sla = new LinkedHashMap<>();
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics;
|
|||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.micrometer.core.instrument.Meter;
|
||||
|
|
@ -39,6 +40,7 @@ import org.springframework.util.StringUtils;
|
|||
* @author Jon Schneider
|
||||
* @author Phillip Webb
|
||||
* @author Stephane Nicoll
|
||||
* @author Artsiom Yudovin
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public class PropertiesMeterFilter implements MeterFilter {
|
||||
|
|
@ -66,7 +68,7 @@ public class PropertiesMeterFilter implements MeterFilter {
|
|||
|
||||
@Override
|
||||
public MeterFilterReply accept(Meter.Id id) {
|
||||
boolean enabled = lookup(this.properties.getEnable(), id, true);
|
||||
boolean enabled = lookupWithFallbackToAll(this.properties.getEnable(), id, true);
|
||||
return enabled ? MeterFilterReply.NEUTRAL : MeterFilterReply.DENY;
|
||||
}
|
||||
|
||||
|
|
@ -80,9 +82,10 @@ public class PropertiesMeterFilter implements MeterFilter {
|
|||
DistributionStatisticConfig config) {
|
||||
Distribution distribution = this.properties.getDistribution();
|
||||
return DistributionStatisticConfig.builder()
|
||||
.percentilesHistogram(
|
||||
lookup(distribution.getPercentilesHistogram(), id, null))
|
||||
.percentiles(lookup(distribution.getPercentiles(), id, null))
|
||||
.percentilesHistogram(lookupWithFallbackToAll(
|
||||
distribution.getPercentilesHistogram(), id, null))
|
||||
.percentiles(
|
||||
lookupWithFallbackToAll(distribution.getPercentiles(), id, null))
|
||||
.sla(convertSla(id.getType(), lookup(distribution.getSla(), id, null)))
|
||||
.build().merge(config);
|
||||
}
|
||||
|
|
@ -101,6 +104,18 @@ public class PropertiesMeterFilter implements MeterFilter {
|
|||
if (values.isEmpty()) {
|
||||
return defaultValue;
|
||||
}
|
||||
return this.baseLookup(values, id, () -> defaultValue);
|
||||
}
|
||||
|
||||
private <T> T lookupWithFallbackToAll(Map<String, T> values, Id id, T defaultValue) {
|
||||
if (values.isEmpty()) {
|
||||
return defaultValue;
|
||||
}
|
||||
return this.baseLookup(values, id,
|
||||
() -> values.getOrDefault("all", defaultValue));
|
||||
}
|
||||
|
||||
private <T> T baseLookup(Map<String, T> values, Id id, Supplier<T> defaultValue) {
|
||||
String name = id.getName();
|
||||
while (StringUtils.hasLength(name)) {
|
||||
T result = values.get(name);
|
||||
|
|
@ -110,7 +125,8 @@ public class PropertiesMeterFilter implements MeterFilter {
|
|||
int lastDot = name.lastIndexOf('.');
|
||||
name = (lastDot != -1) ? name.substring(0, lastDot) : "";
|
||||
}
|
||||
return values.getOrDefault("all", defaultValue);
|
||||
|
||||
return defaultValue.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
|
|||
*
|
||||
* @author Phillip Webb
|
||||
* @author Jon Schneider
|
||||
* @author Artsiom Yudovin
|
||||
*/
|
||||
public class PropertiesMeterFilterTests {
|
||||
|
||||
|
|
@ -261,45 +262,6 @@ public class PropertiesMeterFilterTests {
|
|||
.containsExactly(4000000, 5000000, 6000000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configureWhenAllSlaSetShouldSetSlaToValue() {
|
||||
PropertiesMeterFilter filter = new PropertiesMeterFilter(
|
||||
createProperties("distribution.sla.all=1,2,3"));
|
||||
assertThat(filter.configure(createMeterId("spring.boot"),
|
||||
DistributionStatisticConfig.DEFAULT).getSlaBoundaries())
|
||||
.containsExactly(1000000, 2000000, 3000000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configureWhenSlaDurationShouldOnlyApplyToTimer() {
|
||||
PropertiesMeterFilter filter = new PropertiesMeterFilter(
|
||||
createProperties("distribution.sla.all=1ms,2ms,3ms"));
|
||||
Meter.Id timer = createMeterId("spring.boot", Meter.Type.TIMER);
|
||||
Meter.Id summary = createMeterId("spring.boot", Meter.Type.DISTRIBUTION_SUMMARY);
|
||||
Meter.Id counter = createMeterId("spring.boot", Meter.Type.COUNTER);
|
||||
assertThat(filter.configure(timer, DistributionStatisticConfig.DEFAULT)
|
||||
.getSlaBoundaries()).containsExactly(1000000, 2000000, 3000000);
|
||||
assertThat(filter.configure(summary, DistributionStatisticConfig.DEFAULT)
|
||||
.getSlaBoundaries()).isNullOrEmpty();
|
||||
assertThat(filter.configure(counter, DistributionStatisticConfig.DEFAULT)
|
||||
.getSlaBoundaries()).isNullOrEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void configureWhenSlaLongShouldOnlyApplyToTimerAndDistributionSummary() {
|
||||
PropertiesMeterFilter filter = new PropertiesMeterFilter(
|
||||
createProperties("distribution.sla.all=1,2,3"));
|
||||
Meter.Id timer = createMeterId("spring.boot", Meter.Type.TIMER);
|
||||
Meter.Id summary = createMeterId("spring.boot", Meter.Type.DISTRIBUTION_SUMMARY);
|
||||
Meter.Id counter = createMeterId("spring.boot", Meter.Type.COUNTER);
|
||||
assertThat(filter.configure(timer, DistributionStatisticConfig.DEFAULT)
|
||||
.getSlaBoundaries()).containsExactly(1000000, 2000000, 3000000);
|
||||
assertThat(filter.configure(summary, DistributionStatisticConfig.DEFAULT)
|
||||
.getSlaBoundaries()).containsExactly(1, 2, 3);
|
||||
assertThat(filter.configure(counter, DistributionStatisticConfig.DEFAULT)
|
||||
.getSlaBoundaries()).isNullOrEmpty();
|
||||
}
|
||||
|
||||
private Id createMeterId(String name) {
|
||||
Meter.Type meterType = Type.TIMER;
|
||||
return createMeterId(name, meterType);
|
||||
|
|
|
|||
|
|
@ -1382,7 +1382,7 @@ content into your application. Rather, pick only the properties that you need.
|
|||
# METRICS
|
||||
management.metrics.distribution.percentiles-histogram.*= # Whether meter IDs starting with the specified name should publish percentile histograms.
|
||||
management.metrics.distribution.percentiles.*= # Specific computed non-aggregable percentiles to ship to the backend for meter IDs starting-with the specified name.
|
||||
management.metrics.distribution.sla.*= # Specific SLA boundaries for meter IDs starting-with the specified name. The longest match wins, the key `all` can also be used to configure all meters.
|
||||
management.metrics.distribution.sla.*= # Specific SLA boundaries for meter IDs starting-with the specified name. The longest match wins.
|
||||
management.metrics.enable.*= # Whether meter IDs starting-with the specified name should be enabled. The longest match wins, the key `all` can also be used to configure all meters.
|
||||
management.metrics.export.atlas.batch-size=10000 # Number of measurements per request to use for this backend. If more measurements are found, then multiple requests will be made.
|
||||
management.metrics.export.atlas.config-refresh-frequency=10s # Frequency for refreshing config settings from the LWC service.
|
||||
|
|
|
|||
Loading…
Reference in New Issue