diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpProperties.java index f3de0dd5d9b..701d45c3089 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpProperties.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpProperties.java @@ -18,6 +18,8 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.otlp; import java.util.Map; +import io.micrometer.registry.otlp.AggregationTemporality; + import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryProperties; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -26,6 +28,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; * export. * * @author Eddú Meléndez + * @author Jonatan Ivanov * @since 3.0.0 */ @ConfigurationProperties(prefix = "management.otlp.metrics.export") @@ -36,6 +39,12 @@ public class OtlpProperties extends StepRegistryProperties { */ private String url = "http://localhost:4318/v1/metrics"; + /** + * Aggregation temporality of sums. It defines the way additive values are expressed. + * This setting depends on the backend you use, some only support one temporality. + */ + private AggregationTemporality aggregationTemporality = AggregationTemporality.CUMULATIVE; + /** * Monitored resource's attributes. */ @@ -54,6 +63,14 @@ public class OtlpProperties extends StepRegistryProperties { this.url = url; } + public AggregationTemporality getAggregationTemporality() { + return this.aggregationTemporality; + } + + public void setAggregationTemporality(AggregationTemporality aggregationTemporality) { + this.aggregationTemporality = aggregationTemporality; + } + public Map getResourceAttributes() { return this.resourceAttributes; } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapter.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapter.java index 7d8eed7ee4b..814298d364e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapter.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapter.java @@ -18,6 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.otlp; import java.util.Map; +import io.micrometer.registry.otlp.AggregationTemporality; import io.micrometer.registry.otlp.OtlpConfig; import org.springframework.boot.actuate.autoconfigure.metrics.export.properties.StepRegistryPropertiesConfigAdapter; @@ -26,6 +27,7 @@ import org.springframework.boot.actuate.autoconfigure.metrics.export.properties. * Adapter to convert {@link OtlpProperties} to an {@link OtlpConfig}. * * @author Eddú Meléndez + * @author Jonatan Ivanov */ class OtlpPropertiesConfigAdapter extends StepRegistryPropertiesConfigAdapter implements OtlpConfig { @@ -43,6 +45,11 @@ class OtlpPropertiesConfigAdapter extends StepRegistryPropertiesConfigAdapter resourceAttributes() { return get(OtlpProperties::getResourceAttributes, OtlpConfig.super::resourceAttributes); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapterTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapterTests.java index 3253e01ccd2..d2fc02a7f41 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapterTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesConfigAdapterTests.java @@ -18,6 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics.export.otlp; import java.util.Map; +import io.micrometer.registry.otlp.AggregationTemporality; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -36,6 +37,21 @@ class OtlpPropertiesConfigAdapterTests { assertThat(new OtlpPropertiesConfigAdapter(properties).url()).isEqualTo("http://another-url:4318/v1/metrics"); } + @Test + void whenPropertiesAggregationTemporalityIsNotSetAdapterAggregationTemporalityReturnsCumulative() { + OtlpProperties properties = new OtlpProperties(); + assertThat(new OtlpPropertiesConfigAdapter(properties).aggregationTemporality()) + .isSameAs(AggregationTemporality.CUMULATIVE); + } + + @Test + void whenPropertiesAggregationTemporalityIsSetAdapterAggregationTemporalityReturnsIt() { + OtlpProperties properties = new OtlpProperties(); + properties.setAggregationTemporality(AggregationTemporality.DELTA); + assertThat(new OtlpPropertiesConfigAdapter(properties).aggregationTemporality()) + .isSameAs(AggregationTemporality.DELTA); + } + @Test void whenPropertiesResourceAttributesIsSetAdapterResourceAttributesReturnsIt() { OtlpProperties properties = new OtlpProperties(); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesTests.java index 534d8f946e4..37908acaad3 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/export/otlp/OtlpPropertiesTests.java @@ -36,6 +36,7 @@ class OtlpPropertiesTests extends StepRegistryPropertiesTests { OtlpConfig config = OtlpConfig.DEFAULT; assertStepRegistryDefaultValues(properties, config); assertThat(properties.getUrl()).isEqualTo(config.url()); + assertThat(properties.getAggregationTemporality()).isSameAs(config.aggregationTemporality()); } }