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

View File

@ -75,6 +75,18 @@ public final class OpenTelemetrySdkAutoConfiguration {
} }
private static void configureMeterProvider(Resource resource, ConfigProperties config) { 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); SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder().setResource(resource);
for (SdkMeterProviderConfigurer configurer : for (SdkMeterProviderConfigurer configurer :
@ -84,10 +96,6 @@ public final class OpenTelemetrySdkAutoConfiguration {
SdkMeterProvider meterProvider = meterProviderBuilder.buildAndRegisterGlobal(); SdkMeterProvider meterProvider = meterProviderBuilder.buildAndRegisterGlobal();
String exporterName = config.getString("otel.metrics.exporter");
if (exporterName == null) {
exporterName = "otlp";
}
MetricExporterConfiguration.configureExporter(exporterName, config, meterProvider); 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 static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.internal.NoopMeterProvider;
import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.OpenTelemetrySdk;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -36,4 +38,10 @@ class OpenTelemetrySdkAutoConfigurationTest {
// ObfuscatedOpenTelemetry // ObfuscatedOpenTelemetry
assertThat(GlobalOpenTelemetry.get()).isNotSameAs(sdk); 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());
}
} }