diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/InternalTelemetryConfiguration.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/InternalTelemetryConfiguration.java
new file mode 100644
index 00000000000..89af16ccbb4
--- /dev/null
+++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/InternalTelemetryConfiguration.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.exporter.otlp.internal;
+
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
+import java.util.Locale;
+
+/**
+ * Reads the desired SDK internal telemetry version from {@link ConfigProperties}.
+ *
+ *
This is the same as {@code io.opentelemetry.sdk.autoconfigure.InternalTelemetryConfiguration}.
+ * Any changes should be reflected there as well.
+ */
+final class InternalTelemetryConfiguration {
+
+ static InternalTelemetryVersion getVersion(ConfigProperties config) {
+ String version = config.getString("otel.experimental.sdk.telemetry.version");
+ if (version == null) {
+ return InternalTelemetryVersion.LEGACY;
+ }
+
+ switch (version.toLowerCase(Locale.ROOT)) {
+ case "legacy":
+ return InternalTelemetryVersion.LEGACY;
+ case "latest":
+ return InternalTelemetryVersion.LATEST;
+ default:
+ throw new ConfigurationException("Invalid sdk telemetry version: " + version);
+ }
+ }
+
+ private InternalTelemetryConfiguration() {}
+}
diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtil.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtil.java
index 427d79e7ac4..b2fbea35461 100644
--- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtil.java
+++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtil.java
@@ -9,6 +9,7 @@
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
import io.opentelemetry.sdk.common.export.MemoryMode;
import io.opentelemetry.sdk.common.export.RetryPolicy;
import java.io.File;
@@ -62,7 +63,8 @@ public static void configureOtlpExporterBuilder(
Consumer setTrustedCertificates,
BiConsumer setClientTls,
Consumer setRetryPolicy,
- Consumer setMemoryMode) {
+ Consumer setMemoryMode,
+ Consumer setInternalTelemetryVersion) {
setComponentLoader.accept(config.getComponentLoader());
String protocol = getOtlpProtocol(dataType, config);
@@ -107,6 +109,9 @@ public static void configureOtlpExporterBuilder(
setTimeout.accept(timeout);
}
+ InternalTelemetryVersion telemetryVersion = InternalTelemetryConfiguration.getVersion(config);
+ setInternalTelemetryVersion.accept(telemetryVersion);
+
String certificatePath =
config.getString(
determinePropertyByType(config, "otel.exporter.otlp", dataType, "certificate"));
diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpLogRecordExporterProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpLogRecordExporterProvider.java
index 1262bc7250f..6a478db1984 100644
--- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpLogRecordExporterProvider.java
+++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpLogRecordExporterProvider.java
@@ -53,7 +53,8 @@ public LogRecordExporter createExporter(ConfigProperties config) {
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy,
- builder::setMemoryMode);
+ builder::setMemoryMode,
+ builder::setInternalTelemetryVersion);
builder.setMeterProvider(meterProviderRef::get);
return builder.build();
@@ -71,7 +72,8 @@ public LogRecordExporter createExporter(ConfigProperties config) {
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy,
- builder::setMemoryMode);
+ builder::setMemoryMode,
+ builder::setInternalTelemetryVersion);
builder.setMeterProvider(meterProviderRef::get);
return builder.build();
diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpMetricExporterProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpMetricExporterProvider.java
index eb286b09b94..35039182f23 100644
--- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpMetricExporterProvider.java
+++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpMetricExporterProvider.java
@@ -54,7 +54,8 @@ public MetricExporter createExporter(ConfigProperties config) {
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy,
- builder::setMemoryMode);
+ builder::setMemoryMode,
+ builder::setInternalTelemetryVersion);
ExporterBuilderUtil.configureOtlpAggregationTemporality(
config, builder::setAggregationTemporalitySelector);
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
@@ -76,7 +77,8 @@ public MetricExporter createExporter(ConfigProperties config) {
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy,
- builder::setMemoryMode);
+ builder::setMemoryMode,
+ builder::setInternalTelemetryVersion);
ExporterBuilderUtil.configureOtlpAggregationTemporality(
config, builder::setAggregationTemporalitySelector);
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
diff --git a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpSpanExporterProvider.java b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpSpanExporterProvider.java
index 1561c057b29..f4467a2f601 100644
--- a/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpSpanExporterProvider.java
+++ b/exporters/otlp/all/src/main/java/io/opentelemetry/exporter/otlp/internal/OtlpSpanExporterProvider.java
@@ -52,7 +52,8 @@ public SpanExporter createExporter(ConfigProperties config) {
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy,
- builder::setMemoryMode);
+ builder::setMemoryMode,
+ builder::setInternalTelemetryVersion);
builder.setMeterProvider(meterProviderRef::get);
return builder.build();
@@ -70,7 +71,8 @@ public SpanExporter createExporter(ConfigProperties config) {
builder::setTrustedCertificates,
builder::setClientTls,
builder::setRetryPolicy,
- builder::setMemoryMode);
+ builder::setMemoryMode,
+ builder::setInternalTelemetryVersion);
builder.setMeterProvider(meterProviderRef::get);
return builder.build();
diff --git a/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtilTest.java b/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtilTest.java
index fb1061ae3fa..420c2f57e1e 100644
--- a/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtilTest.java
+++ b/exporters/otlp/all/src/test/java/io/opentelemetry/exporter/otlp/internal/OtlpConfigUtilTest.java
@@ -379,6 +379,7 @@ private static String configureEndpoint(String dataType, Map pro
value -> {},
(value1, value2) -> {},
value -> {},
+ value -> {},
value -> {});
return endpoint.get();
diff --git a/sdk-extensions/autoconfigure/build.gradle.kts b/sdk-extensions/autoconfigure/build.gradle.kts
index 3d54ea736c4..f78a0f12134 100644
--- a/sdk-extensions/autoconfigure/build.gradle.kts
+++ b/sdk-extensions/autoconfigure/build.gradle.kts
@@ -77,6 +77,7 @@ testing {
environment("OTEL_EXPORTER_OTLP_TIMEOUT", "5000")
environment("OTEL_TEST_CONFIGURED", "true")
environment("OTEL_TEST_WRAPPED", "1")
+ environment("OTEL_EXPERIMENTAL_SDK_TELEMETRY_VERSION", "latest")
}
}
}
diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/InternalTelemetryConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/InternalTelemetryConfiguration.java
new file mode 100644
index 00000000000..7f16f705c0b
--- /dev/null
+++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/InternalTelemetryConfiguration.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.sdk.autoconfigure;
+
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
+import java.util.Locale;
+
+/**
+ * Reads the desired SDK internal telemetry version from {@link ConfigProperties}.
+ *
+ * This is the same as {@code
+ * io.opentelemetry.exporter.otlp.internal.InternalTelemetryConfiguration}. Any changes should be
+ * reflected there as well.
+ */
+final class InternalTelemetryConfiguration {
+
+ static InternalTelemetryVersion getVersion(ConfigProperties config) {
+ String version = config.getString("otel.experimental.sdk.telemetry.version");
+ if (version == null) {
+ return InternalTelemetryVersion.LEGACY;
+ }
+
+ switch (version.toLowerCase(Locale.ROOT)) {
+ case "legacy":
+ return InternalTelemetryVersion.LEGACY;
+ case "latest":
+ return InternalTelemetryVersion.LATEST;
+ default:
+ throw new ConfigurationException("Invalid sdk telemetry version: " + version);
+ }
+ }
+
+ private InternalTelemetryConfiguration() {}
+}
diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfiguration.java
index 0c080e1333d..d2ee66685a5 100644
--- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfiguration.java
+++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfiguration.java
@@ -10,6 +10,7 @@
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
import io.opentelemetry.sdk.logs.LogLimits;
import io.opentelemetry.sdk.logs.LogLimitsBuilder;
import io.opentelemetry.sdk.logs.LogRecordProcessor;
@@ -18,6 +19,7 @@
import io.opentelemetry.sdk.logs.export.BatchLogRecordProcessorBuilder;
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessor;
+import io.opentelemetry.sdk.logs.export.SimpleLogRecordProcessorBuilder;
import java.io.Closeable;
import java.time.Duration;
import java.util.ArrayList;
@@ -44,13 +46,17 @@ static void configureLoggerProvider(
List closeables) {
loggerProviderBuilder.setLogLimits(() -> configureLogLimits(config));
- loggerProviderBuilder.setMeterProvider(() -> meterProvider);
+ InternalTelemetryVersion telemetryVersion = InternalTelemetryConfiguration.getVersion(config);
+ if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
+ loggerProviderBuilder.setMeterProvider(() -> meterProvider);
+ }
Map exportersByName =
configureLogRecordExporters(config, spiHelper, logRecordExporterCustomizer, closeables);
List processors =
- configureLogRecordProcessors(config, exportersByName, meterProvider, closeables);
+ configureLogRecordProcessors(
+ config, exportersByName, telemetryVersion, meterProvider, closeables);
for (LogRecordProcessor processor : processors) {
LogRecordProcessor wrapped = logRecordProcessorCustomizer.apply(processor, config);
if (wrapped != processor) {
@@ -64,6 +70,7 @@ static void configureLoggerProvider(
static List configureLogRecordProcessors(
ConfigProperties config,
Map exportersByName,
+ InternalTelemetryVersion telemetryVersion,
MeterProvider meterProvider,
List closeables) {
Map exportersByNameCopy = new HashMap<>(exportersByName);
@@ -72,10 +79,12 @@ static List configureLogRecordProcessors(
for (String simpleProcessorExporterName : simpleProcessorExporterNames) {
LogRecordExporter exporter = exportersByNameCopy.remove(simpleProcessorExporterName);
if (exporter != null) {
- LogRecordProcessor logRecordProcessor =
- SimpleLogRecordProcessor.builder(exporter)
- .setMeterProvider(() -> meterProvider)
- .build();
+ SimpleLogRecordProcessorBuilder logRecordProcessorBuilder =
+ SimpleLogRecordProcessor.builder(exporter);
+ if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
+ logRecordProcessorBuilder.setMeterProvider(() -> meterProvider);
+ }
+ LogRecordProcessor logRecordProcessor = logRecordProcessorBuilder.build();
closeables.add(logRecordProcessor);
logRecordProcessors.add(logRecordProcessor);
}
@@ -85,7 +94,8 @@ static List configureLogRecordProcessors(
LogRecordExporter compositeLogRecordExporter =
LogRecordExporter.composite(exportersByNameCopy.values());
LogRecordProcessor logRecordProcessor =
- configureBatchLogRecordProcessor(config, compositeLogRecordExporter, meterProvider);
+ configureBatchLogRecordProcessor(
+ config, compositeLogRecordExporter, telemetryVersion, meterProvider);
closeables.add(logRecordProcessor);
logRecordProcessors.add(logRecordProcessor);
}
@@ -95,7 +105,10 @@ static List configureLogRecordProcessors(
// VisibleForTesting
static BatchLogRecordProcessor configureBatchLogRecordProcessor(
- ConfigProperties config, LogRecordExporter exporter, MeterProvider meterProvider) {
+ ConfigProperties config,
+ LogRecordExporter exporter,
+ InternalTelemetryVersion telemetryVersion,
+ MeterProvider meterProvider) {
BatchLogRecordProcessorBuilder builder =
BatchLogRecordProcessor.builder(exporter).setMeterProvider(meterProvider);
@@ -119,6 +132,8 @@ static BatchLogRecordProcessor configureBatchLogRecordProcessor(
builder.setExporterTimeout(timeout);
}
+ builder.setInternalTelemetryVersion(telemetryVersion);
+
return builder.build();
}
diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java
index 7ecc048ff3d..8a5bde466a2 100644
--- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java
+++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java
@@ -11,6 +11,7 @@
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSamplerProvider;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
import io.opentelemetry.sdk.trace.SpanLimits;
import io.opentelemetry.sdk.trace.SpanLimitsBuilder;
@@ -18,6 +19,7 @@
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessorBuilder;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
+import io.opentelemetry.sdk.trace.export.SimpleSpanProcessorBuilder;
import io.opentelemetry.sdk.trace.export.SpanExporter;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.io.Closeable;
@@ -49,7 +51,10 @@ static void configureTracerProvider(
List closeables) {
tracerProviderBuilder.setSpanLimits(configureSpanLimits(config));
- tracerProviderBuilder.setMeterProvider(() -> meterProvider);
+ InternalTelemetryVersion telemetryVersion = InternalTelemetryConfiguration.getVersion(config);
+ if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
+ tracerProviderBuilder.setMeterProvider(() -> meterProvider);
+ }
String sampler = config.getString("otel.traces.sampler", PARENTBASED_ALWAYS_ON);
tracerProviderBuilder.setSampler(
@@ -60,7 +65,8 @@ static void configureTracerProvider(
config, spiHelper, spanExporterCustomizer, closeables);
List processors =
- configureSpanProcessors(config, exportersByName, meterProvider, closeables);
+ configureSpanProcessors(
+ config, exportersByName, telemetryVersion, meterProvider, closeables);
for (SpanProcessor processor : processors) {
SpanProcessor wrapped = spanProcessorCustomizer.apply(processor, config);
if (wrapped != processor) {
@@ -73,6 +79,7 @@ static void configureTracerProvider(
static List configureSpanProcessors(
ConfigProperties config,
Map exportersByName,
+ InternalTelemetryVersion telemetryVersion,
MeterProvider meterProvider,
List closeables) {
Map exportersByNameCopy = new HashMap<>(exportersByName);
@@ -81,8 +88,11 @@ static List configureSpanProcessors(
for (String simpleProcessorExporterNames : simpleProcessorExporterNames) {
SpanExporter exporter = exportersByNameCopy.remove(simpleProcessorExporterNames);
if (exporter != null) {
- SpanProcessor spanProcessor =
- SimpleSpanProcessor.builder(exporter).setMeterProvider(() -> meterProvider).build();
+ SimpleSpanProcessorBuilder spanProcessorBuilder = SimpleSpanProcessor.builder(exporter);
+ if (telemetryVersion != InternalTelemetryVersion.LEGACY) {
+ spanProcessorBuilder.setMeterProvider(() -> meterProvider);
+ }
+ SpanProcessor spanProcessor = spanProcessorBuilder.build();
closeables.add(spanProcessor);
spanProcessors.add(spanProcessor);
}
@@ -91,7 +101,8 @@ static List configureSpanProcessors(
if (!exportersByNameCopy.isEmpty()) {
SpanExporter compositeSpanExporter = SpanExporter.composite(exportersByNameCopy.values());
SpanProcessor spanProcessor =
- configureBatchSpanProcessor(config, compositeSpanExporter, meterProvider);
+ configureBatchSpanProcessor(
+ config, compositeSpanExporter, telemetryVersion, meterProvider);
closeables.add(spanProcessor);
spanProcessors.add(spanProcessor);
}
@@ -101,7 +112,10 @@ static List configureSpanProcessors(
// VisibleForTesting
static BatchSpanProcessor configureBatchSpanProcessor(
- ConfigProperties config, SpanExporter exporter, MeterProvider meterProvider) {
+ ConfigProperties config,
+ SpanExporter exporter,
+ InternalTelemetryVersion telemetryVersion,
+ MeterProvider meterProvider) {
BatchSpanProcessorBuilder builder =
BatchSpanProcessor.builder(exporter).setMeterProvider(() -> meterProvider);
@@ -125,6 +139,8 @@ static BatchSpanProcessor configureBatchSpanProcessor(
builder.setExporterTimeout(timeout);
}
+ builder.setInternalTelemetryVersion(telemetryVersion);
+
return builder.build();
}
diff --git a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java
index e0ddcb438fe..450c98cacad 100644
--- a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java
+++ b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java
@@ -17,6 +17,7 @@
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
import io.opentelemetry.sdk.common.CompletableResultCode;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
import io.opentelemetry.sdk.trace.SpanLimits;
@@ -100,7 +101,7 @@ void configureTracerProvider() {
void configureBatchSpanProcessor_empty() {
try (BatchSpanProcessor processor =
TracerProviderConfiguration.configureBatchSpanProcessor(
- EMPTY, mockSpanExporter, MeterProvider.noop())) {
+ EMPTY, mockSpanExporter, InternalTelemetryVersion.LEGACY, MeterProvider.noop())) {
assertThat(processor)
.extracting("worker")
.satisfies(
@@ -133,6 +134,7 @@ void configureBatchSpanProcessor_configured() {
TracerProviderConfiguration.configureBatchSpanProcessor(
DefaultConfigProperties.createFromMap(properties),
mockSpanExporter,
+ InternalTelemetryVersion.LEGACY,
MeterProvider.noop())) {
assertThat(processor)
.extracting("worker")
diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java
index 69a86641084..cce800d494d 100644
--- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java
+++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSpanExporterTest.java
@@ -20,6 +20,7 @@
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
@@ -149,6 +150,7 @@ void configureSpanProcessors_simpleSpanProcessor() {
DefaultConfigProperties.createFromMap(
Collections.singletonMap("otel.traces.exporter", "console,logging")),
exportersByName,
+ InternalTelemetryVersion.LEGACY,
MeterProvider.noop(),
closeables);
cleanup.addCloseables(closeables);
@@ -171,6 +173,7 @@ void configureSpanProcessors_batchSpanProcessor() {
ImmutableMap.of(
exporterName,
io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.builder().build()),
+ InternalTelemetryVersion.LEGACY,
MeterProvider.noop(),
closeables);
cleanup.addCloseables(closeables);
@@ -192,6 +195,7 @@ void configureSpanProcessors_multipleExporters() {
OtlpGrpcSpanExporter.builder().build(),
"zipkin",
io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.builder().build()),
+ InternalTelemetryVersion.LEGACY,
MeterProvider.noop(),
closeables);
cleanup.addCloseables(closeables);
@@ -235,6 +239,7 @@ void configureSpanProcessors_multipleExportersWithLogging() {
LoggingSpanExporter.create(),
"zipkin",
io.opentelemetry.exporter.zipkin.ZipkinSpanExporter.builder().build()),
+ InternalTelemetryVersion.LEGACY,
MeterProvider.noop(),
closeables);
cleanup.addCloseables(closeables);
diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java
index 5469bd9684d..b1802b4c89c 100644
--- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java
+++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java
@@ -35,6 +35,7 @@
import io.opentelemetry.proto.common.v1.AnyValue;
import io.opentelemetry.proto.common.v1.KeyValue;
import io.opentelemetry.proto.metrics.v1.Metric;
+import io.opentelemetry.proto.metrics.v1.ScopeMetrics;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import java.util.ArrayList;
import java.util.Collection;
@@ -42,6 +43,7 @@
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -220,6 +222,8 @@ void configures() throws Exception {
assertHasKeyValue(span.getAttributesList(), "cat", "meow");
assertHasKeyValue(span.getAttributesList(), "extra-key", "extra-value");
+ // Flush again to get metric exporter metrics.
+ openTelemetrySdk.getSdkMeterProvider().forceFlush().join(10, TimeUnit.SECONDS);
// await on assertions since metrics may come in different order for BatchSpanProcessor,
// exporter, or the ones we created in the test.
await()
@@ -252,19 +256,62 @@ void configures() throws Exception {
})
// This verifies that AutoConfigureListener was invoked and the OTLP
// span / log exporters received the autoconfigured OpenTelemetrySdk
- // instance
+ // instance as well as setting telemetry version.
.anySatisfy(
scopeMetrics -> {
assertThat(scopeMetrics.getScope().getName())
- .isEqualTo("io.opentelemetry.exporters.otlp-grpc");
- assertThat(scopeMetrics.getMetricsList())
- .satisfiesExactlyInAnyOrder(
- metric ->
- assertThat(metric.getName())
- .isEqualTo("otlp.exporter.seen"),
- metric ->
- assertThat(metric.getName())
- .isEqualTo("otlp.exporter.exported"));
+ .isEqualTo(
+ "io.opentelemetry.exporters.otlp_grpc_metric_exporter");
+ assertMetricNames(
+ scopeMetrics,
+ "otel.sdk.exporter.metric_data_point.inflight",
+ "otel.sdk.exporter.operation.duration",
+ "otel.sdk.exporter.metric_data_point.exported");
+ })
+ .anySatisfy(
+ scopeMetrics -> {
+ assertThat(scopeMetrics.getScope().getName())
+ .isEqualTo(
+ "io.opentelemetry.exporters.otlp_grpc_log_exporter");
+ assertMetricNames(
+ scopeMetrics,
+ "otel.sdk.exporter.log.inflight",
+ "otel.sdk.exporter.operation.duration",
+ "otel.sdk.exporter.log.exported");
+ })
+ .anySatisfy(
+ scopeMetrics -> {
+ assertThat(scopeMetrics.getScope().getName())
+ .isEqualTo(
+ "io.opentelemetry.exporters.otlp_grpc_span_exporter");
+ assertMetricNames(
+ scopeMetrics,
+ "otel.sdk.exporter.span.inflight",
+ "otel.sdk.exporter.operation.duration",
+ "otel.sdk.exporter.span.exported");
+ })
+ .anySatisfy(
+ scopeMetrics -> {
+ assertThat(scopeMetrics.getScope().getName())
+ .isEqualTo("io.opentelemetry.sdk.logs");
+ assertMetricNames(
+ scopeMetrics,
+ "otel.sdk.log.created",
+ "otel.sdk.processor.log.processed",
+ "otel.sdk.processor.log.queue.capacity",
+ "otel.sdk.processor.log.queue.size");
+ })
+ .anySatisfy(
+ scopeMetrics -> {
+ assertThat(scopeMetrics.getScope().getName())
+ .isEqualTo("io.opentelemetry.sdk.trace");
+ assertMetricNames(
+ scopeMetrics,
+ "otel.sdk.span.live",
+ "otel.sdk.span.started",
+ "otel.sdk.processor.span.processed",
+ "otel.sdk.processor.span.queue.capacity",
+ "otel.sdk.processor.span.queue.size");
});
});
});
@@ -318,6 +365,12 @@ private static void assertHasKeyValue(List keyValues, String key, Stri
.build());
}
+ private static void assertMetricNames(ScopeMetrics scopeMetrics, String... names) {
+ assertThat(
+ scopeMetrics.getMetricsList().stream().map(Metric::getName).collect(Collectors.toSet()))
+ .containsExactlyInAnyOrder(names);
+ }
+
private static List getFirstDataPointLabels(Metric metric) {
switch (metric.getDataCase()) {
case GAUGE:
diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfigurationTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfigurationTest.java
index 9609f8cb4d3..f76bcad0fe8 100644
--- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfigurationTest.java
+++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/LoggerProviderConfigurationTest.java
@@ -13,6 +13,7 @@
import io.opentelemetry.internal.testing.CleanupExtension;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
+import io.opentelemetry.sdk.common.InternalTelemetryVersion;
import io.opentelemetry.sdk.logs.LogRecordProcessor;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.SdkLoggerProviderBuilder;
@@ -93,6 +94,7 @@ void configureLogRecordProcessors_multipleExportersWithLogging() {
LoggerProviderConfiguration.configureLogRecordProcessors(
DefaultConfigProperties.createFromMap(Collections.emptyMap()),
exportersByName,
+ InternalTelemetryVersion.LEGACY,
MeterProvider.noop(),
closeables);
cleanup.addCloseables(closeables);
@@ -123,6 +125,7 @@ void configureBatchLogRecordProcessor() {
LoggerProviderConfiguration.configureBatchLogRecordProcessor(
DefaultConfigProperties.createFromMap(properties),
SystemOutLogRecordExporter.create(),
+ InternalTelemetryVersion.LEGACY,
MeterProvider.noop())) {
assertThat(processor)
.extracting("worker")
diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/provider/MetricCustomizer.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/provider/MetricCustomizer.java
index c65434cf908..3171f8d91e5 100644
--- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/provider/MetricCustomizer.java
+++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/provider/MetricCustomizer.java
@@ -55,7 +55,11 @@ public CompletableResultCode export(Collection metrics) {
|| metricData
.getInstrumentationScopeInfo()
.getName()
- .startsWith("io.opentelemetry.exporters"))
+ .startsWith("io.opentelemetry.exporters")
+ || metricData
+ .getInstrumentationScopeInfo()
+ .getName()
+ .startsWith("io.opentelemetry.sdk"))
.collect(Collectors.toList());
return delegate.export(filtered);
}