Skip to content

Commit 09bac7d

Browse files
authored
Stable cardinality limit property otel.java.metrics.cardinality.limit (#7199)
1 parent 490173b commit 09bac7d

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/MeterProviderConfiguration.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@
2121
import java.util.Locale;
2222
import java.util.Set;
2323
import java.util.function.BiFunction;
24+
import java.util.logging.Logger;
2425
import java.util.stream.Collectors;
2526

2627
final class MeterProviderConfiguration {
2728

29+
private static final Logger logger = Logger.getLogger(MeterProviderConfiguration.class.getName());
30+
2831
static void configureMeterProvider(
2932
SdkMeterProviderBuilder meterProviderBuilder,
3033
ConfigProperties config,
@@ -51,19 +54,26 @@ static void configureMeterProvider(
5154
break;
5255
}
5356

54-
int cardinalityLimit =
55-
config.getInt(
56-
"otel.experimental.metrics.cardinality.limit", MetricStorage.DEFAULT_MAX_CARDINALITY);
57-
if (cardinalityLimit < 1) {
58-
throw new ConfigurationException("otel.experimental.metrics.cardinality.limit must be >= 1");
57+
Integer cardinalityLimit = config.getInt("otel.java.metrics.cardinality.limit");
58+
if (cardinalityLimit == null) {
59+
cardinalityLimit = config.getInt("otel.experimental.metrics.cardinality.limit");
60+
if (cardinalityLimit != null) {
61+
logger.warning(
62+
"otel.experimental.metrics.cardinality.limit is deprecated and will be removed after 1.51.0 release. Please use otel.java.metrics.cardinality.limit instead.");
63+
}
64+
}
65+
if (cardinalityLimit != null && cardinalityLimit < 1) {
66+
throw new ConfigurationException("otel.java.metrics.cardinality.limit must be >= 1");
5967
}
68+
int resolvedCardinalityLimit =
69+
cardinalityLimit == null ? MetricStorage.DEFAULT_MAX_CARDINALITY : cardinalityLimit;
6070

6171
configureMetricReaders(
6272
config, spiHelper, metricReaderCustomizer, metricExporterCustomizer, closeables)
6373
.forEach(
6474
reader ->
6575
meterProviderBuilder.registerMetricReader(
66-
reader, instrumentType -> cardinalityLimit));
76+
reader, instrumentType -> resolvedCardinalityLimit));
6777
}
6878

6979
static List<MetricReader> configureMetricReaders(

sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/MeterProviderConfigurationTest.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ void configureMeterProvider_InvalidCardinalityLimit() {
4646
ImmutableMap.of(
4747
"otel.metrics.exporter",
4848
"logging",
49-
"otel.experimental.metrics.cardinality.limit",
49+
"otel.java.metrics.cardinality.limit",
5050
"0")),
5151
spiHelper,
5252
(a, b) -> a,
5353
(a, b) -> a,
5454
closeables);
5555
})
5656
.isInstanceOf(ConfigurationException.class)
57-
.hasMessage("otel.experimental.metrics.cardinality.limit must be >= 1");
57+
.hasMessage("otel.java.metrics.cardinality.limit must be >= 1");
5858
cleanup.addCloseables(closeables);
5959
}
6060

@@ -77,6 +77,26 @@ void configureMeterProvider_ConfiguresCardinalityLimit() {
7777

7878
// Customized limit cardinality limit to 100
7979
builder = SdkMeterProvider.builder();
80+
MeterProviderConfiguration.configureMeterProvider(
81+
builder,
82+
DefaultConfigProperties.createFromMap(
83+
ImmutableMap.of(
84+
"otel.metrics.exporter",
85+
"logging",
86+
"otel.java.metrics.cardinality.limit",
87+
"100",
88+
// otel.java.metrics.cardinality.limit takes priority over deprecated property
89+
"otel.experimental.metrics.cardinality.limit",
90+
"200")),
91+
spiHelper,
92+
(a, b) -> a,
93+
(a, b) -> a,
94+
closeables);
95+
cleanup.addCloseables(closeables);
96+
assertCardinalityLimit(builder, 100);
97+
98+
// Deprecated property
99+
builder = SdkMeterProvider.builder();
80100
MeterProviderConfiguration.configureMeterProvider(
81101
builder,
82102
DefaultConfigProperties.createFromMap(

0 commit comments

Comments
 (0)