Skip to content

Commit 6dfc8f9

Browse files
shakuzenphilwebb
authored andcommitted
Support Per-meter configuration for OtlpMetricsProperties
Add configuration properties support for the new `OtlpConfig` methods `histogramFlavorPerMeter` and `maxBucketsPerMeter`. The existing `histogramFlavor` and `maxBucketCount` configuration properties are used as defaults when there isn't a specific per-meter configuration set. See gh-45203
1 parent 8f8a052 commit 6dfc8f9

File tree

5 files changed

+68
-4
lines changed

5 files changed

+68
-4
lines changed

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpMetricsProperties.java

+31-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

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

19+
import java.util.LinkedHashMap;
1920
import java.util.Map;
2021
import java.util.concurrent.TimeUnit;
2122

@@ -53,21 +54,32 @@ public class OtlpMetricsProperties extends StepRegistryProperties {
5354
private Map<String, String> headers;
5455

5556
/**
56-
* Histogram type to be preferred when histogram publishing is enabled.
57+
* Default histogram type when histogram publishing is enabled.
5758
*/
5859
private HistogramFlavor histogramFlavor = HistogramFlavor.EXPLICIT_BUCKET_HISTOGRAM;
5960

61+
/**
62+
* Per meter histogram type to be preferred when histogram publishing is enabled.
63+
*/
64+
private Map<String, HistogramFlavor> histogramFlavorPerMeter = new LinkedHashMap<>();
65+
6066
/**
6167
* Max scale to use for exponential histograms, if configured.
6268
*/
6369
private int maxScale = 20;
6470

6571
/**
66-
* Maximum number of buckets to be used for exponential histograms, if configured.
67-
* This has no effect on explicit bucket histograms.
72+
* Default maximum number of buckets to be used for exponential histograms, if
73+
* configured. This has no effect on explicit bucket histograms.
6874
*/
6975
private int maxBucketCount = 160;
7076

77+
/**
78+
* Per meter number of max buckets used for exponential histograms, if configured.
79+
* This has no effect on explicit bucket histograms.
80+
*/
81+
private Map<String, Integer> maxBucketsPerMeter = new LinkedHashMap<>();
82+
7183
/**
7284
* Time unit for exported metrics.
7385
*/
@@ -105,6 +117,14 @@ public void setHistogramFlavor(HistogramFlavor histogramFlavor) {
105117
this.histogramFlavor = histogramFlavor;
106118
}
107119

120+
public Map<String, HistogramFlavor> getHistogramFlavorPerMeter() {
121+
return this.histogramFlavorPerMeter;
122+
}
123+
124+
public void setHistogramFlavorPerMeter(Map<String, HistogramFlavor> histogramFlavorPerMeter) {
125+
this.histogramFlavorPerMeter = histogramFlavorPerMeter;
126+
}
127+
108128
public int getMaxScale() {
109129
return this.maxScale;
110130
}
@@ -121,6 +141,14 @@ public void setMaxBucketCount(int maxBucketCount) {
121141
this.maxBucketCount = maxBucketCount;
122142
}
123143

144+
public Map<String, Integer> getMaxBucketsPerMeter() {
145+
return this.maxBucketsPerMeter;
146+
}
147+
148+
public void setMaxBucketsPerMeter(Map<String, Integer> maxBucketsPerMeter) {
149+
this.maxBucketsPerMeter = maxBucketsPerMeter;
150+
}
151+
124152
public TimeUnit getBaseTimeUnit() {
125153
return this.baseTimeUnit;
126154
}

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpMetricsPropertiesConfigAdapter.java

+10
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ public HistogramFlavor histogramFlavor() {
8888
return get(OtlpMetricsProperties::getHistogramFlavor, OtlpConfig.super::histogramFlavor);
8989
}
9090

91+
@Override
92+
public Map<String, HistogramFlavor> histogramFlavorPerMeter() {
93+
return get(OtlpMetricsProperties::getHistogramFlavorPerMeter, OtlpConfig.super::histogramFlavorPerMeter);
94+
}
95+
96+
@Override
97+
public Map<String, Integer> maxBucketsPerMeter() {
98+
return get(OtlpMetricsProperties::getMaxBucketsPerMeter, OtlpConfig.super::maxBucketsPerMeter);
99+
}
100+
91101
@Override
92102
public int maxScale() {
93103
return get(OtlpMetricsProperties::getMaxScale, OtlpConfig.super::maxScale);

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpMetricsPropertiesConfigAdapterTests.java

+24
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,19 @@ void whenPropertiesHistogramFlavorIsSetAdapterHistogramFlavorReturnsIt() {
110110
assertThat(createAdapter().histogramFlavor()).isSameAs(HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM);
111111
}
112112

113+
@Test
114+
void whenPropertiesHistogramFlavorPerMeterIsNotSetAdapterHistogramFlavorReturnsEmptyMap() {
115+
assertThat(createAdapter().histogramFlavorPerMeter()).isEmpty();
116+
}
117+
118+
@Test
119+
void whenPropertiesHistogramFlavorPerMeterIsSetAdapterHistogramFlavorPerMeterReturnsIt() {
120+
this.properties
121+
.setHistogramFlavorPerMeter(Map.of("my.histograms", HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM));
122+
assertThat(createAdapter().histogramFlavorPerMeter()).containsEntry("my.histograms",
123+
HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM);
124+
}
125+
113126
@Test
114127
void whenPropertiesMaxScaleIsNotSetAdapterMaxScaleReturns20() {
115128
assertThat(createAdapter().maxScale()).isEqualTo(20);
@@ -132,6 +145,17 @@ void whenPropertiesMaxBucketCountIsSetAdapterMaxBucketCountReturnsIt() {
132145
assertThat(createAdapter().maxBucketCount()).isEqualTo(6);
133146
}
134147

148+
@Test
149+
void whenPropertiesMaxBucketsPerMeterIsNotSetAdapterMaxBucketsPerMeterReturnsEmptyMap() {
150+
assertThat(createAdapter().maxBucketsPerMeter()).isEmpty();
151+
}
152+
153+
@Test
154+
void whenPropertiesMaxBucketsPerMeterIsSetAdapterMaxBucketsPerMeterReturnsIt() {
155+
this.properties.setMaxBucketsPerMeter(Map.of("my.histograms", 111));
156+
assertThat(createAdapter().maxBucketsPerMeter()).containsEntry("my.histograms", 111);
157+
}
158+
135159
@Test
136160
void whenPropertiesBaseTimeUnitIsNotSetAdapterBaseTimeUnitReturnsMillis() {
137161
assertThat(createAdapter().baseTimeUnit()).isSameAs(TimeUnit.MILLISECONDS);

Diff for: spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpMetricsPropertiesTests.java

+2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ void defaultValuesAreConsistent() {
3737
assertStepRegistryDefaultValues(properties, config);
3838
assertThat(properties.getAggregationTemporality()).isSameAs(config.aggregationTemporality());
3939
assertThat(properties.getHistogramFlavor()).isSameAs(config.histogramFlavor());
40+
assertThat(properties.getHistogramFlavorPerMeter()).isEqualTo(config.histogramFlavorPerMeter());
4041
assertThat(properties.getMaxScale()).isEqualTo(config.maxScale());
4142
assertThat(properties.getMaxBucketCount()).isEqualTo(config.maxBucketCount());
43+
assertThat(properties.getMaxBucketsPerMeter()).isEqualTo(config.maxBucketsPerMeter());
4244
assertThat(properties.getBaseTimeUnit()).isSameAs(config.baseTimeUnit());
4345
}
4446

Diff for: spring-boot-project/spring-boot-dependencies/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -1548,7 +1548,7 @@ bom {
15481548
releaseNotes("https://github.com/apache/maven-war-plugin/releases/tag/maven-war-plugin-{version}")
15491549
}
15501550
}
1551-
library("Micrometer", "1.15.0-SNAPSHOT") {
1551+
library("Micrometer", "1.15.0-RC1") {
15521552
considerSnapshots()
15531553
group("io.micrometer") {
15541554
modules = [

0 commit comments

Comments
 (0)