Add support for new system property otel.sdk.disabled (#4810)
* Add support for new system property otel.sdk.disabled * address review comments
This commit is contained in:
parent
093b21085b
commit
c37dada000
|
|
@ -2,6 +2,11 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
* Autoconfigure now supports an option to disable the SDK.
|
||||
If `otel.sdk.disabled=true`, `AutoConfiguredOpenTelemetrySdk#getOpenTelemetrySdk()`
|
||||
returns a minimal (but not noop) `OpenTelemetrySdk` with noop tracing, metric and logging providers. The same minimal instance is set
|
||||
to `GlobalOpenTelemetry`. The now deprecated property `otel.experimental.sdk.enabled` will continue to work in the same way during a transition period.
|
||||
|
||||
## Version 1.18.0 (2022-09-09)
|
||||
|
||||
### SDK
|
||||
|
|
|
|||
|
|
@ -39,9 +39,9 @@ for more details.
|
|||
|
||||
The OpenTelemetry SDK can be disabled entirely. If disabled, `AutoConfiguredOpenTelemetrySdk#getOpenTelemetrySdk()` will return a minimally configured instance (i.e. `OpenTelemetrySdk.builder().build()`).
|
||||
|
||||
| System property | Environment variable | Purpose |
|
||||
|-------------------------------|-------------------------------|----------------------------------------------------------------|
|
||||
| otel.experimental.sdk.enabled | OTEL_EXPERIMENTAL_SDK_ENABLED | If `false`, disable the OpenTelemetry SDK. Defaults to `true`. |
|
||||
| System property | Environment variable | Purpose |
|
||||
|-------------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| otel.sdk.disabled | OTEL_SDK_DISABLED | If `true`, disable the OpenTelemetry SDK. Defaults to `false`. The now legacy property `otel.experimental.sdk.enabled` will continue to work with default `true` during a transition period. |
|
||||
|
||||
## Exporters
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.ServiceLoader;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.BiFunction;
|
||||
|
|
@ -333,7 +332,9 @@ public final class AutoConfiguredOpenTelemetrySdkBuilder implements AutoConfigur
|
|||
|
||||
OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder().build();
|
||||
boolean sdkEnabled =
|
||||
Optional.ofNullable(config.getBoolean("otel.experimental.sdk.enabled")).orElse(true);
|
||||
!config.getBoolean(
|
||||
"otel.sdk.disabled", !config.getBoolean("otel.experimental.sdk.enabled", true));
|
||||
|
||||
if (sdkEnabled) {
|
||||
SdkMeterProviderBuilder meterProviderBuilder = SdkMeterProvider.builder();
|
||||
meterProviderBuilder.setResource(resource);
|
||||
|
|
|
|||
|
|
@ -77,6 +77,52 @@ class AutoConfiguredOpenTelemetrySdkTest {
|
|||
|
||||
private AutoConfiguredOpenTelemetrySdkBuilder builder;
|
||||
|
||||
private static BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
getTracerProviderBuilderSpy() {
|
||||
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
traceCustomizer =
|
||||
spy(
|
||||
new BiFunction<
|
||||
SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>() {
|
||||
@Override
|
||||
public SdkTracerProviderBuilder apply(
|
||||
SdkTracerProviderBuilder builder, ConfigProperties config) {
|
||||
return builder;
|
||||
}
|
||||
});
|
||||
return traceCustomizer;
|
||||
}
|
||||
|
||||
private static BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
|
||||
getMeterProviderBuilderSpy() {
|
||||
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
|
||||
metricCustomizer =
|
||||
spy(
|
||||
new BiFunction<
|
||||
SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>() {
|
||||
@Override
|
||||
public SdkMeterProviderBuilder apply(
|
||||
SdkMeterProviderBuilder builder, ConfigProperties config) {
|
||||
return builder;
|
||||
}
|
||||
});
|
||||
return metricCustomizer;
|
||||
}
|
||||
|
||||
private static BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder>
|
||||
getLoggerProviderBuilderSpy() {
|
||||
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
|
||||
spy(
|
||||
new BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder>() {
|
||||
@Override
|
||||
public SdkLoggerProviderBuilder apply(
|
||||
SdkLoggerProviderBuilder builder, ConfigProperties config) {
|
||||
return builder;
|
||||
}
|
||||
});
|
||||
return logCustomizer;
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void resetGlobal() {
|
||||
GlobalOpenTelemetry.resetForTest();
|
||||
|
|
@ -313,38 +359,13 @@ class AutoConfiguredOpenTelemetrySdkTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
void disableSdk() {
|
||||
void disableSdkLegacyProperty() {
|
||||
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
traceCustomizer =
|
||||
spy(
|
||||
new BiFunction<
|
||||
SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>() {
|
||||
@Override
|
||||
public SdkTracerProviderBuilder apply(
|
||||
SdkTracerProviderBuilder builder, ConfigProperties config) {
|
||||
return builder;
|
||||
}
|
||||
});
|
||||
traceCustomizer = getTracerProviderBuilderSpy();
|
||||
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
|
||||
metricCustomizer =
|
||||
spy(
|
||||
new BiFunction<
|
||||
SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>() {
|
||||
@Override
|
||||
public SdkMeterProviderBuilder apply(
|
||||
SdkMeterProviderBuilder builder, ConfigProperties config) {
|
||||
return builder;
|
||||
}
|
||||
});
|
||||
metricCustomizer = getMeterProviderBuilderSpy();
|
||||
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
|
||||
spy(
|
||||
new BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder>() {
|
||||
@Override
|
||||
public SdkLoggerProviderBuilder apply(
|
||||
SdkLoggerProviderBuilder builder, ConfigProperties config) {
|
||||
return builder;
|
||||
}
|
||||
});
|
||||
getLoggerProviderBuilderSpy();
|
||||
|
||||
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
|
||||
AutoConfiguredOpenTelemetrySdk.builder()
|
||||
|
|
@ -362,6 +383,57 @@ class AutoConfiguredOpenTelemetrySdkTest {
|
|||
verify(logCustomizer, never()).apply(any(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void disableSdk() {
|
||||
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
traceCustomizer = getTracerProviderBuilderSpy();
|
||||
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
|
||||
metricCustomizer = getMeterProviderBuilderSpy();
|
||||
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
|
||||
getLoggerProviderBuilderSpy();
|
||||
|
||||
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
|
||||
AutoConfiguredOpenTelemetrySdk.builder()
|
||||
.addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "true"))
|
||||
.addTracerProviderCustomizer(traceCustomizer)
|
||||
.addMeterProviderCustomizer(metricCustomizer)
|
||||
.addLoggerProviderCustomizer(logCustomizer)
|
||||
.build();
|
||||
|
||||
assertThat(autoConfiguredSdk.getOpenTelemetrySdk()).isInstanceOf(OpenTelemetrySdk.class);
|
||||
|
||||
// When the SDK is disabled, configuration is skipped and none of the customizers are called
|
||||
verify(traceCustomizer, never()).apply(any(), any());
|
||||
verify(metricCustomizer, never()).apply(any(), any());
|
||||
verify(logCustomizer, never()).apply(any(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void disableSdkNewPropertyWins() {
|
||||
BiFunction<SdkTracerProviderBuilder, ConfigProperties, SdkTracerProviderBuilder>
|
||||
traceCustomizer = getTracerProviderBuilderSpy();
|
||||
BiFunction<SdkMeterProviderBuilder, ConfigProperties, SdkMeterProviderBuilder>
|
||||
metricCustomizer = getMeterProviderBuilderSpy();
|
||||
BiFunction<SdkLoggerProviderBuilder, ConfigProperties, SdkLoggerProviderBuilder> logCustomizer =
|
||||
getLoggerProviderBuilderSpy();
|
||||
|
||||
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
|
||||
AutoConfiguredOpenTelemetrySdk.builder()
|
||||
.addPropertiesSupplier(() -> singletonMap("otel.sdk.disabled", "true"))
|
||||
.addPropertiesSupplier(() -> singletonMap("otel.experimental.sdk.enabled", "true"))
|
||||
.addTracerProviderCustomizer(traceCustomizer)
|
||||
.addMeterProviderCustomizer(metricCustomizer)
|
||||
.addLoggerProviderCustomizer(logCustomizer)
|
||||
.build();
|
||||
|
||||
assertThat(autoConfiguredSdk.getOpenTelemetrySdk()).isInstanceOf(OpenTelemetrySdk.class);
|
||||
|
||||
// When the SDK is disabled, configuration is skipped and none of the customizers are called
|
||||
verify(traceCustomizer, never()).apply(any(), any());
|
||||
verify(metricCustomizer, never()).apply(any(), any());
|
||||
verify(logCustomizer, never()).apply(any(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
void tracerProviderCustomizer() {
|
||||
InMemorySpanExporter spanExporter = InMemorySpanExporter.create();
|
||||
|
|
|
|||
Loading…
Reference in New Issue