Skip to content

Support per-meter configuration for OtlpMetricsProperties #45203

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

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

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

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

/**
* Histogram type to be preferred when histogram publishing is enabled.
* Default histogram type when histogram publishing is enabled.
*/
private HistogramFlavor histogramFlavor = HistogramFlavor.EXPLICIT_BUCKET_HISTOGRAM;

/**
* Per meter histogram type to be preferred when histogram publishing is enabled.
*/
private Map<String, HistogramFlavor> histogramFlavorPerMeter = new LinkedHashMap<>();

/**
* Max scale to use for exponential histograms, if configured.
*/
private int maxScale = 20;

/**
* Maximum number of buckets to be used for exponential histograms, if configured.
* This has no effect on explicit bucket histograms.
* Default maximum number of buckets to be used for exponential histograms, if
* configured. This has no effect on explicit bucket histograms.
*/
private int maxBucketCount = 160;

/**
* Per meter number of max buckets used for exponential histograms, if configured.
* This has no effect on explicit bucket histograms.
*/
private Map<String, Integer> maxBucketsPerMeter = new LinkedHashMap<>();

/**
* Time unit for exported metrics.
*/
Expand Down Expand Up @@ -105,6 +117,14 @@ public void setHistogramFlavor(HistogramFlavor histogramFlavor) {
this.histogramFlavor = histogramFlavor;
}

public Map<String, HistogramFlavor> getHistogramFlavorPerMeter() {
return this.histogramFlavorPerMeter;
}

public void setHistogramFlavorPerMeter(Map<String, HistogramFlavor> histogramFlavorPerMeter) {
this.histogramFlavorPerMeter = histogramFlavorPerMeter;
}

public int getMaxScale() {
return this.maxScale;
}
Expand All @@ -121,6 +141,14 @@ public void setMaxBucketCount(int maxBucketCount) {
this.maxBucketCount = maxBucketCount;
}

public Map<String, Integer> getMaxBucketsPerMeter() {
return this.maxBucketsPerMeter;
}

public void setMaxBucketsPerMeter(Map<String, Integer> maxBucketsPerMeter) {
this.maxBucketsPerMeter = maxBucketsPerMeter;
}

public TimeUnit getBaseTimeUnit() {
return this.baseTimeUnit;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,16 @@ public HistogramFlavor histogramFlavor() {
return get(OtlpMetricsProperties::getHistogramFlavor, OtlpConfig.super::histogramFlavor);
}

@Override
public Map<String, HistogramFlavor> histogramFlavorPerMeter() {
return get(OtlpMetricsProperties::getHistogramFlavorPerMeter, OtlpConfig.super::histogramFlavorPerMeter);
}

@Override
public Map<String, Integer> maxBucketsPerMeter() {
return get(OtlpMetricsProperties::getMaxBucketsPerMeter, OtlpConfig.super::maxBucketsPerMeter);
}

@Override
public int maxScale() {
return get(OtlpMetricsProperties::getMaxScale, OtlpConfig.super::maxScale);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,19 @@ void whenPropertiesHistogramFlavorIsSetAdapterHistogramFlavorReturnsIt() {
assertThat(createAdapter().histogramFlavor()).isSameAs(HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM);
}

@Test
void whenPropertiesHistogramFlavorPerMeterIsNotSetAdapterHistogramFlavorReturnsEmptyMap() {
assertThat(createAdapter().histogramFlavorPerMeter()).isEmpty();
}

@Test
void whenPropertiesHistogramFlavorPerMeterIsSetAdapterHistogramFlavorPerMeterReturnsIt() {
this.properties
.setHistogramFlavorPerMeter(Map.of("my.histograms", HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM));
assertThat(createAdapter().histogramFlavorPerMeter()).containsEntry("my.histograms",
HistogramFlavor.BASE2_EXPONENTIAL_BUCKET_HISTOGRAM);
}

@Test
void whenPropertiesMaxScaleIsNotSetAdapterMaxScaleReturns20() {
assertThat(createAdapter().maxScale()).isEqualTo(20);
Expand All @@ -132,6 +145,17 @@ void whenPropertiesMaxBucketCountIsSetAdapterMaxBucketCountReturnsIt() {
assertThat(createAdapter().maxBucketCount()).isEqualTo(6);
}

@Test
void whenPropertiesMaxBucketsPerMeterIsNotSetAdapterMaxBucketsPerMeterReturnsEmptyMap() {
assertThat(createAdapter().maxBucketsPerMeter()).isEmpty();
}

@Test
void whenPropertiesMaxBucketsPerMeterIsSetAdapterMaxBucketsPerMeterReturnsIt() {
this.properties.setMaxBucketsPerMeter(Map.of("my.histograms", 111));
assertThat(createAdapter().maxBucketsPerMeter()).containsEntry("my.histograms", 111);
}

@Test
void whenPropertiesBaseTimeUnitIsNotSetAdapterBaseTimeUnitReturnsMillis() {
assertThat(createAdapter().baseTimeUnit()).isSameAs(TimeUnit.MILLISECONDS);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ void defaultValuesAreConsistent() {
assertStepRegistryDefaultValues(properties, config);
assertThat(properties.getAggregationTemporality()).isSameAs(config.aggregationTemporality());
assertThat(properties.getHistogramFlavor()).isSameAs(config.histogramFlavor());
assertThat(properties.getHistogramFlavorPerMeter()).isEqualTo(config.histogramFlavorPerMeter());
assertThat(properties.getMaxScale()).isEqualTo(config.maxScale());
assertThat(properties.getMaxBucketCount()).isEqualTo(config.maxBucketCount());
assertThat(properties.getMaxBucketsPerMeter()).isEqualTo(config.maxBucketsPerMeter());
assertThat(properties.getBaseTimeUnit()).isSameAs(config.baseTimeUnit());
}

Expand Down
2 changes: 1 addition & 1 deletion spring-boot-project/spring-boot-dependencies/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -1548,7 +1548,7 @@ bom {
releaseNotes("https://github.com/apache/maven-war-plugin/releases/tag/maven-war-plugin-{version}")
}
}
library("Micrometer", "1.15.0-SNAPSHOT") {
library("Micrometer", "1.15.0-RC1") {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, this change isn't necessary since Boot is already on snapshots. When I started making the changes for the PR, this was still on M3.

considerSnapshots()
group("io.micrometer") {
modules = [
Expand Down