Disable Metrics SDK by default in autoconfigure. (#3555)
Also return the no-op API when there's no exporter.
This commit is contained in:
parent
076b6b1622
commit
12a8936cb5
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue