entry : safeSystemProperties().entrySet()) {
+ config.put(normalizePropertyKey(entry.getKey().toString()), entry.getValue().toString());
+ }
+ return config;
+ }
+
+ /** Resets the cached config for testing purposes. */
+ public static void resetForTest() {
+ config.clear();
+ config.putAll(load());
+ }
+
+ private static boolean supportsDeclarativeConfig() {
+ try {
+ Class.forName("io.opentelemetry.api.incubator.ExtendedOpenTelemetry");
+ return true;
+ } catch (ClassNotFoundException e) {
+ // The incubator module is not available.
+ // This only happens in OpenTelemetry API instrumentation tests, where an older version of
+ // OpenTelemetry API is used that does not have ExtendedOpenTelemetry.
+ // Having the incubator module without ExtendedOpenTelemetry class should still return false
+ // for those tests to avoid a ClassNotFoundException.
+ return false;
+ }
+ }
+
+ /**
+ * Returns the boolean value of the given property name from system properties and environment
+ * variables.
+ *
+ * It's recommended to use {@link #getBoolean(OpenTelemetry, String...)} instead to support
+ * Declarative Config.
+ */
public static boolean getBoolean(String propertyName, boolean defaultValue) {
String strValue = getString(propertyName);
return strValue == null ? defaultValue : Boolean.parseBoolean(strValue);
}
+ /**
+ * Returns the boolean value of the given property name from Declarative Config if available,
+ * otherwise falls back to system properties and environment variables.
+ */
+ public static Optional getBoolean(OpenTelemetry openTelemetry, String... propertyName) {
+ DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyName);
+ if (node != null) {
+ return Optional.ofNullable(node.getBoolean(leaf(propertyName)));
+ }
+ String strValue = getString(toSystemProperty(propertyName));
+ return strValue == null ? Optional.empty() : Optional.of(Boolean.parseBoolean(strValue));
+ }
+
+ /**
+ * Returns the int value of the given property name from system properties and environment
+ * variables.
+ */
public static int getInt(String propertyName, int defaultValue) {
String strValue = getString(propertyName);
if (strValue == null) {
@@ -34,26 +105,47 @@ public static int getInt(String propertyName, int defaultValue) {
}
}
+ /**
+ * Returns the string value of the given property name from system properties and environment
+ * variables.
+ *
+ * It's recommended to use {@link #getString(OpenTelemetry, String...)} instead to support
+ * Declarative Config.
+ */
@Nullable
public static String getString(String propertyName) {
- String value = System.getProperty(propertyName);
- if (value != null) {
- return value;
- }
- return System.getenv(toEnvVarName(propertyName));
+ return config.get(normalizePropertyKey(propertyName));
}
- public static String getString(String propertyName, String defaultValue) {
- String strValue = getString(propertyName);
- return strValue == null ? defaultValue : strValue;
+ /**
+ * Returns the string value of the given property name from Declarative Config if available,
+ * otherwise falls back to system properties and environment variables.
+ */
+ public static Optional getString(OpenTelemetry openTelemetry, String... propertyName) {
+ DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyName);
+ if (node != null) {
+ return Optional.ofNullable(node.getString(leaf(propertyName)));
+ }
+ return Optional.ofNullable(getString(toSystemProperty(propertyName)));
}
- public static List getList(String propertyName, List defaultValue) {
- String value = getString(propertyName);
- if (value == null) {
- return defaultValue;
+ /**
+ * Returns the list of strings value of the given property name from Declarative Config if
+ * available, otherwise falls back to system properties and environment variables.
+ */
+ public static List getList(OpenTelemetry openTelemetry, String... propertyName) {
+ DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyName);
+ if (node != null) {
+ return node.getScalarList(leaf(propertyName), String.class, emptyList());
}
- return filterBlanksAndNulls(value.split(","));
+ return Optional.ofNullable(getString(toSystemProperty(propertyName)))
+ .map(value -> filterBlanksAndNulls(value.split(",")))
+ .orElse(emptyList());
+ }
+
+ /** Returns true if the given OpenTelemetry instance supports Declarative Config. */
+ public static boolean isDeclarativeConfig(OpenTelemetry openTelemetry) {
+ return supportsDeclarativeConfig && openTelemetry instanceof ExtendedOpenTelemetry;
}
private static List filterBlanksAndNulls(String[] values) {
@@ -63,8 +155,67 @@ private static List filterBlanksAndNulls(String[] values) {
.collect(Collectors.toList());
}
- private static String toEnvVarName(String propertyName) {
- return propertyName.toUpperCase(Locale.ROOT).replace('-', '_').replace('.', '_');
+ private static String leaf(String[] propertyName) {
+ return propertyName[propertyName.length - 1];
+ }
+
+ @Nullable
+ private static DeclarativeConfigProperties getDeclarativeConfigNode(
+ OpenTelemetry openTelemetry, String... propertyName) {
+ if (isDeclarativeConfig(openTelemetry)) {
+ ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry;
+ ConfigProvider configProvider = extendedOpenTelemetry.getConfigProvider();
+ return getConfigProperties(configProvider, propertyName);
+ }
+ return null;
+ }
+
+ /** Returns the DeclarativeConfigProperties node for the given property name parts. */
+ public static DeclarativeConfigProperties getConfigProperties(
+ ConfigProvider configProvider, String[] propertyName) {
+ DeclarativeConfigProperties instrumentationConfig = configProvider.getInstrumentationConfig();
+ if (instrumentationConfig == null) {
+ return empty();
+ }
+ DeclarativeConfigProperties node = instrumentationConfig.getStructured("java", empty());
+ // last part is the leaf property
+ for (int i = 0; i < propertyName.length - 1; i++) {
+ node = node.getStructured(propertyName[i], empty());
+ }
+ return node;
+ }
+
+ public static String toSystemProperty(String[] propertyName) {
+ for (int i = 0; i < propertyName.length; i++) {
+ if (propertyName[i].endsWith("/development")) {
+ propertyName[i] =
+ "experimental." + propertyName[i].substring(0, propertyName[i].length() - 12);
+ }
+ }
+ return "otel.instrumentation." + String.join(".", propertyName).replace('_', '-');
+ }
+
+ /**
+ * Normalize an environment variable key by converting to lower case and replacing "_" with ".".
+ */
+ public static String normalizeEnvironmentVariableKey(String key) {
+ return key.toLowerCase(Locale.ROOT).replace("_", ".");
+ }
+
+ /** Normalize a property key by converting to lower case and replacing "-" with ".". */
+ public static String normalizePropertyKey(String key) {
+ return key.toLowerCase(Locale.ROOT).replace("-", ".");
+ }
+
+ /**
+ * Returns a copy of system properties which is safe to iterate over.
+ *
+ * In java 8 and android environments, iterating through system properties may trigger {@link
+ * ConcurrentModificationException}. This method ensures callers can iterate safely without risk
+ * of exception. See https://github.com/open-telemetry/opentelemetry-java/issues/6732 for details.
+ */
+ public static Properties safeSystemProperties() {
+ return (Properties) System.getProperties().clone();
}
private ConfigPropertiesUtil() {}
diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtilTest.java b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtilTest.java
index 8a496322b6e0..54a017e07501 100644
--- a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtilTest.java
+++ b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtilTest.java
@@ -5,14 +5,35 @@
package io.opentelemetry.instrumentation.api.internal;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationBuilder;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalLanguageSpecificInstrumentationModel;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.InstrumentationModel;
+import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Stream;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import org.junitpioneer.jupiter.SetEnvironmentVariable;
import org.junitpioneer.jupiter.SetSystemProperty;
class ConfigPropertiesUtilTest {
+ @BeforeEach
+ void setUp() {
+ ConfigPropertiesUtil.resetForTest();
+ }
+
@SetEnvironmentVariable(key = "TEST_PROPERTY_STRING", value = "env")
@SetSystemProperty(key = "test.property.string", value = "sys")
@Test
@@ -31,6 +52,48 @@ void getString_none() {
assertThat(ConfigPropertiesUtil.getString("test.property.string")).isNull();
}
+ @SetEnvironmentVariable(key = "OTEL_INSTRUMENTATION_TEST_PROPERTY_STRING", value = "env_value")
+ @SetSystemProperty(key = "otel.instrumentation.test.property.string", value = "sys_value")
+ @Test
+ void getString_withOpenTelemetry_systemProperty() {
+ assertString("sys_value");
+ }
+
+ @SetEnvironmentVariable(key = "OTEL_INSTRUMENTATION_TEST_PROPERTY_STRING", value = "env_value")
+ @Test
+ void getString_withOpenTelemetry_environmentVariable() {
+ assertString("env_value");
+ }
+
+ @Test
+ void getString_withOpenTelemetry_none() {
+ assertString("default_value");
+ }
+
+ private static void assertString(String expected) {
+ assertThat(
+ ConfigPropertiesUtil.getString(OpenTelemetry.noop(), "test", "property", "string")
+ .orElse("default_value"))
+ .isEqualTo(expected);
+ }
+
+ public static Stream stringValuesProvider() {
+ return Stream.of(
+ Arguments.of("value1", "value1"),
+ Arguments.of("", ""),
+ Arguments.of(null, "default_value"),
+ Arguments.of(123, "default_value"), // no type coercion in declarative config
+ Arguments.of(true, "default_value")); // no type coercion in declarative config
+ }
+
+ @ParameterizedTest
+ @MethodSource("stringValuesProvider")
+ void getString_declarativeConfig(Object property, String expected) {
+ OpenTelemetry openTelemetry = DeclarativeConfiguration.create(model(property));
+ assertThat(ConfigPropertiesUtil.getString(openTelemetry, "foo", "bar").orElse("default_value"))
+ .isEqualTo(expected);
+ }
+
@SetEnvironmentVariable(key = "TEST_PROPERTY_INT", value = "12")
@SetSystemProperty(key = "test.property.int", value = "42")
@Test
@@ -55,21 +118,111 @@ void getInt_invalidNumber() {
assertThat(ConfigPropertiesUtil.getInt("test.property.int", -1)).isEqualTo(-1);
}
- @SetEnvironmentVariable(key = "TEST_PROPERTY_BOOLEAN", value = "false")
- @SetSystemProperty(key = "test.property.boolean", value = "true")
+ @SetEnvironmentVariable(key = "OTEL_INSTRUMENTATION_TEST_PROPERTY_BOOLEAN", value = "false")
+ @SetSystemProperty(key = "otel.instrumentation.test.property.boolean", value = "true")
@Test
void getBoolean_systemProperty() {
- assertThat(ConfigPropertiesUtil.getBoolean("test.property.boolean", false)).isTrue();
+ assertBoolean(true);
}
- @SetEnvironmentVariable(key = "TEST_PROPERTY_BOOLEAN", value = "true")
+ @SetEnvironmentVariable(key = "OTEL_INSTRUMENTATION_TEST_PROPERTY_BOOLEAN", value = "true")
@Test
void getBoolean_environmentVariable() {
- assertThat(ConfigPropertiesUtil.getBoolean("test.property.boolean", false)).isTrue();
+ assertBoolean(true);
}
@Test
void getBoolean_none() {
- assertThat(ConfigPropertiesUtil.getBoolean("test.property.boolean", false)).isFalse();
+ assertBoolean(false);
+ }
+
+ private static void assertBoolean(boolean expected) {
+ assertThat(ConfigPropertiesUtil.getBoolean("otel.instrumentation.test.property.boolean", false))
+ .isEqualTo(expected);
+ assertThat(
+ ConfigPropertiesUtil.getBoolean(OpenTelemetry.noop(), "test", "property", "boolean")
+ .orElse(false))
+ .isEqualTo(expected);
+ }
+
+ public static Stream booleanValuesProvider() {
+ return Stream.of(
+ Arguments.of(true, true),
+ Arguments.of(false, false),
+ Arguments.of("invalid", false),
+ Arguments.of("true", false), // no type coercion in declarative config
+ Arguments.of(null, false));
+ }
+
+ @ParameterizedTest
+ @MethodSource("booleanValuesProvider")
+ void getBoolean_declarativeConfig(Object property, boolean expected) {
+ assertThat(
+ ConfigPropertiesUtil.getBoolean(
+ DeclarativeConfiguration.create(model(property)), "foo", "bar")
+ .orElse(false))
+ .isEqualTo(expected);
+ }
+
+ private static OpenTelemetryConfigurationModel model(Object value) {
+ return new DeclarativeConfigurationBuilder()
+ .customizeModel(
+ new OpenTelemetryConfigurationModel()
+ .withFileFormat("1.0-rc.1")
+ .withInstrumentationDevelopment(
+ new InstrumentationModel()
+ .withJava(
+ new ExperimentalLanguageSpecificInstrumentationModel()
+ .withAdditionalProperty(
+ "foo", Collections.singletonMap("bar", value)))));
+ }
+
+ @Test
+ void toSystemProperty() {
+ assertThat(ConfigPropertiesUtil.toSystemProperty(new String[] {"a_b", "c", "d"}))
+ .isEqualTo("otel.instrumentation.a-b.c.d");
+ assertThat(ConfigPropertiesUtil.toSystemProperty(new String[] {"a_b/development", "c", "d"}))
+ .isEqualTo("otel.instrumentation.experimental.a-b.c.d");
+ }
+
+ @SetEnvironmentVariable(key = "OTEL_INSTRUMENTATION_TEST_PROPERTY_LIST", value = "a,b,c")
+ @SetSystemProperty(key = "otel.instrumentation.test.property.list", value = "x,y,z")
+ @Test
+ void getList_systemProperty() {
+ assertList(asList("x", "y", "z"));
+ }
+
+ @SetEnvironmentVariable(key = "OTEL_INSTRUMENTATION_TEST_PROPERTY_LIST", value = "a,b,c")
+ @Test
+ void getList_environmentVariable() {
+ assertList(asList("a", "b", "c"));
+ }
+
+ @Test
+ void getList_none() {
+ assertList(emptyList());
+ }
+
+ private static void assertList(List expected) {
+ assertThat(ConfigPropertiesUtil.getList(OpenTelemetry.noop(), "test", "property", "list"))
+ .isEqualTo(expected);
+ }
+
+ public static Stream listValuesProvider() {
+ return Stream.of(
+ Arguments.of(asList("a", "b", "c"), asList("a", "b", "c")),
+ Arguments.of(singletonList("single"), singletonList("single")),
+ Arguments.of(emptyList(), emptyList()),
+ Arguments.of("invalid", emptyList()),
+ Arguments.of(null, emptyList()));
+ }
+
+ @ParameterizedTest
+ @MethodSource("listValuesProvider")
+ void getList_declarativeConfig(Object property, List expected) {
+ assertThat(
+ ConfigPropertiesUtil.getList(
+ DeclarativeConfiguration.create(model(property)), "foo", "bar"))
+ .isEqualTo(expected);
}
}
diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java
index 2d92c041c0be..e319b4bb96fb 100644
--- a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java
+++ b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java
@@ -5,13 +5,12 @@
package io.opentelemetry.instrumentation.awssdk.v1_11.autoconfigure;
-import static java.util.Collections.emptyList;
-
import com.amazonaws.AmazonWebServiceRequest;
import com.amazonaws.Request;
import com.amazonaws.Response;
import com.amazonaws.handlers.RequestHandler2;
import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.awssdk.v1_11.AwsSdkTelemetry;
@@ -20,19 +19,22 @@
*/
public class TracingRequestHandler extends RequestHandler2 {
- private static final RequestHandler2 DELEGATE =
- AwsSdkTelemetry.builder(GlobalOpenTelemetry.get())
- .setCaptureExperimentalSpanAttributes(
- ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.aws-sdk.experimental-span-attributes", false))
- .setMessagingReceiveInstrumentationEnabled(
- ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.messaging.experimental.receive-telemetry.enabled", false))
- .setCapturedHeaders(
- ConfigPropertiesUtil.getList(
- "otel.instrumentation.messaging.experimental.capture-headers", emptyList()))
- .build()
- .newRequestHandler();
+ private static final RequestHandler2 DELEGATE = buildDelegate(GlobalOpenTelemetry.get());
+
+ private static RequestHandler2 buildDelegate(OpenTelemetry openTelemetry) {
+ return AwsSdkTelemetry.builder(openTelemetry)
+ .setCaptureExperimentalSpanAttributes(
+ ConfigPropertiesUtil.getBoolean(openTelemetry, "aws_sdk", "span_attributes/development")
+ .orElse(false))
+ .setMessagingReceiveInstrumentationEnabled(
+ ConfigPropertiesUtil.getBoolean(
+ openTelemetry, "messaging", "receive_telemetry/development", "enabled")
+ .orElse(false))
+ .setCapturedHeaders(
+ ConfigPropertiesUtil.getList(openTelemetry, "messaging", "capture_headers/development"))
+ .build()
+ .newRequestHandler();
+ }
@Override
public void beforeRequest(Request> request) {
diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkSingletons.java b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkSingletons.java
index f84cd5590e99..8061086babaa 100644
--- a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkSingletons.java
+++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v2_2/AwsSdkSingletons.java
@@ -5,6 +5,9 @@
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
+import io.opentelemetry.api.incubator.config.ConfigProvider;
+import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
+import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry;
import io.opentelemetry.instrumentation.awssdk.v2_2.internal.AbstractAwsSdkTelemetryFactory;
import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig;
@@ -32,8 +35,17 @@ protected boolean messagingReceiveInstrumentationEnabled() {
}
@Override
- protected boolean getBoolean(String name, boolean defaultValue) {
- return AgentInstrumentationConfig.get().getBoolean(name, defaultValue);
+ protected boolean getBoolean(boolean defaultValue, String... name) {
+ InstrumentationConfig instrumentationConfig = AgentInstrumentationConfig.get();
+ ConfigProvider configProvider = instrumentationConfig.getConfigProvider();
+ if (configProvider != null) {
+ // don't use to InstrumentationConfig, which would use a bridge back to declarative config
+ return ConfigPropertiesUtil.getConfigProperties(configProvider, name)
+ .getBoolean(name[name.length - 1], defaultValue);
+ }
+
+ return instrumentationConfig.getBoolean(
+ ConfigPropertiesUtil.toSystemProperty(name), defaultValue);
}
}
diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AwsSdkSingletons.java b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AwsSdkSingletons.java
index 089757bea505..f6205858923e 100644
--- a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AwsSdkSingletons.java
+++ b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AwsSdkSingletons.java
@@ -5,8 +5,7 @@
package io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure;
-import static java.util.Collections.emptyList;
-
+import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry;
import io.opentelemetry.instrumentation.awssdk.v2_2.internal.AbstractAwsSdkTelemetryFactory;
@@ -25,18 +24,19 @@ private static class AwsSdkTelemetryFactory extends AbstractAwsSdkTelemetryFacto
@Override
protected List getCapturedHeaders() {
return ConfigPropertiesUtil.getList(
- "otel.instrumentation.messaging.experimental.capture-headers", emptyList());
+ GlobalOpenTelemetry.get(), "messaging", "capture_headers/development");
}
@Override
protected boolean messagingReceiveInstrumentationEnabled() {
return ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.messaging.experimental.receive-telemetry.enabled", false);
+ GlobalOpenTelemetry.get(), "messaging", "receive_telemetry/development", "enabled")
+ .orElse(false);
}
@Override
- protected boolean getBoolean(String name, boolean defaultValue) {
- return ConfigPropertiesUtil.getBoolean(name, defaultValue);
+ protected boolean getBoolean(boolean defaultValue, String... name) {
+ return ConfigPropertiesUtil.getBoolean(GlobalOpenTelemetry.get(), name).orElse(defaultValue);
}
}
diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AbstractAwsSdkTelemetryFactory.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AbstractAwsSdkTelemetryFactory.java
index 574c8e214ef9..33e7280323f3 100644
--- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AbstractAwsSdkTelemetryFactory.java
+++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AbstractAwsSdkTelemetryFactory.java
@@ -17,26 +17,24 @@ public abstract class AbstractAwsSdkTelemetryFactory {
protected abstract List getCapturedHeaders();
private boolean captureExperimentalSpanAttributes() {
- return getBoolean("otel.instrumentation.aws-sdk.experimental-span-attributes", false);
+ return getBoolean(false, "aws_sdk", "span_attributes/development");
}
protected abstract boolean messagingReceiveInstrumentationEnabled();
private boolean useMessagingPropagator() {
- return getBoolean(
- "otel.instrumentation.aws-sdk.experimental-use-propagator-for-messaging", false);
+ return getBoolean(false, "aws_sdk", "use_propagator_for_messaging/development");
}
private boolean recordIndividualHttpError() {
- return getBoolean(
- "otel.instrumentation.aws-sdk.experimental-record-individual-http-error", false);
+ return getBoolean(false, "aws_sdk", "record_individual_http_error/development");
}
private boolean genaiCaptureMessageContent() {
- return getBoolean("otel.instrumentation.genai.capture-message-content", false);
+ return getBoolean(false, "genai", "capture_message_content");
}
- protected abstract boolean getBoolean(String name, boolean defaultValue);
+ protected abstract boolean getBoolean(boolean defaultValue, String... name);
public AwsSdkTelemetry telemetry() {
return AwsSdkTelemetry.builder(GlobalOpenTelemetry.get())
diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java
index 617da2b99f03..6717d9fffe07 100644
--- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java
+++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java
@@ -63,14 +63,18 @@ public final class OpenTelemetryDriver implements Driver {
private static final AtomicBoolean REGISTERED = new AtomicBoolean();
private static final List DRIVER_CANDIDATES = new CopyOnWriteArrayList<>();
- private static final SqlCommenter sqlCommenter =
- SqlCommenter.builder()
- .setEnabled(
- ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.jdbc.experimental.sqlcommenter.enabled",
- ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.common.experimental.db-sqlcommenter.enabled", false)))
- .build();
+ private static SqlCommenter getSqlCommenter(OpenTelemetry openTelemetry) {
+ boolean defaultValue =
+ ConfigPropertiesUtil.getBoolean(
+ openTelemetry, "common", "db_sqlcommenter/development", "enabled")
+ .orElse(false);
+ return SqlCommenter.builder()
+ .setEnabled(
+ ConfigPropertiesUtil.getBoolean(
+ openTelemetry, "jdbc", "sqlcommenter/development", "enabled")
+ .orElse(defaultValue))
+ .build();
+ }
static {
try {
@@ -256,7 +260,7 @@ public Connection connect(String url, Properties info) throws SQLException {
Instrumenter statementInstrumenter =
JdbcInstrumenterFactory.createStatementInstrumenter(openTelemetry);
- boolean captureQueryParameters = JdbcInstrumenterFactory.captureQueryParameters();
+ boolean captureQueryParameters = JdbcInstrumenterFactory.captureQueryParameters(openTelemetry);
Instrumenter transactionInstrumenter =
JdbcInstrumenterFactory.createTransactionInstrumenter(openTelemetry);
@@ -266,7 +270,7 @@ public Connection connect(String url, Properties info) throws SQLException {
statementInstrumenter,
transactionInstrumenter,
captureQueryParameters,
- sqlCommenter);
+ getSqlCommenter(openTelemetry));
}
@Override
diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java
index 9748181d713e..5b2e66e14755 100644
--- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java
+++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java
@@ -28,14 +28,15 @@
public final class JdbcInstrumenterFactory {
public static final String INSTRUMENTATION_NAME = "io.opentelemetry.jdbc";
- public static boolean captureQueryParameters() {
+ public static boolean captureQueryParameters(OpenTelemetry openTelemetry) {
return ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.jdbc.experimental.capture-query-parameters", false);
+ openTelemetry, "jdbc", "capture_query_parameters/development")
+ .orElse(false);
}
public static Instrumenter createStatementInstrumenter(
OpenTelemetry openTelemetry) {
- return createStatementInstrumenter(openTelemetry, captureQueryParameters());
+ return createStatementInstrumenter(openTelemetry, captureQueryParameters(openTelemetry));
}
static Instrumenter createStatementInstrumenter(
@@ -45,7 +46,8 @@ static Instrumenter createStatementInstrumenter(
emptyList(),
true,
ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.common.db-statement-sanitizer.enabled", true),
+ openTelemetry, "common", "db_statement_sanitizer", "enabled")
+ .orElse(true),
captureQueryParameters);
}
@@ -94,8 +96,8 @@ public static Instrumenter createTransactionInstrumenter(
OpenTelemetry openTelemetry) {
return createTransactionInstrumenter(
openTelemetry,
- ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.jdbc.experimental.transaction.enabled", false));
+ ConfigPropertiesUtil.getBoolean(openTelemetry, "jdbc", "transaction/development", "enabled")
+ .orElse(false));
}
public static Instrumenter createTransactionInstrumenter(
diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java
index 96c040074088..82a26cceb06e 100644
--- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java
+++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java
@@ -5,10 +5,9 @@
package io.opentelemetry.instrumentation.kafkaclients.v2_6;
-import static java.util.Collections.emptyList;
-
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.api.internal.Timer;
@@ -32,15 +31,21 @@
@Deprecated
public class TracingConsumerInterceptor implements ConsumerInterceptor {
- private static final KafkaTelemetry telemetry =
- KafkaTelemetry.builder(GlobalOpenTelemetry.get())
- .setMessagingReceiveInstrumentationEnabled(
- ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.messaging.experimental.receive-telemetry.enabled", false))
- .setCapturedHeaders(
- ConfigPropertiesUtil.getList(
- "otel.instrumentation.messaging.experimental.capture-headers", emptyList()))
- .build();
+ private static final KafkaTelemetry telemetry;
+
+ static {
+ OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
+ telemetry =
+ KafkaTelemetry.builder(openTelemetry)
+ .setMessagingReceiveInstrumentationEnabled(
+ ConfigPropertiesUtil.getBoolean(
+ openTelemetry, "messaging", "receive_telemetry/development", "enabled")
+ .orElse(false))
+ .setCapturedHeaders(
+ ConfigPropertiesUtil.getList(
+ openTelemetry, "messaging", "capture_headers/development"))
+ .build();
+ }
private String consumerGroup;
private String clientId;
diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingProducerInterceptor.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingProducerInterceptor.java
index 007e1df51d4b..6d8a6af196f8 100644
--- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingProducerInterceptor.java
+++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingProducerInterceptor.java
@@ -5,10 +5,9 @@
package io.opentelemetry.instrumentation.kafkaclients.v2_6;
-import static java.util.Collections.emptyList;
-
import com.google.errorprone.annotations.CanIgnoreReturnValue;
import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import java.util.Map;
import java.util.Objects;
@@ -28,12 +27,17 @@
@Deprecated
public class TracingProducerInterceptor implements ProducerInterceptor {
- private static final KafkaTelemetry telemetry =
- KafkaTelemetry.builder(GlobalOpenTelemetry.get())
- .setCapturedHeaders(
- ConfigPropertiesUtil.getList(
- "otel.instrumentation.messaging.experimental.capture-headers", emptyList()))
- .build();
+ private static final KafkaTelemetry telemetry;
+
+ static {
+ OpenTelemetry openTelemetry = GlobalOpenTelemetry.get();
+ telemetry =
+ KafkaTelemetry.builder(openTelemetry)
+ .setCapturedHeaders(
+ ConfigPropertiesUtil.getList(
+ openTelemetry, "messaging", "capture_headers/development"))
+ .build();
+ }
@Nullable private String clientId;
diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java
index 57024ded7c3c..050d31337c4c 100644
--- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java
+++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/OpenTelemetryContextDataProvider.java
@@ -5,6 +5,7 @@
package io.opentelemetry.instrumentation.log4j.contextdata.v2_17;
+import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.baggage.Baggage;
import io.opentelemetry.api.baggage.BaggageEntry;
import io.opentelemetry.api.trace.Span;
@@ -25,7 +26,10 @@
*/
public class OpenTelemetryContextDataProvider implements ContextDataProvider {
private static final boolean BAGGAGE_ENABLED =
- ConfigPropertiesUtil.getBoolean("otel.instrumentation.log4j-context-data.add-baggage", false);
+ ConfigPropertiesUtil.getBoolean(
+ GlobalOpenTelemetry.get(), "log4j_context_data", "add_baggage")
+ .orElse(false);
+
private static final boolean configuredResourceAttributeAccessible =
isConfiguredResourceAttributeAccessible();
private static final Map staticContextData = getStaticContextData();
diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/internal/ContextDataKeys.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/internal/ContextDataKeys.java
index a57da53ba61c..ed471c1a155a 100644
--- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/internal/ContextDataKeys.java
+++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.17/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/log4j/contextdata/v2_17/internal/ContextDataKeys.java
@@ -5,6 +5,7 @@
package io.opentelemetry.instrumentation.log4j.contextdata.v2_17.internal;
+import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants;
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
@@ -14,14 +15,16 @@
*/
public final class ContextDataKeys {
public static final String TRACE_ID_KEY =
- ConfigPropertiesUtil.getString(
- "otel.instrumentation.common.logging.trace-id", LoggingContextConstants.TRACE_ID);
+ ConfigPropertiesUtil.getString(GlobalOpenTelemetry.get(), "common", "logging", "trace_id")
+ .orElse(LoggingContextConstants.TRACE_ID);
+
public static final String SPAN_ID_KEY =
- ConfigPropertiesUtil.getString(
- "otel.instrumentation.common.logging.span-id", LoggingContextConstants.SPAN_ID);
+ ConfigPropertiesUtil.getString(GlobalOpenTelemetry.get(), "common", "logging", "span_id")
+ .orElse(LoggingContextConstants.SPAN_ID);
+
public static final String TRACE_FLAGS_KEY =
- ConfigPropertiesUtil.getString(
- "otel.instrumentation.common.logging.trace-flags", LoggingContextConstants.TRACE_FLAGS);
+ ConfigPropertiesUtil.getString(GlobalOpenTelemetry.get(), "common", "logging", "trace_flags")
+ .orElse(LoggingContextConstants.TRACE_FLAGS);
private ContextDataKeys() {}
}
diff --git a/instrumentation/servlet/servlet-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/servlet/ExperimentalSnippetHolder.java b/instrumentation/servlet/servlet-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/servlet/ExperimentalSnippetHolder.java
index ebfc41e7b72b..45e6f21bd782 100644
--- a/instrumentation/servlet/servlet-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/servlet/ExperimentalSnippetHolder.java
+++ b/instrumentation/servlet/servlet-common/bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/servlet/ExperimentalSnippetHolder.java
@@ -5,6 +5,7 @@
package io.opentelemetry.javaagent.bootstrap.servlet;
+import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
public class ExperimentalSnippetHolder {
@@ -12,8 +13,9 @@ public class ExperimentalSnippetHolder {
private static volatile String snippet = getSnippetSetting();
private static String getSnippetSetting() {
- String result = ConfigPropertiesUtil.getString("otel.experimental.javascript-snippet");
- return result == null ? "" : result;
+ return ConfigPropertiesUtil.getString(
+ GlobalOpenTelemetry.get(), "servlet", "javascript-snippet/development")
+ .orElse("");
}
public static void setSnippet(String newValue) {
diff --git a/javaagent-tooling/build.gradle.kts b/javaagent-tooling/build.gradle.kts
index 5434028a60a0..bc69d6a56f34 100644
--- a/javaagent-tooling/build.gradle.kts
+++ b/javaagent-tooling/build.gradle.kts
@@ -105,6 +105,7 @@ testing {
val testConfigFile by registering(JvmTestSuite::class) {
dependencies {
+ implementation(project(":instrumentation-api"))
implementation(project(":javaagent-tooling"))
// requires mockito-inline
implementation("uk.org.webcompere:system-stubs-jupiter")
diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProviderTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProviderTest.java
index 93f040a01314..59a09842e452 100644
--- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProviderTest.java
+++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/SpanLoggingCustomizerProviderTest.java
@@ -7,6 +7,7 @@
import static org.assertj.core.api.Assertions.assertThat;
+import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel;
import java.io.ByteArrayInputStream;
@@ -33,6 +34,7 @@ void addSpanLoggingExporter(String propertyValue, boolean alreadyAdded, boolean
if (propertyValue != null) {
System.setProperty("otel.javaagent.debug", propertyValue);
}
+ ConfigPropertiesUtil.resetForTest();
String yaml =
alreadyAdded
? "file_format: \"1.0-rc.1\"\n"
diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java
index 93c4b7574999..650e2ed259b3 100644
--- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java
+++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigurationPropertiesSupplierTest.java
@@ -10,6 +10,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.GlobalOpenTelemetry;
+import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil;
@@ -33,6 +34,7 @@ class ConfigurationPropertiesSupplierTest {
void setUp() {
GlobalOpenTelemetry.resetForTest();
ConfigurationFile.resetForTest();
+ ConfigPropertiesUtil.resetForTest();
}
// regression for https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/6696
@@ -43,6 +45,7 @@ void fileConfigOverwritesUserPropertiesSupplier(@TempDir Path tempDir) throws IO
Path configFile = tempDir.resolve("test-config.properties");
Files.write(configFile, singleton("custom.key = 42"));
System.setProperty(ConfigurationFile.CONFIGURATION_FILE_PROPERTY, configFile.toString());
+ ConfigPropertiesUtil.resetForTest();
// when
AutoConfiguredOpenTelemetrySdk autoConfiguredSdk =
diff --git a/javaagent-tooling/src/testConfigFile/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFileTest.java b/javaagent-tooling/src/testConfigFile/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFileTest.java
index 52e6d54261fe..20cbb645bb71 100644
--- a/javaagent-tooling/src/testConfigFile/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFileTest.java
+++ b/javaagent-tooling/src/testConfigFile/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFileTest.java
@@ -7,6 +7,7 @@
import static org.assertj.core.api.Assertions.assertThat;
+import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
@@ -36,9 +37,7 @@ void shouldUseEnvVar() throws IOException {
String path = createFile("config", "property1=val-env");
environmentVariables.set("OTEL_JAVAAGENT_CONFIGURATION_FILE", path);
- Map properties = ConfigurationFile.loadConfigFile();
-
- assertThat(properties).containsEntry("property1", "val-env");
+ assertThat(load()).containsEntry("property1", "val-env");
}
@Test
@@ -46,9 +45,7 @@ void shouldUseSystemProperty() throws IOException {
String path = createFile("config", "property1=val-sys");
systemProperties.set("otel.javaagent.configuration-file", path);
- Map properties = ConfigurationFile.loadConfigFile();
-
- assertThat(properties).containsEntry("property1", "val-sys");
+ assertThat(load()).containsEntry("property1", "val-sys");
}
@Test
@@ -58,25 +55,19 @@ void shouldUseSystemPropertyOverEnvVar() throws IOException {
systemProperties.set("otel.javaagent.configuration-file", path);
environmentVariables.set("OTEL_JAVAAGENT_CONFIGURATION_FILE", pathEnv);
- Map properties = ConfigurationFile.loadConfigFile();
-
- assertThat(properties).containsEntry("property1", "val-sys");
+ assertThat(load()).containsEntry("property1", "val-sys");
}
@Test
void shouldReturnEmptyPropertiesIfFileDoesNotExist() {
systemProperties.set("otel.javaagent.configuration-file", "somePath");
- Map properties = ConfigurationFile.loadConfigFile();
-
- assertThat(properties).isEmpty();
+ assertThat(load()).isEmpty();
}
@Test
void shouldReturnEmptyPropertiesIfPropertyIsNotSet() {
- Map properties = ConfigurationFile.loadConfigFile();
-
- assertThat(properties).isEmpty();
+ assertThat(load()).isEmpty();
}
private String createFile(String name, String contents) throws IOException {
@@ -87,4 +78,9 @@ private String createFile(String name, String contents) throws IOException {
}
return file.getAbsolutePath();
}
+
+ private static Map load() {
+ ConfigPropertiesUtil.resetForTest();
+ return ConfigurationFile.loadConfigFile();
+ }
}
diff --git a/smoke-tests/src/main/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java
index 985c4381138a..8342151bb4c5 100644
--- a/smoke-tests/src/main/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java
+++ b/smoke-tests/src/main/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java
@@ -45,7 +45,9 @@ protected Map getAgentEnvironment(
environment.put("OTEL_RESOURCE_ATTRIBUTES", "service.name=smoke-test");
}
environment.put("OTEL_JAVAAGENT_DEBUG", "true");
- environment.put("OTEL_EXPERIMENTAL_JAVASCRIPT_SNIPPET", "");
+ environment.put(
+ "OTEL_INSTRUMENTATION_SERVLET_EXPERIMENTAL_JAVASCRIPT_SNIPPET",
+ "");
environment.put("OTEL_INSTRUMENTATION_RUNTIME_TELEMETRY_PACKAGE_EMITTER_ENABLED", "true");
return environment;
}