Skip to content

Commit 6b98c74

Browse files
authored
Add support for setting internal telemetry version w/ declarative config (#8045)
1 parent 1188cee commit 6b98c74

File tree

16 files changed

+593
-33
lines changed

16 files changed

+593
-33
lines changed

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

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,26 @@
1010
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.readFileBytes;
1111
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.validateEndpoint;
1212

13+
import io.opentelemetry.api.incubator.config.ConfigProvider;
14+
import io.opentelemetry.api.incubator.config.DeclarativeConfigException;
1315
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
1416
import io.opentelemetry.common.ComponentLoader;
1517
import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil;
1618
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
1719
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
1820
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
21+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ExtendedDeclarativeConfigProperties;
22+
import io.opentelemetry.sdk.common.InternalTelemetryVersion;
1923
import io.opentelemetry.sdk.common.export.MemoryMode;
2024
import io.opentelemetry.sdk.common.export.RetryPolicy;
2125
import java.net.URL;
2226
import java.time.Duration;
2327
import java.util.Collections;
2428
import java.util.List;
29+
import java.util.Locale;
2530
import java.util.function.BiConsumer;
2631
import java.util.function.Consumer;
32+
import javax.annotation.Nullable;
2733

2834
/**
2935
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
@@ -47,7 +53,7 @@ public static String getStructuredConfigOtlpProtocol(DeclarativeConfigProperties
4753
@SuppressWarnings("TooManyParameters")
4854
public static void configureOtlpExporterBuilder(
4955
String dataType,
50-
DeclarativeConfigProperties config,
56+
DeclarativeConfigProperties baseConfig,
5157
Consumer<ComponentLoader> setComponentLoader,
5258
Consumer<String> setEndpoint,
5359
BiConsumer<String, String> addHeader,
@@ -57,7 +63,14 @@ public static void configureOtlpExporterBuilder(
5763
BiConsumer<byte[], byte[]> setClientTls,
5864
Consumer<RetryPolicy> setRetryPolicy,
5965
Consumer<MemoryMode> setMemoryMode,
60-
boolean isHttpProtobuf) {
66+
boolean isHttpProtobuf,
67+
Consumer<InternalTelemetryVersion> internalTelemetryVersionConsumer,
68+
Runnable setNoopMeterProvider) {
69+
if (!(baseConfig instanceof ExtendedDeclarativeConfigProperties)) {
70+
throw new IllegalArgumentException("Expected ExtendedDeclarativeConfigProperties");
71+
}
72+
ExtendedDeclarativeConfigProperties config = (ExtendedDeclarativeConfigProperties) baseConfig;
73+
6174
setComponentLoader.accept(config.getComponentLoader());
6275

6376
URL endpoint = validateEndpoint(config.getString("endpoint"), isHttpProtobuf);
@@ -119,6 +132,35 @@ public static void configureOtlpExporterBuilder(
119132
}
120133

121134
IncubatingExporterBuilderUtil.configureExporterMemoryMode(config, setMemoryMode);
135+
136+
// InternalTelemetryVersion defaults to disabled (i.e. null) until semantic conventions are
137+
// stable. To disable, set a noop meter provider.
138+
InternalTelemetryVersion telemetryVersion =
139+
getInternalTelemetryVersion(config.getConfigProvider());
140+
if (telemetryVersion == null) {
141+
setNoopMeterProvider.run();
142+
} else {
143+
internalTelemetryVersionConsumer.accept(telemetryVersion);
144+
}
145+
}
146+
147+
@Nullable
148+
private static InternalTelemetryVersion getInternalTelemetryVersion(
149+
ConfigProvider configProvider) {
150+
String internalTelemetryVersion =
151+
configProvider.getInstrumentationConfig("otel_sdk").getString("internal_telemetry_version");
152+
if (internalTelemetryVersion == null) {
153+
return null;
154+
}
155+
switch (internalTelemetryVersion.toLowerCase(Locale.ROOT)) {
156+
case "legacy":
157+
return InternalTelemetryVersion.LEGACY;
158+
case "latest":
159+
return InternalTelemetryVersion.LATEST;
160+
default:
161+
throw new DeclarativeConfigException(
162+
"Invalid sdk telemetry version: " + internalTelemetryVersion);
163+
}
122164
}
123165

124166
private OtlpDeclarativeConfigUtil() {}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS;
99

1010
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.api.metrics.MeterProvider;
1112
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
1213
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder;
1314
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
@@ -47,7 +48,9 @@ public LogRecordExporter create(DeclarativeConfigProperties config) {
4748
builder::setClientTls,
4849
builder::setRetryPolicy,
4950
builder::setMemoryMode,
50-
/* isHttpProtobuf= */ false);
51+
/* isHttpProtobuf= */ false,
52+
builder::setInternalTelemetryVersion,
53+
() -> builder.setMeterProvider(MeterProvider::noop));
5154

