From 2d6614d48bfb0199e9411b395e07c4cb2634aa39 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 26 Dec 2025 12:45:53 -0800 Subject: [PATCH 01/16] Migrate InstrumentationModule to declarative config API --- .../DropwizardMetricsInstrumentationModule.java | 3 +-- .../ApplicationLoggingInstrumentationModule.java | 4 +++- .../ClassLoaderInstrumentationModule.java | 3 +-- .../osgi/EclipseOsgiInstrumentationModule.java | 3 +-- .../lambda/LambdaInstrumentationModule.java | 3 +-- .../ReflectionInstrumentationModule.java | 3 +-- .../UrlClassLoaderInstrumentationModule.java | 3 +-- .../jaxrs/v1_0/JaxrsInstrumentationModule.java | 15 ++++++++++++--- .../JaxrsAnnotationsInstrumentationModule.java | 15 ++++++++++++--- .../JaxrsAnnotationsInstrumentationModule.java | 15 ++++++++++++--- .../jaxws/jws/v1_1/JwsInstrumentationModule.java | 15 ++++++++++++--- .../DataSourceInstrumentationModule.java | 3 +-- .../v1_5/MicrometerInstrumentationModule.java | 3 +-- .../v3_2/MyBatisInstrumentationModule.java | 3 +-- .../v3_0/SpringBatchInstrumentationModule.java | 3 +-- .../SpringBootActuatorInstrumentationModule.java | 3 +-- ...ecurityConfigServletInstrumentationModule.java | 15 ++++++++++++--- ...ecurityConfigWebFluxInstrumentationModule.java | 15 ++++++++++++--- .../ws/v2_0/SpringWsInstrumentationModule.java | 15 ++++++++++++--- .../instrumentation/InstrumentationModule.java | 13 ++++++++++++- .../InstrumentationModuleInstaller.java | 13 ++++++++++--- .../DenyUnsafeInstrumentationModule.java | 7 ------- 22 files changed, 120 insertions(+), 55 deletions(-) diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/DropwizardMetricsInstrumentationModule.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/DropwizardMetricsInstrumentationModule.java index fdbd19a42ebe..8724eab94b70 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/DropwizardMetricsInstrumentationModule.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/DropwizardMetricsInstrumentationModule.java @@ -13,7 +13,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -32,7 +31,7 @@ public ElementMatcher.Junction classLoaderMatcher() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // the Dropwizard metrics API does not have a concept of metric labels/tags/attributes, thus the // data produced by this integration might be of very low quality, depending on how the API is // used in the instrumented application diff --git a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java index 4a31c6057de9..1bb70d1f4b2c 100644 --- a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java +++ b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java @@ -8,6 +8,8 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; @@ -22,7 +24,7 @@ public ApplicationLoggingInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // only enable this instrumentation if the application logger is enabled return super.defaultEnabled(config) && "application".equals(EarlyInitAgentConfig.get().getLogging()); diff --git a/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderInstrumentationModule.java b/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderInstrumentationModule.java index ffbda5b61949..bdc22c0ac5bb 100644 --- a/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderInstrumentationModule.java +++ b/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderInstrumentationModule.java @@ -11,7 +11,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -22,7 +21,7 @@ public ClassLoaderInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // internal instrumentations are always enabled by default return true; } diff --git a/instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentationModule.java b/instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentationModule.java index 8def552c2518..2ad4cd966fc6 100644 --- a/instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentationModule.java +++ b/instrumentation/internal/internal-eclipse-osgi-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/osgi/EclipseOsgiInstrumentationModule.java @@ -11,7 +11,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -22,7 +21,7 @@ public EclipseOsgiInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // internal instrumentations are always enabled by default return true; } diff --git a/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/LambdaInstrumentationModule.java b/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/LambdaInstrumentationModule.java index 41a903f8baf0..980916d37c2d 100644 --- a/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/LambdaInstrumentationModule.java +++ b/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/LambdaInstrumentationModule.java @@ -11,7 +11,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.Collections; import java.util.List; @@ -23,7 +22,7 @@ public LambdaInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // internal instrumentations are always enabled by default return true; } diff --git a/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionInstrumentationModule.java b/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionInstrumentationModule.java index b22464b81215..5725dc1e8a48 100644 --- a/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionInstrumentationModule.java +++ b/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionInstrumentationModule.java @@ -13,7 +13,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.ClassInjector; import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.InjectionMode; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -24,7 +23,7 @@ public ReflectionInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // internal instrumentations are always enabled by default return true; } diff --git a/instrumentation/internal/internal-url-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/urlclassloader/UrlClassLoaderInstrumentationModule.java b/instrumentation/internal/internal-url-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/urlclassloader/UrlClassLoaderInstrumentationModule.java index a4cd602e602b..03f92be72deb 100644 --- a/instrumentation/internal/internal-url-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/urlclassloader/UrlClassLoaderInstrumentationModule.java +++ b/instrumentation/internal/internal-url-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/urlclassloader/UrlClassLoaderInstrumentationModule.java @@ -10,7 +10,6 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -20,7 +19,7 @@ public UrlClassLoaderInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // internal instrumentations are always enabled by default return true; } diff --git a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java index 3e43025d9209..cc147e785e61 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java @@ -10,11 +10,12 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -37,11 +38,19 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled(); + return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); + } + + // This method can be removed and super.defaultEnabled() can be used instead once the deprecated + // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point + // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. + private static boolean superDefaultEnabled() { + return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") + .getBoolean("default_enabled", true); } @Override diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java index 91c849d8bea4..64f2d59f31ea 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java @@ -9,11 +9,12 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -40,11 +41,19 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled(); + return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); + } + + // This method can be removed and super.defaultEnabled() can be used instead once the deprecated + // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point + // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. + private static boolean superDefaultEnabled() { + return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") + .getBoolean("default_enabled", true); } @Override diff --git a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java index 388dc34a907f..d8c6f93fe774 100644 --- a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java @@ -9,11 +9,12 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -40,11 +41,19 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled(); + return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); + } + + // This method can be removed and super.defaultEnabled() can be used instead once the deprecated + // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point + // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. + private static boolean superDefaultEnabled() { + return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") + .getBoolean("default_enabled", true); } @Override diff --git a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java index 414ef6fd8295..5fd6591a94f5 100644 --- a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java +++ b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java @@ -6,11 +6,12 @@ package io.opentelemetry.javaagent.instrumentation.jaxws.jws.v1_1; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.Collections; import java.util.List; @@ -28,9 +29,17 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled(); + return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); + } + + // This method can be removed and super.defaultEnabled() can be used instead once the deprecated + // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point + // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. + private static boolean superDefaultEnabled() { + return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") + .getBoolean("default_enabled", true); } @Override diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/datasource/DataSourceInstrumentationModule.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/datasource/DataSourceInstrumentationModule.java index f52a10fe869c..36f012ad2d83 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/datasource/DataSourceInstrumentationModule.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/datasource/DataSourceInstrumentationModule.java @@ -11,7 +11,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -27,7 +26,7 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { return false; } diff --git a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerInstrumentationModule.java b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerInstrumentationModule.java index 138bf7f5b315..e908a26d4018 100644 --- a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerInstrumentationModule.java +++ b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerInstrumentationModule.java @@ -14,7 +14,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.ClassInjector; import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.InjectionMode; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -27,7 +26,7 @@ public MicrometerInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // produces a lot of metrics that are already captured - e.g. JVM memory usage return false; } diff --git a/instrumentation/mybatis-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mybatis/v3_2/MyBatisInstrumentationModule.java b/instrumentation/mybatis-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mybatis/v3_2/MyBatisInstrumentationModule.java index 8915a7d62159..00d89d76ba40 100644 --- a/instrumentation/mybatis-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mybatis/v3_2/MyBatisInstrumentationModule.java +++ b/instrumentation/mybatis-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mybatis/v3_2/MyBatisInstrumentationModule.java @@ -11,7 +11,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -28,7 +27,7 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { return false; } diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationModule.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationModule.java index 3f66214494cd..9956d5c06ba7 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationModule.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationModule.java @@ -20,7 +20,6 @@ import io.opentelemetry.javaagent.instrumentation.spring.batch.v3_0.job.JobFactoryBeanInstrumentation; import io.opentelemetry.javaagent.instrumentation.spring.batch.v3_0.job.JobParserJobFactoryBeanInstrumentation; import io.opentelemetry.javaagent.instrumentation.spring.batch.v3_0.step.StepBuilderHelperInstrumentation; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.Arrays; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -57,7 +56,7 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // TODO: replace this with an experimental flag return false; } diff --git a/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorInstrumentationModule.java b/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorInstrumentationModule.java index 3d47c10e3ba6..3a6d0305c14e 100644 --- a/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorInstrumentationModule.java +++ b/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorInstrumentationModule.java @@ -15,7 +15,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.ClassInjector; import io.opentelemetry.javaagent.extension.instrumentation.internal.injection.InjectionMode; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -65,7 +64,7 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // produces a lot of metrics that are already captured - e.g. JVM memory usage return false; } diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java index dee55a33f4ca..631084e6b0ee 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java @@ -9,11 +9,12 @@ import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -30,8 +31,8 @@ public SpringSecurityConfigServletInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { - return super.defaultEnabled(config) + public boolean defaultEnabled() { + return superDefaultEnabled() /* * Since the only thing this module currently does is capture enduser attributes, * the module can be completely disabled if enduser attributes are disabled. @@ -42,6 +43,14 @@ public boolean defaultEnabled(ConfigProperties config) { && AgentCommonConfig.get().getEnduserConfig().isAnyEnabled(); } + // This method can be removed and super.defaultEnabled() can be used instead once the deprecated + // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point + // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. + private static boolean superDefaultEnabled() { + return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") + .getBoolean("default_enabled", true); + } + @Override public ElementMatcher.Junction classLoaderMatcher() { /* diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java index 43572827b483..396bc8a8befc 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java @@ -8,10 +8,11 @@ import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; /** Instrumentation module for webflux-based applications that use spring-security-config. */ @@ -27,8 +28,8 @@ public SpringSecurityConfigWebFluxInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { - return super.defaultEnabled(config) + public boolean defaultEnabled() { + return superDefaultEnabled() /* * Since the only thing this module currently does is capture enduser attributes, * the module can be completely disabled if enduser attributes are disabled. @@ -39,6 +40,14 @@ public boolean defaultEnabled(ConfigProperties config) { && AgentCommonConfig.get().getEnduserConfig().isAnyEnabled(); } + // This method can be removed and super.defaultEnabled() can be used instead once the deprecated + // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point + // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. + private static boolean superDefaultEnabled() { + return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") + .getBoolean("default_enabled", true); + } + @Override public List typeInstrumentations() { return singletonList(new ServerHttpSecurityInstrumentation()); diff --git a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java index 442e21f119e9..7f651e2f8d10 100644 --- a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java +++ b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java @@ -6,11 +6,12 @@ package io.opentelemetry.javaagent.instrumentation.spring.ws.v2_0; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.Collections; import java.util.List; @@ -27,9 +28,17 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled(); + return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); + } + + // This method can be removed and super.defaultEnabled() can be used instead once the deprecated + // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point + // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. + private static boolean superDefaultEnabled() { + return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") + .getBoolean("default_enabled", true); } @Override diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java index b65f3014c840..fe3b275444b0 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java @@ -89,6 +89,18 @@ public final String instrumentationName() { * Allows instrumentation modules to disable themselves by default, or to additionally disable * themselves on some other condition. */ + public boolean defaultEnabled() { + // TODO implementation in next major release when deleting the deprecated method + throw new UnsupportedOperationException(); + } + + /** + * Allows instrumentation modules to disable themselves by default, or to additionally disable + * themselves on some other condition. + * + * @deprecated Use {@link #defaultEnabled()} instead. + */ + @Deprecated public boolean defaultEnabled(ConfigProperties config) { return config.getBoolean("otel.instrumentation.common.default-enabled", true); } @@ -157,7 +169,6 @@ public List getAdditionalHelperClassNames() { return Collections.emptyList(); } - // InstrumentationModule is loaded before ExperimentalConfig is initialized private static class IndyConfigurationHolder { private static final boolean indyEnabled; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java index f9f0f611b129..26e6fc379ce6 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java @@ -64,13 +64,20 @@ public InstrumentationModuleInstaller(Instrumentation instrumentation) { this.instrumentation = instrumentation; } + // Need to call deprecated API for backward compatibility with modules that haven't migrated + @SuppressWarnings("deprecation") AgentBuilder install( InstrumentationModule instrumentationModule, AgentBuilder parentAgentBuilder, ConfigProperties config) { - if (!isInstrumentationEnabled( - instrumentationModule.instrumentationNames(), - instrumentationModule.defaultEnabled(config))) { + boolean defaultEnabled; + try { + defaultEnabled = instrumentationModule.defaultEnabled(); + } catch (UnsupportedOperationException e) { + // fall back to the deprecated method + defaultEnabled = instrumentationModule.defaultEnabled(config); + } + if (!isInstrumentationEnabled(instrumentationModule.instrumentationNames(), defaultEnabled)) { logger.log( FINE, "Instrumentation {0} is disabled", instrumentationModule.instrumentationName()); return parentAgentBuilder; diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index aedaf9f164f5..7c0939a354f3 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -10,7 +10,6 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; /** @@ -32,10 +31,4 @@ public List typeInstrumentations() { new ServerInstrumentation(), new DefaultStreamMessageInstrumentation()); } - - @Override - public boolean defaultEnabled(ConfigProperties config) { - // using a system property here will enable the instrumentation when declarative config is used - return Boolean.getBoolean("otel.instrumentation.deny-unsafe.enabled"); - } } From 54998a74a0f88bc43b07fb961541fe82e9ff1305 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 8 Jan 2026 07:55:22 +0100 Subject: [PATCH 02/16] use Instrumentation mode --- .../extension/instrumentation/InstrumentationModule.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java index fe3b275444b0..bf0cbd911bf4 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java @@ -102,7 +102,11 @@ public boolean defaultEnabled() { */ @Deprecated public boolean defaultEnabled(ConfigProperties config) { - return config.getBoolean("otel.instrumentation.common.default-enabled", true); + String mode = + DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent") + .getString("instrumentation_mode", "default"); + + return mode.equals("default"); } /** From 553d09be7e651b67c158ad293ffa152b2c0ac788 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 8 Jan 2026 08:16:07 +0100 Subject: [PATCH 03/16] use instrumentation mode --- .../jaxrs/v1_0/JaxrsInstrumentationModule.java | 14 +++----------- .../JaxrsAnnotationsInstrumentationModule.java | 14 +++----------- .../JaxrsAnnotationsInstrumentationModule.java | 14 +++----------- .../jaxws/jws/v1_1/JwsInstrumentationModule.java | 14 +++----------- ...SecurityConfigServletInstrumentationModule.java | 13 ++----------- ...SecurityConfigWebFluxInstrumentationModule.java | 13 ++----------- .../ws/v2_0/SpringWsInstrumentationModule.java | 14 +++----------- 7 files changed, 19 insertions(+), 77 deletions(-) diff --git a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java index cc147e785e61..964f5c36fc39 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java @@ -10,12 +10,11 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -42,15 +41,8 @@ public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); - } - - // This method can be removed and super.defaultEnabled() can be used instead once the deprecated - // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point - // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. - private static boolean superDefaultEnabled() { - return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") - .getBoolean("default_enabled", true); + return AgentConfig.instrumentationMode().equals("default") + && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java index 64f2d59f31ea..8234ba8c9802 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java @@ -9,12 +9,11 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -45,15 +44,8 @@ public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); - } - - // This method can be removed and super.defaultEnabled() can be used instead once the deprecated - // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point - // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. - private static boolean superDefaultEnabled() { - return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") - .getBoolean("default_enabled", true); + return AgentConfig.instrumentationMode().equals("default") + && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java index d8c6f93fe774..a573e3c66f82 100644 --- a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java @@ -9,12 +9,11 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -45,15 +44,8 @@ public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); - } - - // This method can be removed and super.defaultEnabled() can be used instead once the deprecated - // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point - // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. - private static boolean superDefaultEnabled() { - return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") - .getBoolean("default_enabled", true); + return AgentConfig.instrumentationMode().equals("default") + && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java index 5fd6591a94f5..b81667eb74a9 100644 --- a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java +++ b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java @@ -6,12 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.jaxws.jws.v1_1; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.Collections; import java.util.List; @@ -31,15 +30,8 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); - } - - // This method can be removed and super.defaultEnabled() can be used instead once the deprecated - // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point - // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. - private static boolean superDefaultEnabled() { - return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") - .getBoolean("default_enabled", true); + return AgentConfig.instrumentationMode().equals("default") + && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java index 631084e6b0ee..ec398f43a8b3 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java @@ -9,12 +9,11 @@ import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -32,7 +31,7 @@ public SpringSecurityConfigServletInstrumentationModule() { @Override public boolean defaultEnabled() { - return superDefaultEnabled() + return AgentConfig.instrumentationMode().equals("default") /* * Since the only thing this module currently does is capture enduser attributes, * the module can be completely disabled if enduser attributes are disabled. @@ -43,14 +42,6 @@ public boolean defaultEnabled() { && AgentCommonConfig.get().getEnduserConfig().isAnyEnabled(); } - // This method can be removed and super.defaultEnabled() can be used instead once the deprecated - // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point - // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. - private static boolean superDefaultEnabled() { - return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") - .getBoolean("default_enabled", true); - } - @Override public ElementMatcher.Junction classLoaderMatcher() { /* diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java index 396bc8a8befc..179fba6dcdae 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java @@ -8,11 +8,10 @@ import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; /** Instrumentation module for webflux-based applications that use spring-security-config. */ @@ -29,7 +28,7 @@ public SpringSecurityConfigWebFluxInstrumentationModule() { @Override public boolean defaultEnabled() { - return superDefaultEnabled() + return AgentConfig.instrumentationMode().equals("default") /* * Since the only thing this module currently does is capture enduser attributes, * the module can be completely disabled if enduser attributes are disabled. @@ -40,14 +39,6 @@ public boolean defaultEnabled() { && AgentCommonConfig.get().getEnduserConfig().isAnyEnabled(); } - // This method can be removed and super.defaultEnabled() can be used instead once the deprecated - // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point - // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. - private static boolean superDefaultEnabled() { - return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") - .getBoolean("default_enabled", true); - } - @Override public List typeInstrumentations() { return singletonList(new ServerHttpSecurityInstrumentation()); diff --git a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java index 7f651e2f8d10..42ad4fbcb47c 100644 --- a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java +++ b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java @@ -6,12 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.spring.ws.v2_0; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; +import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.Collections; import java.util.List; @@ -30,15 +29,8 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return superDefaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); - } - - // This method can be removed and super.defaultEnabled() can be used instead once the deprecated - // InstrumentationModule.defaultEnabled(ConfigProperties) is removed, at which point - // InstrumentationModule.defaultEnabled() will no longer need to throw an exception. - private static boolean superDefaultEnabled() { - return DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "common") - .getBoolean("default_enabled", true); + return AgentConfig.instrumentationMode().equals("default") + && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override From e030fc33c840c823cba1a3f50880ca305b776838 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 8 Jan 2026 08:24:46 +0100 Subject: [PATCH 04/16] fix deny-unsafe --- .../instrumentation/DenyUnsafeInstrumentationModule.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index 7c0939a354f3..13bd3d44dcc3 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -31,4 +31,10 @@ public List typeInstrumentations() { new ServerInstrumentation(), new DefaultStreamMessageInstrumentation()); } + + @Override + public boolean defaultEnabled() { + // experimental instrumentation, disabled by default + return false; + } } From 61dd50e735b8053d7c9d535e7e6634a7bbb79009 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 8 Jan 2026 09:02:54 +0100 Subject: [PATCH 05/16] fix --- .../instrumentation/DenyUnsafeInstrumentationModule.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index 13bd3d44dcc3..556ad7604b6f 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -10,6 +10,7 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; /** @@ -33,8 +34,10 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled() { - // experimental instrumentation, disabled by default - return false; + public boolean defaultEnabled(ConfigProperties config) { + // using a system property here will enable the instrumentation even when declarative config is + // used + // otherwise, we'd need to patch YAML files to enable this instrumentation + return Boolean.getBoolean("otel.instrumentation.deny-unsafe.enabled"); } } From 8a0b6f610d0feaa1c1690d1141c870f25fa2ab8e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 8 Jan 2026 09:03:23 +0100 Subject: [PATCH 06/16] fix --- .../instrumentation/DenyUnsafeInstrumentationModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index 556ad7604b6f..29a1155f1a16 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -34,7 +34,7 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // using a system property here will enable the instrumentation even when declarative config is // used // otherwise, we'd need to patch YAML files to enable this instrumentation From b2cc3af50898f344ae3e23ff88a7d8f399d48367 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 8 Jan 2026 14:46:39 +0100 Subject: [PATCH 07/16] fix --- .../instrumentation/DenyUnsafeInstrumentationModule.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index 29a1155f1a16..331f7476494f 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -10,7 +10,6 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; /** @@ -35,9 +34,11 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { - // using a system property here will enable the instrumentation even when declarative config is - // used - // otherwise, we'd need to patch YAML files to enable this instrumentation + // We're using a system property here will enable the instrumentation even when declarative + // config is used. + // Otherwise, we'd need to patch YAML files to enable this instrumentation. + // It's still possible to enable/disable it via declarative config, this just controls the + // default. return Boolean.getBoolean("otel.instrumentation.deny-unsafe.enabled"); } } From 9bf897397718e2987da58d2ca9beb21fa050c4c6 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Thu, 8 Jan 2026 15:53:46 +0100 Subject: [PATCH 08/16] pr review --- .../instrumentation/InstrumentationModule.java | 15 +++++++-------- .../InstrumentationModuleInstaller.java | 11 +++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java index bf0cbd911bf4..198c3688bd7c 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java @@ -90,8 +90,11 @@ public final String instrumentationName() { * themselves on some other condition. */ public boolean defaultEnabled() { - // TODO implementation in next major release when deleting the deprecated method - throw new UnsupportedOperationException(); + String mode = + DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent") + .getString("instrumentation_mode", "default"); + + return mode.equals("default"); } /** @@ -100,13 +103,9 @@ public boolean defaultEnabled() { * * @deprecated Use {@link #defaultEnabled()} instead. */ - @Deprecated + @Deprecated // will be removed in 3.0.0 public boolean defaultEnabled(ConfigProperties config) { - String mode = - DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent") - .getString("instrumentation_mode", "default"); - - return mode.equals("default"); + return defaultEnabled(); } /** diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java index 26e6fc379ce6..b9f8fb2164bb 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationModuleInstaller.java @@ -70,14 +70,9 @@ AgentBuilder install( InstrumentationModule instrumentationModule, AgentBuilder parentAgentBuilder, ConfigProperties config) { - boolean defaultEnabled; - try { - defaultEnabled = instrumentationModule.defaultEnabled(); - } catch (UnsupportedOperationException e) { - // fall back to the deprecated method - defaultEnabled = instrumentationModule.defaultEnabled(config); - } - if (!isInstrumentationEnabled(instrumentationModule.instrumentationNames(), defaultEnabled)) { + if (!isInstrumentationEnabled( + instrumentationModule.instrumentationNames(), + instrumentationModule.defaultEnabled(config))) { logger.log( FINE, "Instrumentation {0} is disabled", instrumentationModule.instrumentationName()); return parentAgentBuilder; From 98e022516928a5d6e7d81ec3228eff75b18e8828 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 08:05:49 +0100 Subject: [PATCH 09/16] pr review --- .../jaxrs/v1_0/JaxrsInstrumentationModule.java | 3 +-- .../jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java | 3 +-- .../jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java | 3 +-- .../jaxws/jws/v1_1/JwsInstrumentationModule.java | 3 +-- .../SpringSecurityConfigServletInstrumentationModule.java | 2 +- .../SpringSecurityConfigWebFluxInstrumentationModule.java | 2 +- .../spring/ws/v2_0/SpringWsInstrumentationModule.java | 3 +-- .../extension/instrumentation/InstrumentationModule.java | 5 ++++- 8 files changed, 11 insertions(+), 13 deletions(-) diff --git a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java index 964f5c36fc39..03bf70748935 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java @@ -41,8 +41,7 @@ public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return AgentConfig.instrumentationMode().equals("default") - && ExperimentalConfig.get().controllerTelemetryEnabled(); + return super.defaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java index 8234ba8c9802..eaf22c9794e4 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java @@ -44,8 +44,7 @@ public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return AgentConfig.instrumentationMode().equals("default") - && ExperimentalConfig.get().controllerTelemetryEnabled(); + return super.defaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java index a573e3c66f82..14b4e4ba6894 100644 --- a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java @@ -44,8 +44,7 @@ public boolean defaultEnabled() { // This instrumentation produces controller telemetry and sets http route. Http route is set by // this instrumentation only when it was not already set by a jax-rs framework instrumentation. // This instrumentation uses complex type matcher, disabling it can improve startup performance. - return AgentConfig.instrumentationMode().equals("default") - && ExperimentalConfig.get().controllerTelemetryEnabled(); + return super.defaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java index b81667eb74a9..1cfefdf1d8c9 100644 --- a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java +++ b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java @@ -30,8 +30,7 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return AgentConfig.instrumentationMode().equals("default") - && ExperimentalConfig.get().controllerTelemetryEnabled(); + return super.defaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java index ec398f43a8b3..87dcc6b34d62 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java @@ -31,7 +31,7 @@ public SpringSecurityConfigServletInstrumentationModule() { @Override public boolean defaultEnabled() { - return AgentConfig.instrumentationMode().equals("default") + return super.defaultEnabled() /* * Since the only thing this module currently does is capture enduser attributes, * the module can be completely disabled if enduser attributes are disabled. diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java index 179fba6dcdae..e3ebe864d560 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java @@ -28,7 +28,7 @@ public SpringSecurityConfigWebFluxInstrumentationModule() { @Override public boolean defaultEnabled() { - return AgentConfig.instrumentationMode().equals("default") + return super.defaultEnabled() /* * Since the only thing this module currently does is capture enduser attributes, * the module can be completely disabled if enduser attributes are disabled. diff --git a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java index 42ad4fbcb47c..73861508d814 100644 --- a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java +++ b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java @@ -29,8 +29,7 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return AgentConfig.instrumentationMode().equals("default") - && ExperimentalConfig.get().controllerTelemetryEnabled(); + return super.defaultEnabled() && ExperimentalConfig.get().controllerTelemetryEnabled(); } @Override diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java index 198c3688bd7c..f0aca1b8665f 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/instrumentation/InstrumentationModule.java @@ -12,6 +12,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; import io.opentelemetry.sdk.autoconfigure.spi.Ordered; import java.util.Collections; import java.util.LinkedHashSet; @@ -93,7 +94,9 @@ public boolean defaultEnabled() { String mode = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent") .getString("instrumentation_mode", "default"); - + if (!mode.equals("default") && !mode.equals("none")) { + throw new ConfigurationException("Unknown instrumentation mode: " + mode); + } return mode.equals("default"); } From 4f422d54581c2c3be2b02aa0c3c6647dc3785565 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 08:07:48 +0100 Subject: [PATCH 10/16] pr review --- ....opentelemetry.instrumentation.javaagent-testing.gradle.kts | 2 +- .../instrumentation/DenyUnsafeInstrumentationModule.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts index 3975d810961f..2a2db20ec52d 100644 --- a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts +++ b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts @@ -121,7 +121,7 @@ class JavaagentTestArgumentsProvider( if (denyUnsafe) { list += listOf( "-Dsun.misc.unsafe.memory.access=deny", - "-Dotel.instrumentation.deny-unsafe.enabled=true", + "-Dotel.javaagent.testing.deny-unsafe=true", "-Dio.netty.noUnsafe=true" ) } diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index 331f7476494f..30ec3a0d3d95 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -34,11 +34,12 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { + // This setting is for testing purposes only. // We're using a system property here will enable the instrumentation even when declarative // config is used. // Otherwise, we'd need to patch YAML files to enable this instrumentation. // It's still possible to enable/disable it via declarative config, this just controls the // default. - return Boolean.getBoolean("otel.instrumentation.deny-unsafe.enabled"); + return Boolean.getBoolean("otel.javaagent.testing.deny-unsafe"); } } From 06715594f865e86d3259785dff79cd63678479db Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 08:11:37 +0100 Subject: [PATCH 11/16] pr review --- .../instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java | 1 - .../jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java | 1 - .../jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java | 1 - .../instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java | 1 - .../SpringSecurityConfigServletInstrumentationModule.java | 1 - .../SpringSecurityConfigWebFluxInstrumentationModule.java | 1 - .../spring/ws/v2_0/SpringWsInstrumentationModule.java | 1 - 7 files changed, 7 deletions(-) diff --git a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java index 03bf70748935..eda5ed7f241d 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsInstrumentationModule.java @@ -14,7 +14,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java index eaf22c9794e4..54ccbba4d782 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxrsAnnotationsInstrumentationModule.java @@ -13,7 +13,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; diff --git a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java index 14b4e4ba6894..2d22563825f4 100644 --- a/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java +++ b/instrumentation/jaxrs/jaxrs-3.0/jaxrs-3.0-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v3_0/JaxrsAnnotationsInstrumentationModule.java @@ -13,7 +13,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; diff --git a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java index 1cfefdf1d8c9..0afe1826ae94 100644 --- a/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java +++ b/instrumentation/jaxws/jaxws-jws-api-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/jws/v1_1/JwsInstrumentationModule.java @@ -10,7 +10,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.Collections; import java.util.List; diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java index 87dcc6b34d62..7e1ce7198ccb 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/servlet/SpringSecurityConfigServletInstrumentationModule.java @@ -13,7 +13,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java index e3ebe864d560..03d7d2847122 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/webflux/SpringSecurityConfigWebFluxInstrumentationModule.java @@ -11,7 +11,6 @@ import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.List; /** Instrumentation module for webflux-based applications that use spring-security-config. */ diff --git a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java index 73861508d814..e0d960d8afbd 100644 --- a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java +++ b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsInstrumentationModule.java @@ -10,7 +10,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import java.util.Collections; import java.util.List; From c9ff115359ec059f0996d4fbe08404abd15f707e Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 17:31:54 +0100 Subject: [PATCH 12/16] fix --- .../logging/ApplicationLoggingInstrumentationModule.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java index 1bb70d1f4b2c..047e025cd8fa 100644 --- a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java +++ b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java @@ -26,8 +26,7 @@ public ApplicationLoggingInstrumentationModule() { @Override public boolean defaultEnabled() { // only enable this instrumentation if the application logger is enabled - return super.defaultEnabled(config) - && "application".equals(EarlyInitAgentConfig.get().getLogging()); + return super.defaultEnabled() && "application".equals(EarlyInitAgentConfig.get().getLogging()); } @Override From 72c0021823ebe8576fa911a7d28d22c320d97c22 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 17:33:26 +0100 Subject: [PATCH 13/16] pr review --- .../logging/ApplicationLoggingInstrumentationModule.java | 3 --- .../instrumentation/DenyUnsafeInstrumentationModule.java | 6 ------ 2 files changed, 9 deletions(-) diff --git a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java index 047e025cd8fa..931a90870040 100644 --- a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java +++ b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingInstrumentationModule.java @@ -8,12 +8,9 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index 30ec3a0d3d95..e56857e558bd 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -34,12 +34,6 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { - // This setting is for testing purposes only. - // We're using a system property here will enable the instrumentation even when declarative - // config is used. - // Otherwise, we'd need to patch YAML files to enable this instrumentation. - // It's still possible to enable/disable it via declarative config, this just controls the - // default. return Boolean.getBoolean("otel.javaagent.testing.deny-unsafe"); } } From 12d9156dccfb99d545a3e89b0f521ad36bb71364 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 22:27:44 +0100 Subject: [PATCH 14/16] revert deny-unsafe change --- ...entelemetry.instrumentation.javaagent-testing.gradle.kts | 2 +- .../instrumentation/DenyUnsafeInstrumentationModule.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts index 2a2db20ec52d..3975d810961f 100644 --- a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts +++ b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts @@ -121,7 +121,7 @@ class JavaagentTestArgumentsProvider( if (denyUnsafe) { list += listOf( "-Dsun.misc.unsafe.memory.access=deny", - "-Dotel.javaagent.testing.deny-unsafe=true", + "-Dotel.instrumentation.deny-unsafe.enabled=true", "-Dio.netty.noUnsafe=true" ) } diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index e56857e558bd..aedaf9f164f5 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -10,6 +10,7 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; /** @@ -33,7 +34,8 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled() { - return Boolean.getBoolean("otel.javaagent.testing.deny-unsafe"); + public boolean defaultEnabled(ConfigProperties config) { + // using a system property here will enable the instrumentation when declarative config is used + return Boolean.getBoolean("otel.instrumentation.deny-unsafe.enabled"); } } From 0680c57cdf3ea21c92a20b9779a6e1afffc271bf Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 22:35:12 +0100 Subject: [PATCH 15/16] revert deny-unsafe change --- .../instrumentation/DenyUnsafeInstrumentationModule.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index aedaf9f164f5..99e3a393d099 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -34,7 +34,7 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // using a system property here will enable the instrumentation when declarative config is used return Boolean.getBoolean("otel.instrumentation.deny-unsafe.enabled"); } From e57750386ceab2513f30aef1a4e68509974bf511 Mon Sep 17 00:00:00 2001 From: Gregor Zeitlinger Date: Fri, 9 Jan 2026 22:37:30 +0100 Subject: [PATCH 16/16] fix --- .../testing/instrumentation/DenyUnsafeInstrumentationModule.java | 1 - 1 file changed, 1 deletion(-) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java index 99e3a393d099..cf32a67e0c68 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/instrumentation/DenyUnsafeInstrumentationModule.java @@ -10,7 +10,6 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; /**