Skip to content

Commit 9a089b6

Browse files
authored
Add property to allow autoconfiguration of SDK telemetry version (#8037)
1 parent adecf60 commit 9a089b6

15 files changed

Lines changed: 221 additions & 33 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.otlp.internal;
7+
8+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
9+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
10+
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
11+
import java.util.Locale;
12+
13+
/**
14+
* Reads the desired SDK internal telemetry version from {@link ConfigProperties}.
15+
*
16+
* <p>This is the same as {@code io.opentelemetry.sdk.autoconfigure.InternalTelemetryConfiguration}.
17+
* Any changes should be reflected there as well.
18+
*/
19+
final class InternalTelemetryConfiguration {
20+
21+
static InternalTelemetryVersion getVersion(ConfigProperties config) {
22+
String version = config.getString("otel.experimental.sdk.telemetry.version");
23+
if (version == null) {
24+
return InternalTelemetryVersion.LEGACY;
25+
}
26+
27+
switch (version.toLowerCase(Locale.ROOT)) {
28+
case "legacy":
29+
return InternalTelemetryVersion.LEGACY;
30+
case "latest":
31+
return InternalTelemetryVersion.LATEST;
32+
default:
33+
throw new ConfigurationException("Invalid sdk telemetry version: " + version);
34+
}
35+
}
36+
37+
private InternalTelemetryConfiguration() {}
38+
}

exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtil.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
1010
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1111
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
12+
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
1213
import io.opentelemetry.sdk.common.export.MemoryMode;
1314
import io.opentelemetry.sdk.common.export.RetryPolicy;
1415
import java.io.File;
@@ -62,7 +63,8 @@ public static void configureOtlpExporterBuilder(
6263
Consumer<byte[]> setTrustedCertificates,
6364
BiConsumer<byte[], byte[]> setClientTls,
6465
Consumer<RetryPolicy> setRetryPolicy,
65-
Consumer<MemoryMode> setMemoryMode) {
66+
Consumer<MemoryMode> setMemoryMode,
67+
Consumer<InternalTelemetryVersion> setInternalTelemetryVersion) {
6668
setComponentLoader.accept(config.getComponentLoader());
6769

6870
String protocol = getOtlpProtocol(dataType, config);
@@ -107,6 +109,9 @@ public static void configureOtlpExporterBuilder(
107109
setTimeout.accept(timeout);
108110
}
109111

112+
InternalTelemetryVersion telemetryVersion = InternalTelemetryConfiguration.getVersion(config);
113+
setInternalTelemetryVersion.accept(telemetryVersion);
114+
110115
String certificatePath =
111116
config.getString(
112117
determinePropertyByType(config, "otel.exporter.otlp", dataType, "certificate"));

exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpLogRecordExporterProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ public LogRecordExporter createExporter(ConfigProperties config) {
5353
builder::setTrustedCertificates,
5454
builder::setClientTls,
5555
builder::setRetryPolicy,
56-
builder::setMemoryMode);
56+
builder::setMemoryMode,
57+
builder::setInternalTelemetryVersion);
5758
builder.setMeterProvider(meterProviderRef::get);
5859

5960
return builder.build();
@@ -71,7 +72,8 @@ public LogRecordExporter createExporter(ConfigProperties config) {
7172
builder::setTrustedCertificates,
7273
builder::setClientTls,
7374
builder::setRetryPolicy,
74-
builder::setMemoryMode);
75+
builder::setMemoryMode,
76+
builder::setInternalTelemetryVersion);
7577
builder.setMeterProvider(meterProviderRef::get);
7678

7779
return builder.build();

exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpMetricExporterProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ public MetricExporter createExporter(ConfigProperties config) {
5454
builder::setTrustedCertificates,
5555
builder::setClientTls,
5656
builder::setRetryPolicy,
57-
builder::setMemoryMode);
57+
builder::setMemoryMode,
58+
builder::setInternalTelemetryVersion);
5859
ExporterBuilderUtil.configureOtlpAggregationTemporality(
5960
config, builder::setAggregationTemporalitySelector);
6061
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
@@ -76,7 +77,8 @@ public MetricExporter createExporter(ConfigProperties config) {
7677
builder::setTrustedCertificates,
7778
builder::setClientTls,
7879
builder::setRetryPolicy,
79-
builder::setMemoryMode);
80+
builder::setMemoryMode,
81+
builder::setInternalTelemetryVersion);
8082
ExporterBuilderUtil.configureOtlpAggregationTemporality(
8183
config, builder::setAggregationTemporalitySelector);
8284
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(

exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpSpanExporterProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public SpanExporter createExporter(ConfigProperties config) {
5252
builder::setTrustedCertificates,
5353
builder::setClientTls,
5454
builder::setRetryPolicy,
55-
builder::setMemoryMode);
55+
builder::setMemoryMode,
56+
builder::setInternalTelemetryVersion);
5657
builder.setMeterProvider(meterProviderRef::get);
5758

5859
return builder.build();
@@ -70,7 +71,8 @@ public SpanExporter createExporter(ConfigProperties config) {
7071
builder::setTrustedCertificates,
7172
builder::setClientTls,
7273
builder::setRetryPolicy,
73-
builder::setMemoryMode);
74+
builder::setMemoryMode,
75+
builder::setInternalTelemetryVersion);
7476
builder.setMeterProvider(meterProviderRef::get);
7577

7678
return builder.build();

exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtilTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ private static String configureEndpoint(String dataType, Map<String, String> pro
379379
value -> {},
380380
(value1, value2) -> {},
381381
value -> {},
382+
value -> {},
382383
value -> {});
383384

384385
return endpoint.get();

sdk-extensions/autoconfigure/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ testing {
7777
environment("OTEL_EXPORTER_OTLP_TIMEOUT", "5000")
7878
environment("OTEL_TEST_CONFIGURED", "true")
7979
environment("OTEL_TEST_WRAPPED", "1")
80+
environment("OTEL_EXPERIMENTAL_SDK_TELEMETRY_VERSION", "latest")
8081
}
8182
}
8283
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.sdk.autoconfigure;
7+
8+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
9+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
10+
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
11+
import java.util.Locale;
12+
13+
/**
14+
* Reads the desired SDK internal telemetry version from {@link ConfigProperties}.
15+
*
16+
* <p>This is the same as {@code
17+
* io.opentelemetry.exporter.otlp.internal.InternalTelemetryConfiguration}. Any changes should be
18+
* reflected there as well.
19+
*/
20+
final class InternalTelemetryConfiguration {
21+
22+
static InternalTelemetryVersion getVersion(ConfigProperties config) {
23+
String version = config.getString("otel.experimental.sdk.telemetry.version");
24+
if (version == null) {
25+
return InternalTelemetryVersion.LEGACY;
26+
}
27+
28+
switch (version.toLowerCase(Locale.ROOT)) {
29+
case "legacy":
30+
return InternalTelemetryVersion.LEGACY;
31+
case "latest":
32+
return InternalTelemetryVersion.LATEST;
33+
default:
34+
throw new ConfigurationException("Invalid sdk telemetry version: " + version);
35+
}
36+
}
37+
38+
private InternalTelemetryConfiguration() {}
39+
}

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

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.opentelemetry.api.metrics.MeterProvider;
1111
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
1212
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
13+
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
1314
import io.opentelemetry.sdk.logs.LogLimits;
1415
import io.opentelemetry.sdk.logs.LogLimitsBuilder;
1516
import io.opentelemetry.sdk.logs.LogRecordProcessor;
@@ -18,6 +19,7 @@
1819
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessorBuilder;
1920
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
2021
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
22+
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessorBuilder;
2123
import java.io.Closeable;
2224
import java.time.Duration;
2325
import java.util.ArrayList;
@@ -44,13 +46,17 @@ static void configureLoggerProvider(
4446
List<Closeable> closeables) {
4547

4648
loggerProviderBuilder.setLogLimits(() -> configureLogLimits(config));
47-
loggerProviderBuilder.setMeterProvider(() -> meterProvider);
49+
InternalTelemetryVersion telemetryVersion = InternalTelemetryConfiguration.getVersion(config);
50+
if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
51+
loggerProviderBuilder.setMeterProvider(() -> meterProvider);
52+
}
4853

4954
Map<String, LogRecordExporter> exportersByName =
5055
configureLogRecordExporters(config, spiHelper, logRecordExporterCustomizer, closeables);
5156

5257
List<LogRecordProcessor> processors =
53-
configureLogRecordProcessors(config, exportersByName, meterProvider, closeables);
58+
configureLogRecordProcessors(
59+
config, exportersByName, telemetryVersion, meterProvider, closeables);
5460
for (LogRecordProcessor processor : processors) {
5561
LogRecordProcessor wrapped = logRecordProcessorCustomizer.apply(processor, config);
5662
if (wrapped != processor) {
@@ -64,6 +70,7 @@ static void configureLoggerProvider(
6470
static List<LogRecordProcessor> configureLogRecordProcessors(
6571
ConfigProperties config,
6672
Map<String, LogRecordExporter> exportersByName,
73+
InternalTelemetryVersion telemetryVersion,
6774
MeterProvider meterProvider,
6875
List<Closeable> closeables) {
6976
Map<String, LogRecordExporter> exportersByNameCopy = new HashMap<>(exportersByName);
@@ -72,10 +79,12 @@ static List<LogRecordProcessor> configureLogRecordProcessors(
7279
for (String simpleProcessorExporterName : simpleProcessorExporterNames) {
7380
LogRecordExporter exporter = exportersByNameCopy.remove(simpleProcessorExporterName);
7481
if (exporter != null) {
75-
LogRecordProcessor logRecordProcessor =
76-
SimpleLogRecordProcessor.builder(exporter)
77-
.setMeterProvider(() -> meterProvider)
78-
.build();
82+
SimpleLogRecordProcessorBuilder logRecordProcessorBuilder =
83+
SimpleLogRecordProcessor.builder(exporter);
84+
if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
85+
logRecordProcessorBuilder.setMeterProvider(() -> meterProvider);
86+
}
87+
LogRecordProcessor logRecordProcessor = logRecordProcessorBuilder.build();
7988
closeables.add(logRecordProcessor);
8089
logRecordProcessors.add(logRecordProcessor);
8190
}
@@ -85,7 +94,8 @@ static List<LogRecordProcessor> configureLogRecordProcessors(
8594
LogRecordExporter compositeLogRecordExporter =
8695
LogRecordExporter.composite(exportersByNameCopy.values());
8796
LogRecordProcessor logRecordProcessor =
88-
configureBatchLogRecordProcessor(config, compositeLogRecordExporter, meterProvider);
97+
configureBatchLogRecordProcessor(
98+
config, compositeLogRecordExporter, telemetryVersion, meterProvider);
8999
closeables.add(logRecordProcessor);
90100
logRecordProcessors.add(logRecordProcessor);
91101
}
@@ -95,7 +105,10 @@ static List<LogRecordProcessor> configureLogRecordProcessors(
95105

96106
// VisibleForTesting
97107
static BatchLogRecordProcessor configureBatchLogRecordProcessor(
98-
ConfigProperties config, LogRecordExporter exporter, MeterProvider meterProvider) {
108+
ConfigProperties config,
109+
LogRecordExporter exporter,
110+
InternalTelemetryVersion telemetryVersion,
111+
MeterProvider meterProvider) {
99112
BatchLogRecordProcessorBuilder builder =
100113
BatchLogRecordProcessor.builder(exporter).setMeterProvider(meterProvider);
101114

@@ -119,6 +132,8 @@ static BatchLogRecordProcessor configureBatchLogRecordProcessor(
119132
builder.setExporterTimeout(timeout);
120133
}
121134

135+
builder.setInternalTelemetryVersion(telemetryVersion);
136+
122137
return builder.build();
123138
}
124139

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

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@
1111
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1212
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
1313
import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSamplerProvider;
14+
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
1415
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
1516
import io.opentelemetry.sdk.trace.SpanLimits;
1617
import io.opentelemetry.sdk.trace.SpanLimitsBuilder;
1718
import io.opentelemetry.sdk.trace.SpanProcessor;
1819
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
1920
import io.opentelemetry.sdk.trace.export.BatchSpanProcessorBuilder;
2021
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
22+
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessorBuilder;
2123
import io.opentelemetry.sdk.trace.export.SpanExporter;
2224
import io.opentelemetry.sdk.trace.samplers.Sampler;
2325
import java.io.Closeable;
@@ -49,7 +51,10 @@ static void configureTracerProvider(
4951
List<Closeable> closeables) {
5052

5153
tracerProviderBuilder.setSpanLimits(configureSpanLimits(config));
52-
tracerProviderBuilder.setMeterProvider(() -> meterProvider);
54+
InternalTelemetryVersion telemetryVersion = InternalTelemetryConfiguration.getVersion(config);
55+
if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
56+
tracerProviderBuilder.setMeterProvider(() -> meterProvider);
57+
}
5358

5459
String sampler = config.getString("otel.traces.sampler", PARENTBASED_ALWAYS_ON);
5560
tracerProviderBuilder.setSampler(
@@ -60,7 +65,8 @@ static void configureTracerProvider(
6065
config, spiHelper, spanExporterCustomizer, closeables);
6166

6267
List<SpanProcessor> processors =
63-
configureSpanProcessors(config, exportersByName, meterProvider, closeables);
68+
configureSpanProcessors(
69+
config, exportersByName, telemetryVersion, meterProvider, closeables);
6470
for (SpanProcessor processor : processors) {
6571
SpanProcessor wrapped = spanProcessorCustomizer.apply(processor, config);
6672
if (wrapped != processor) {
@@ -73,6 +79,7 @@ static void configureTracerProvider(
7379
static List<SpanProcessor> configureSpanProcessors(
7480
ConfigProperties config,
7581
Map<String, SpanExporter> exportersByName,
82+
InternalTelemetryVersion telemetryVersion,
7683
MeterProvider meterProvider,
7784
List<Closeable> closeables) {
7885
Map<String, SpanExporter> exportersByNameCopy = new HashMap<>(exportersByName);
@@ -81,8 +88,11 @@ static List<SpanProcessor> configureSpanProcessors(
8188
for (String simpleProcessorExporterNames : simpleProcessorExporterNames) {
8289
SpanExporter exporter = exportersByNameCopy.remove(simpleProcessorExporterNames);
8390
if (exporter != null) {
84-
SpanProcessor spanProcessor =
85-
SimpleSpanProcessor.builder(exporter).setMeterProvider(() -> meterProvider).build();
91+
SimpleSpanProcessorBuilder spanProcessorBuilder = SimpleSpanProcessor.builder(exporter);
92+
if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
93+
spanProcessorBuilder.setMeterProvider(() -> meterProvider);
94+
}
95+
SpanProcessor spanProcessor = spanProcessorBuilder.build();
8696
closeables.add(spanProcessor);
8797
spanProcessors.add(spanProcessor);
8898
}
@@ -91,7 +101,8 @@ static List<SpanProcessor> configureSpanProcessors(
91101
if (!exportersByNameCopy.isEmpty()) {
92102
SpanExporter compositeSpanExporter = SpanExporter.composite(exportersByNameCopy.values());
93103
SpanProcessor spanProcessor =
94-
configureBatchSpanProcessor(config, compositeSpanExporter, meterProvider);
104+
configureBatchSpanProcessor(
105+
config, compositeSpanExporter, telemetryVersion, meterProvider);
95106
closeables.add(spanProcessor);
96107
spanProcessors.add(spanProcessor);
97108
}
@@ -101,7 +112,10 @@ static List<SpanProcessor> configureSpanProcessors(
101112

102113
// VisibleForTesting
103114
static BatchSpanProcessor configureBatchSpanProcessor(
104-
ConfigProperties config, SpanExporter exporter, MeterProvider meterProvider) {
115+
ConfigProperties config,
116+
SpanExporter exporter,
117+
InternalTelemetryVersion telemetryVersion,
118+
MeterProvider meterProvider) {
105119
BatchSpanProcessorBuilder builder =
106120
BatchSpanProcessor.builder(exporter).setMeterProvider(() -> meterProvider);
107121

@@ -125,6 +139,8 @@ static BatchSpanProcessor configureBatchSpanProcessor(
125139
builder.setExporterTimeout(timeout);
126140
}
127141

142+
builder.setInternalTelemetryVersion(telemetryVersion);
143+
128144
return builder.build();
129145
}
130146

0 commit comments

Comments
 (0)