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 ebfaaacf296..eb286b09b94 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
@@ -9,15 +9,19 @@
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_GRPC;
import static io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF;
+import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.exporter.internal.ExporterBuilderUtil;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter;
import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
+import io.opentelemetry.sdk.autoconfigure.spi.internal.AutoConfigureListener;
import io.opentelemetry.sdk.autoconfigure.spi.metrics.ConfigurableMetricExporterProvider;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
+import java.util.concurrent.atomic.AtomicReference;
/**
* {@link MetricExporter} SPI implementation for {@link OtlpGrpcMetricExporter} and {@link
@@ -26,7 +30,11 @@
*
This class is internal and is hence not for public use. Its APIs are unstable and can change
* at any time.
*/
-public class OtlpMetricExporterProvider implements ConfigurableMetricExporterProvider {
+public class OtlpMetricExporterProvider
+ implements ConfigurableMetricExporterProvider, AutoConfigureListener {
+
+ private final AtomicReference meterProviderRef =
+ new AtomicReference<>(MeterProvider.noop());
@Override
public MetricExporter createExporter(ConfigProperties config) {
@@ -51,6 +59,7 @@ public MetricExporter createExporter(ConfigProperties config) {
config, builder::setAggregationTemporalitySelector);
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
config, builder::setDefaultAggregationSelector);
+ builder.setMeterProvider(meterProviderRef::get);
return builder.build();
} else if (protocol.equals(PROTOCOL_GRPC)) {
@@ -72,6 +81,7 @@ public MetricExporter createExporter(ConfigProperties config) {
config, builder::setAggregationTemporalitySelector);
ExporterBuilderUtil.configureOtlpHistogramDefaultAggregation(
config, builder::setDefaultAggregationSelector);
+ builder.setMeterProvider(meterProviderRef::get);
return builder.build();
}
@@ -92,4 +102,9 @@ OtlpHttpMetricExporterBuilder httpBuilder() {
OtlpGrpcMetricExporterBuilder grpcBuilder() {
return OtlpGrpcMetricExporter.builder();
}
+
+ @Override
+ public void afterAutoConfigure(OpenTelemetrySdk sdk) {
+ meterProviderRef.set(sdk.getMeterProvider());
+ }
}
diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableMetricExporterTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableMetricExporterTest.java
index bc32ebc84a4..e46d0bd7718 100644
--- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableMetricExporterTest.java
+++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableMetricExporterTest.java
@@ -10,6 +10,7 @@
import com.google.common.collect.ImmutableMap;
import io.opentelemetry.exporter.logging.LoggingMetricExporter;
+import io.opentelemetry.exporter.otlp.internal.OtlpMetricExporterProvider;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
import io.opentelemetry.internal.testing.CleanupExtension;
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
@@ -52,7 +53,8 @@ void configureExporter_spiExporter() {
assertThat(spiHelper.getListeners())
.satisfiesExactlyInAnyOrder(
listener ->
- assertThat(listener).isInstanceOf(TestConfigurableMetricExporterProvider.class));
+ assertThat(listener).isInstanceOf(TestConfigurableMetricExporterProvider.class),
+ listener -> assertThat(listener).isInstanceOf(OtlpMetricExporterProvider.class));
}
}