Disable Metrics SDK by default in autoconfigure. (#3555)

Also return the no-op API when there's no exporter.
This commit is contained in:
Anuraag Agrawal 2021-08-27 23:55:34 +09:00 committed by GitHub
parent 076b6b1622
commit 12a8936cb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 10 deletions

View File

@ -13,8 +13,8 @@ testSets {
create("testFullConfig")
create("testInitializeRegistersGlobal")
create("testJaeger")
create("testPrometheus")
create("testOtlp")
create("testPrometheus")
create("testResourceDisabledByProperty")
create("testResourceDisabledByEnv")
create("testZipkin")
@ -89,6 +89,7 @@ tasks {
val testConfigError by existing(Test::class)
val testFullConfig by existing(Test::class) {
environment("OTEL_METRICS_EXPORTER", "otlp")
environment("OTEL_RESOURCE_ATTRIBUTES", "service.name=test,cat=meow")
environment("OTEL_PROPAGATORS", "tracecontext,baggage,b3,b3multi,jaeger,ottrace,xray,test")
environment("OTEL_BSP_SCHEDULE_DELAY", "10")
@ -100,20 +101,19 @@ tasks {
val testInitializeRegistersGlobal by existing(Test::class) {
environment("OTEL_TRACES_EXPORTER", "none")
environment("OTEL_METRICS_EXPORTER", "none")
}
val testJaeger by existing(Test::class) {
environment("OTEL_TRACES_EXPORTER", "jaeger")
environment("OTEL_METRICS_EXPORTER", "none")
environment("OTEL_BSP_SCHEDULE_DELAY", "10")
}
val testOtlp by existing(Test::class)
val testOtlp by existing(Test::class) {
environment("OTEL_METRICS_EXPORTER", "otlp")
}
val testZipkin by existing(Test::class) {
environment("OTEL_TRACES_EXPORTER", "zipkin")
environment("OTEL_METRICS_EXPORTER", "none")
environment("OTEL_BSP_SCHEDULE_DELAY", "10")
}
@ -137,7 +137,7 @@ tasks {
environment("OTEL_METRICS_EXPORTER", "none")
}
val check by existing {
check {
dependsOn(
testConfigError,
testFullConfig,

View File

@ -75,6 +75,18 @@ public final class OpenTelemetrySdkAutoConfiguration {
}
private static void configureMeterProvider(Resource resource, ConfigProperties config) {
String exporterName = config.getString("otel.metrics.exporter");
if (exporterName == null) {
exporterName = "none";
}
if (exporterName.equals("none")) {
// No possiblity of having any metrics exported so no need to have the SDK installed at all.
// NB: If a user wants to add an exporter programatically using SdkMeterProviderConfigurer,
// they will need to use ConfigurableMetricExporter instead.
return;
}
SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder().setResource(resource);
for (SdkMeterProviderConfigurer configurer :
@ -84,10 +96,6 @@ public final class OpenTelemetrySdkAutoConfiguration {
SdkMeterProvider meterProvider = meterProviderBuilder.buildAndRegisterGlobal();
String exporterName = config.getString("otel.metrics.exporter");
if (exporterName == null) {
exporterName = "otlp";
}
MetricExporterConfiguration.configureExporter(exporterName, config, meterProvider);
}

View File

@ -8,6 +8,8 @@ package io.opentelemetry.sdk.autoconfigure;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.internal.NoopMeterProvider;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@ -36,4 +38,10 @@ class OpenTelemetrySdkAutoConfigurationTest {
// ObfuscatedOpenTelemetry
assertThat(GlobalOpenTelemetry.get()).isNotSameAs(sdk);
}
@Test
void noMetricsSdk() {
// OTEL_METRICS_EXPORTER=none so the metrics SDK should be completely disabled.
assertThat(GlobalMeterProvider.get()).isSameAs(NoopMeterProvider.getInstance());
}
}