5255
return builder.build();
5356
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS;
99

1010
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.api.metrics.MeterProvider;
1112
import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil;
1213
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
1314
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
@@ -48,7 +49,9 @@ public MetricExporter create(DeclarativeConfigProperties config) {
4849
builder::setClientTls,
4950
builder::setRetryPolicy,
5051
builder::setMemoryMode,
51-
/* isHttpProtobuf= */ false);
52+
/* isHttpProtobuf= */ false,
53+
builder::setInternalTelemetryVersion,
54+
() -> builder.setMeterProvider(MeterProvider::noop));
5255
IncubatingExporterBuilderUtil.configureOtlpAggregationTemporality(
5356
config, builder::setAggregationTemporalitySelector);
5457
IncubatingExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES;
99

1010
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.api.metrics.MeterProvider;
1112
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
1213
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder;
1314
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
@@ -47,7 +48,9 @@ public SpanExporter create(DeclarativeConfigProperties config) {
4748
builder::setClientTls,
4849
builder::setRetryPolicy,
4950
builder::setMemoryMode,
50-
/* isHttpProtobuf= */ false);
51+
/* isHttpProtobuf= */ false,
52+
builder::setInternalTelemetryVersion,
53+
() -> builder.setMeterProvider(MeterProvider::noop));
5154

5255
return builder.build();
5356
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_LOGS;
99

1010
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.api.metrics.MeterProvider;
1112
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
1213
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder;
1314
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
@@ -47,7 +48,9 @@ public LogRecordExporter create(DeclarativeConfigProperties config) {
4748
builder::setClientTls,
4849
builder::setRetryPolicy,
4950
builder::setMemoryMode,
50-
/* isHttpProtobuf= */ true);
51+
/* isHttpProtobuf= */ true,
52+
builder::setInternalTelemetryVersion,
53+
() -> builder.setMeterProvider(MeterProvider::noop));
5154

5255
return builder.build();
5356
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_METRICS;
99

1010
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.api.metrics.MeterProvider;
1112
import io.opentelemetry.exporter.internal.IncubatingExporterBuilderUtil;
1213
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
1314
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
@@ -48,7 +49,9 @@ public MetricExporter create(DeclarativeConfigProperties config) {
4849
builder::setClientTls,
4950
builder::setRetryPolicy,
5051
builder::setMemoryMode,
51-
/* isHttpProtobuf= */ true);
52+
/* isHttpProtobuf= */ true,
53+
builder::setInternalTelemetryVersion,
54+
() -> builder.setMeterProvider(MeterProvider::noop));
5255
IncubatingExporterBuilderUtil.configureOtlpAggregationTemporality(
5356
config, builder::setAggregationTemporalitySelector);
5457
IncubatingExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.DATA_TYPE_TRACES;
99

1010
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
11+
import io.opentelemetry.api.metrics.MeterProvider;
1112
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
1213
import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder;
1314
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
@@ -47,7 +48,9 @@ public SpanExporter create(DeclarativeConfigProperties config) {
4748
builder::setClientTls,
4849
builder::setRetryPolicy,
4950
builder::setMemoryMode,
50-
/* isHttpProtobuf= */ true);
51+
/* isHttpProtobuf= */ true,
52+
builder::setInternalTelemetryVersion,
53+
() -> builder.setMeterProvider(MeterProvider::noop));
5154

5255
return builder.build();
5356
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.sdk.autoconfigure.spi.internal;
7+
8+
import io.opentelemetry.api.incubator.config.ConfigProvider;
9+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
10+
11+
/**
12+
* Extended version of {@link DeclarativeConfigProperties} with access to {@link ConfigProvider}.
13+
*
14+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
15+
* at any time.
16+
*/
17+
public interface ExtendedDeclarativeConfigProperties extends DeclarativeConfigProperties {
18+
19+
ConfigProvider getConfigProvider();
20+
}

sdk-extensions/autoconfigure/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,12 @@ testing {
8686
dependencies {
8787
implementation(project(":sdk-extensions:incubator"))
8888
implementation(project(":exporters:logging"))
89+
implementation(project(":exporters:otlp:all"))
8990
implementation(project(":sdk:testing"))
91+
92+
implementation("io.opentelemetry.proto:opentelemetry-proto")
93+
implementation("com.linecorp.armeria:armeria-junit5")
94+
implementation("com.linecorp.armeria:armeria-grpc")
9095
}
9196
}
9297

0 commit comments

Comments
 (0)