From 4d97b4d07d421ef583cf5716ff9ed83a8d076c0a Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 26 Dec 2025 12:45:53 -0800 Subject: [PATCH] Migrate InstrumentationModule to declarative config API --- ...ropwizardMetricsInstrumentationModule.java | 3 +-- ...plicationLoggingInstrumentationModule.java | 19 +++++++++++++++---- .../ClassLoaderInstrumentationModule.java | 3 +-- .../EclipseOsgiInstrumentationModule.java | 3 +-- .../lambda/LambdaInstrumentationModule.java | 3 +-- .../ReflectionInstrumentationModule.java | 3 +-- .../UrlClassLoaderInstrumentationModule.java | 3 +-- .../v1_0/JaxrsInstrumentationModule.java | 15 ++++++++++++--- ...JaxrsAnnotationsInstrumentationModule.java | 15 ++++++++++++--- ...JaxrsAnnotationsInstrumentationModule.java | 15 ++++++++++++--- .../jws/v1_1/JwsInstrumentationModule.java | 15 ++++++++++++--- .../DataSourceInstrumentationModule.java | 3 +-- .../v1_5/MicrometerInstrumentationModule.java | 3 +-- .../v3_2/MyBatisInstrumentationModule.java | 3 +-- .../SpringBatchInstrumentationModule.java | 3 +-- ...ringBootActuatorInstrumentationModule.java | 3 +-- ...ityConfigServletInstrumentationModule.java | 15 ++++++++++++--- ...ityConfigWebFluxInstrumentationModule.java | 15 ++++++++++++--- .../v2_0/SpringWsInstrumentationModule.java | 15 ++++++++++++--- .../InstrumentationModule.java | 19 ++++++++++++++++--- .../InstrumentationModuleInstaller.java | 13 ++++++++++--- .../DenyUnsafeInstrumentationModule.java | 7 ------- 22 files changed, 136 insertions(+), 60 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 b9a728f7d2ed..1c6375bd486f 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,9 +8,10 @@ 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.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -21,10 +22,20 @@ 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(config.getString("otel.javaagent.logging")); + String logging = + DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent") + .getString("logging"); + return superDefaultEnabled() && "application".equals(logging); + } + + // 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/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 74dcde22638e..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 @@ -9,7 +9,8 @@ import static java.util.Collections.unmodifiableSet; import static net.bytebuddy.matcher.ElementMatchers.any; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +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.Ordered; import java.util.Collections; @@ -88,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); } @@ -156,13 +169,13 @@ public List getAdditionalHelperClassNames() { return Collections.emptyList(); } - // InstrumentationModule is loaded before ExperimentalConfig is initialized private static class IndyConfigurationHolder { private static final boolean indyEnabled; static { indyEnabled = - AgentInstrumentationConfig.get().getBoolean("otel.javaagent.experimental.indy", false); + DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "agent") + .getBoolean("indy/development", false); if (indyEnabled) { logger.info("Enabled indy for instrumentation modules"); } 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 14b3b72ced10..dcec135c18b1 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"); - } }