From 1c8e98b5540d8b1cd226996534271d257db42884 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 14:07:08 -0800 Subject: [PATCH 01/73] Use declarative configuration API --- .../internal/DeclarativeConfigUtil.java | 83 ++++ .../SpringBatchInstrumentationConfig.java | 13 +- .../ExtendedOpenTelemetrySdkWrapper.java | 64 ++++ .../tooling/OpenTelemetryInstaller.java | 28 +- .../ConfigPropertiesBackedConfigProvider.java | 49 +++ ...tiesBackedDeclarativeConfigProperties.java | 361 ++++++++++++++++++ 6 files changed, 589 insertions(+), 9 deletions(-) create mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java create mode 100644 javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java create mode 100644 javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedConfigProvider.java create mode 100644 javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedDeclarativeConfigProperties.java diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java new file mode 100644 index 000000000000..a17151282fcf --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -0,0 +1,83 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.config.internal; + +import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; +import static java.util.Collections.emptyList; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * This class is internal and is hence not for public use. Its APIs are unstable and can change at + * any time. + */ +public final class DeclarativeConfigUtil { + + public static Optional getBoolean(OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + return Optional.ofNullable(node != null ? node.getBoolean(leaf(propertyPath)) : null); + } + + public static Optional getString(OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + return Optional.ofNullable(node != null ? node.getString(leaf(propertyPath)) : null); + } + + public static Optional getInt(OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + return Optional.ofNullable(node != null ? node.getInt(leaf(propertyPath)) : null); + } + + public static List getList(OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + if (node != null) { + List list = node.getScalarList(leaf(propertyPath), String.class); + return list != null ? list : emptyList(); + } + return emptyList(); + } + + @Nullable + private static DeclarativeConfigProperties getDeclarativeConfigNode( + OpenTelemetry openTelemetry, String... propertyPath) { + + if (!(openTelemetry instanceof ExtendedOpenTelemetry)) { + return null; + } + ExtendedOpenTelemetry extendedOpenTelemetry = (ExtendedOpenTelemetry) openTelemetry; + ConfigProvider configProvider = extendedOpenTelemetry.getConfigProvider(); + if (configProvider == null) { + return null; + } + return getConfigNode(configProvider, propertyPath); + } + + private static DeclarativeConfigProperties getConfigNode( + ConfigProvider configProvider, String... propertyPath) { + + DeclarativeConfigProperties instrumentationConfig = configProvider.getInstrumentationConfig(); + if (instrumentationConfig == null) { + return empty(); + } + DeclarativeConfigProperties node = instrumentationConfig.getStructured("java", empty()); + for (int i = 0; i < propertyPath.length - 1; i++) { + node = node.getStructured(propertyPath[i], empty()); + } + return node; + } + + private static String leaf(String[] propertyPath) { + return propertyPath[propertyPath.length - 1]; + } + + private DeclarativeConfigUtil() {} +} diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java index 5dac88c313fa..834ef755a25b 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java @@ -5,7 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.spring.batch.v3_0; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; public final class SpringBatchInstrumentationConfig { @@ -13,11 +14,13 @@ public final class SpringBatchInstrumentationConfig { // the item level instrumentation is very chatty so it's disabled by default private static final boolean ITEM_TRACING_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.spring-batch.item.enabled", false); + DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "spring_batch", "item", "enabled") + .orElse(false); + private static final boolean CREATE_ROOT_SPAN_FOR_CHUNK = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.spring-batch.experimental.chunk.new-trace", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "spring_batch", "chunk/development", "new_trace") + .orElse(false); public static String instrumentationName() { return INSTRUMENTATION_NAME; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java new file mode 100644 index 000000000000..fbc4e22fd3db --- /dev/null +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java @@ -0,0 +1,64 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.tooling; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.logs.LoggerProvider; +import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.api.trace.TracerProvider; +import io.opentelemetry.context.propagation.ContextPropagators; + +/** + * Wrapper around {@link OpenTelemetry} that implements {@link ExtendedOpenTelemetry} and provides a + * {@link ConfigProvider} even when the underlying SDK doesn't have one. + * + *

This is used when the user configured with system properties (not YAML), so we create a + * ConfigProvider backed by the final ConfigProperties. This allows instrumentations to always use + * {@code ExtendedOpenTelemetry.getConfigProvider()} regardless of how the SDK was configured. + */ +public final class ExtendedOpenTelemetrySdkWrapper implements ExtendedOpenTelemetry { + + private final OpenTelemetry delegate; + private final ConfigProvider configProvider; + + /** + * Creates a new wrapper. + * + * @param delegate the OpenTelemetry instance to wrap + * @param configProvider the ConfigProvider to return from getConfigProvider() + */ + public ExtendedOpenTelemetrySdkWrapper(OpenTelemetry delegate, ConfigProvider configProvider) { + this.delegate = delegate; + this.configProvider = configProvider; + } + + @Override + public ConfigProvider getConfigProvider() { + return configProvider; + } + + @Override + public TracerProvider getTracerProvider() { + return delegate.getTracerProvider(); + } + + @Override + public MeterProvider getMeterProvider() { + return delegate.getMeterProvider(); + } + + @Override + public LoggerProvider getLogsBridge() { + return delegate.getLogsBridge(); + } + + @Override + public ContextPropagators getPropagators() { + return delegate.getPropagators(); + } +} diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index ff7147ef44bb..0b2153f096de 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -7,10 +7,12 @@ import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.config.bridge.DeclarativeConfigPropertiesBridgeBuilder; import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess; +import io.opentelemetry.javaagent.tooling.config.ConfigPropertiesBackedConfigProvider; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; @@ -34,17 +36,20 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = AutoConfiguredOpenTelemetrySdk.builder() - .setResultAsGlobal() + // Don't use setResultAsGlobal() - we need to wrap the SDK before setting as global .setServiceClassLoader(extensionClassLoader) .build(); ConfigProvider configProvider = AutoConfigureUtil.getConfigProvider(autoConfiguredSdk); OpenTelemetrySdk sdk = autoConfiguredSdk.getOpenTelemetrySdk(); + ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredSdk); setForceFlush(sdk); if (configProvider != null) { - // We create a new instance of AutoConfiguredOpenTelemetrySdk, which has a ConfigProperties - // instance that can be used to read properties from the configuration file. + // YAML was used - the SDK already implements ExtendedOpenTelemetry with ConfigProvider + GlobalOpenTelemetry.set(sdk); + // We create a new instance of AutoConfiguredOpenTelemetrySdk, + // which has a ConfigProperties instance bridged from the declarative config. // This allows most instrumentations to be unaware of which configuration style is used. return SdkAutoconfigureAccess.create( sdk, @@ -53,7 +58,22 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( configProvider); } - return autoConfiguredSdk; + // System properties/env vars were used - create a ConfigProvider backed by ConfigProperties. + // This ensures GlobalOpenTelemetry.get() returns an ExtendedOpenTelemetry with + // a working getConfigProvider(), allowing instrumentations to use a single API. + ConfigProvider generatedConfigProvider = + ConfigPropertiesBackedConfigProvider.create(configProperties); + + // Wrap the SDK so it implements ExtendedOpenTelemetry with our generated ConfigProvider + ExtendedOpenTelemetrySdkWrapper wrappedSdk = + new ExtendedOpenTelemetrySdkWrapper(sdk, generatedConfigProvider); + GlobalOpenTelemetry.set(wrappedSdk); + + return SdkAutoconfigureAccess.create( + sdk, + SdkAutoconfigureAccess.getResource(autoConfiguredSdk), + configProperties, + generatedConfigProvider); } // Visible for testing diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedConfigProvider.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedConfigProvider.java new file mode 100644 index 000000000000..7aaccbf8b32b --- /dev/null +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedConfigProvider.java @@ -0,0 +1,49 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.tooling.config; + +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import javax.annotation.Nullable; + +/** + * A {@link ConfigProvider} implementation backed by {@link ConfigProperties}. + * + *

This is used when the user configured the agent with system properties (not YAML), so we + * create a ConfigProvider that provides access to the configuration through the declarative config + * API. + * + *

This allows instrumentations to always use {@code ExtendedOpenTelemetry.getConfigProvider()} + * regardless of whether the user started with system properties or YAML. + */ +public final class ConfigPropertiesBackedConfigProvider implements ConfigProvider { + + private final DeclarativeConfigProperties instrumentationConfig; + + /** + * Creates a ConfigProvider backed by the given ConfigProperties. + * + * @param configProperties the ConfigProperties from SDK autoconfiguration + * @return a new ConfigProvider instance + */ + public static ConfigProvider create(ConfigProperties configProperties) { + return new ConfigPropertiesBackedConfigProvider(configProperties); + } + + private ConfigPropertiesBackedConfigProvider(ConfigProperties configProperties) { + // The instrumentation config is rooted at "otel.instrumentation." + this.instrumentationConfig = + ConfigPropertiesBackedDeclarativeConfigProperties.createInstrumentationConfig( + configProperties); + } + + @Nullable + @Override + public DeclarativeConfigProperties getInstrumentationConfig() { + return instrumentationConfig; + } +} diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedDeclarativeConfigProperties.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedDeclarativeConfigProperties.java new file mode 100644 index 000000000000..0101f0543f1a --- /dev/null +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -0,0 +1,361 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.tooling.config; + +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.common.ComponentLoader; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.Nullable; + +/** + * Implementation of {@link DeclarativeConfigProperties} backed by {@link ConfigProperties}. + * + *

This allows instrumentations to use the declarative config API even when the user configured + * the agent with system properties (not YAML). It uses a dynamic bridge approach that tracks the + * navigation path and only resolves to system properties at the leaf node when a value is actually + * requested. + */ +final class ConfigPropertiesBackedDeclarativeConfigProperties + implements DeclarativeConfigProperties { + + private final ConfigProperties configProperties; + private final List path; + + /** + * Structured list mapping definition. Maps a declarative config path to a system property key and + * defines how to convert each map entry to DeclarativeConfigProperties field names. + */ + private static final class StructuredListMapping { + final String systemPropertyKey; + final String keyFieldName; + final String valueFieldName; + + StructuredListMapping(String systemPropertyKey, String keyFieldName, String valueFieldName) { + this.systemPropertyKey = systemPropertyKey; + this.keyFieldName = keyFieldName; + this.valueFieldName = valueFieldName; + } + } + + // Mapping from declarative config paths to system property keys + // Path format: "segment1.segment2.propertyName" (excludes "java" segment) + private static final Map PROPERTY_MAPPINGS; + private static final Map LIST_MAPPINGS; + private static final Map STRUCTURED_LIST_MAPPINGS; + + static { + PROPERTY_MAPPINGS = new HashMap<>(); + // Add mappings as needed, e.g.: + // PROPERTY_MAPPINGS.put("common.enabled", "otel.instrumentation.common.default-enabled"); + + LIST_MAPPINGS = new HashMap<>(); + LIST_MAPPINGS.put( + "general.http.client.request_captured_headers", + "otel.instrumentation.http.client.capture-request-headers"); + LIST_MAPPINGS.put( + "general.http.client.response_captured_headers", + "otel.instrumentation.http.client.capture-response-headers"); + LIST_MAPPINGS.put( + "general.http.server.request_captured_headers", + "otel.instrumentation.http.server.capture-request-headers"); + LIST_MAPPINGS.put( + "general.http.server.response_captured_headers", + "otel.instrumentation.http.server.capture-response-headers"); + + STRUCTURED_LIST_MAPPINGS = new HashMap<>(); + STRUCTURED_LIST_MAPPINGS.put( + "general.peer.service_mapping", + new StructuredListMapping( + "otel.instrumentation.common.peer-service-mapping", "peer", "service")); + } + + /** + * Creates a root DeclarativeConfigProperties instance backed by ConfigProperties. + * + * @param configProperties the ConfigProperties to read from + * @return a new DeclarativeConfigProperties instance + */ + static DeclarativeConfigProperties createInstrumentationConfig( + ConfigProperties configProperties) { + return new ConfigPropertiesBackedDeclarativeConfigProperties( + configProperties, Collections.emptyList()); + } + + private ConfigPropertiesBackedDeclarativeConfigProperties( + ConfigProperties configProperties, List path) { + this.configProperties = configProperties; + this.path = path; + } + + private String currentPath() { + return String.join(".", path); + } + + private String pathWithName(String name) { + if (path.isEmpty()) { + return name; + } + return currentPath() + "." + name; + } + + /** + * Converts a declarative config path to a system property key. + * + *

The declarative config path (e.g., "common.enabled") is converted to a system property key + * (e.g., "otel.instrumentation.common.enabled") by: + * + *

    + *
  1. Checking explicit mappings first + *
  2. Falling back to standard conversion: prefix + kebab-case path + *
+ */ + private static String toPropertyKey(String fullPath) { + // Check explicit mappings first + String mapped = PROPERTY_MAPPINGS.get(fullPath); + if (mapped != null) { + return mapped; + } + // Standard conversion: otel.instrumentation. + kebab-case path + return "otel.instrumentation." + translatePath(fullPath); + } + + /** + * Translates a declarative config path to a system property path segment. + * + *

Handles: + * + *

    + *
  • Removing "java" segment (not present in system properties) + *
  • Converting snake_case to kebab-case + *
  • Converting "/development" suffix to "experimental-" prefix + *
+ */ + private static String translatePath(String path) { + StringBuilder result = new StringBuilder(); + String[] segments = path.split("\\."); + boolean first = true; + for (String segment : segments) { + // Skip "java" segment - it doesn't exist in system properties + if ("java".equals(segment)) { + continue; + } + if (!first) { + result.append("."); + } + first = false; + result.append(translateName(segment)); + } + return result.toString(); + } + + /** + * Translates a single declarative config name segment to system property format. + * + *

Handles the "/development" suffix convention used for experimental properties in declarative + * config, translating it to the "experimental-" prefix used in flat properties. + */ + private static String translateName(String name) { + // Handle /development suffix → experimental- prefix + // e.g., "span_attributes/development" → "experimental-span-attributes" + if (name.endsWith("/development")) { + return "experimental-" + + name.substring(0, name.length() - "/development".length()).replace('_', '-'); + } + // Convert snake_case to kebab-case (the convention for flat properties) + return name.replace('_', '-'); + } + + @Nullable + @Override + public String getString(String name) { + String fullPath = pathWithName(name); + return configProperties.getString(toPropertyKey(fullPath)); + } + + @Nullable + @Override + public Boolean getBoolean(String name) { + String fullPath = pathWithName(name); + return configProperties.getBoolean(toPropertyKey(fullPath)); + } + + @Nullable + @Override + public Integer getInt(String name) { + String fullPath = pathWithName(name); + return configProperties.getInt(toPropertyKey(fullPath)); + } + + @Nullable + @Override + public Long getLong(String name) { + String fullPath = pathWithName(name); + return configProperties.getLong(toPropertyKey(fullPath)); + } + + @Nullable + @Override + public Double getDouble(String name) { + String fullPath = pathWithName(name); + return configProperties.getDouble(toPropertyKey(fullPath)); + } + + @Override + public DeclarativeConfigProperties getStructured(String name) { + // Extend the path and return a new instance + List newPath = new ArrayList<>(path); + newPath.add(name); + return new ConfigPropertiesBackedDeclarativeConfigProperties(configProperties, newPath); + } + + @Nullable + @Override + // Safe cast: we verified scalarType == String.class before casting + @SuppressWarnings("unchecked") + public List getScalarList(String name, Class scalarType) { + if (scalarType != String.class) { + return null; + } + String fullPath = pathWithName(name); + + // Check explicit list mappings first + String mappedKey = LIST_MAPPINGS.get(fullPath); + if (mappedKey != null) { + List list = configProperties.getList(mappedKey); + if (!list.isEmpty()) { + return (List) list; + } + return null; + } + + // Fall back to standard property key + List list = configProperties.getList(toPropertyKey(fullPath)); + if (list.isEmpty()) { + return null; + } + return (List) list; + } + + @Nullable + @Override + public List getStructuredList(String name) { + String fullPath = pathWithName(name); + + // Check explicit structured list mappings + StructuredListMapping mapping = STRUCTURED_LIST_MAPPINGS.get(fullPath); + if (mapping != null) { + Map map = configProperties.getMap(mapping.systemPropertyKey); + if (map.isEmpty()) { + return null; + } + List result = new ArrayList<>(); + for (Map.Entry entry : map.entrySet()) { + Map fields = new HashMap<>(); + fields.put(mapping.keyFieldName, entry.getKey()); + fields.put(mapping.valueFieldName, entry.getValue()); + result.add(new MapBackedDeclarativeConfig(fields)); + } + return result; + } + + // Not supported for other paths when backed by flat properties + return null; + } + + @Override + public Set getPropertyKeys() { + // Would need to scan all ConfigProperties keys with this prefix + // and extract immediate child names - not easily supported + return Collections.emptySet(); + } + + @Override + public ComponentLoader getComponentLoader() { + // ComponentLoader is used during SDK setup to load SPI components. + // When using system properties (not YAML), component loading happens through + // ServiceLoader instead of declarative config, so this method is not expected + // to be called from instrumentation code. + throw new UnsupportedOperationException( + "ComponentLoader is not available when using system property configuration. " + + "This method is only used during SDK setup with YAML configuration."); + } + + /** + * Generic map-backed DeclarativeConfigProperties for structured list entries. + * + *

This allows any key-value structure to be represented without hardcoding field names. + */ + private static final class MapBackedDeclarativeConfig implements DeclarativeConfigProperties { + private final Map fields; + + MapBackedDeclarativeConfig(Map fields) { + this.fields = fields; + } + + @Nullable + @Override + public String getString(String name) { + return fields.get(name); + } + + @Nullable + @Override + public Boolean getBoolean(String name) { + return null; + } + + @Nullable + @Override + public Integer getInt(String name) { + return null; + } + + @Nullable + @Override + public Long getLong(String name) { + return null; + } + + @Nullable + @Override + public Double getDouble(String name) { + return null; + } + + @Override + public DeclarativeConfigProperties getStructured(String name) { + return DeclarativeConfigProperties.empty(); + } + + @Nullable + @Override + public List getScalarList(String name, Class scalarType) { + return null; + } + + @Nullable + @Override + public List getStructuredList(String name) { + return null; + } + + @Override + public Set getPropertyKeys() { + return fields.keySet(); + } + + @Override + public ComponentLoader getComponentLoader() { + throw new UnsupportedOperationException(); + } + } +} From 63559f1866322eece3118df7eb655feeedb701fb Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 14:37:18 -0800 Subject: [PATCH 02/73] simple examples --- .../graphql/v12_0/GraphqlSingletons.java | 17 ++++++------ .../graphql/v20_0/GraphqlSingletons.java | 27 ++++++++++--------- .../guava/v10_0/InstrumentationHelper.java | 8 +++--- .../HibernateInstrumenterFactory.java | 7 ++--- .../hystrix/HystrixSingletons.java | 7 ++--- .../openai/v1_1/OpenAiSingletons.java | 7 ++--- .../powerjob/v4_0/PowerJobSingletons.java | 7 ++--- .../quartz/v2_0/QuartzSingletons.java | 7 ++--- .../v2_0/TracingAssemblyActivation.java | 8 +++--- .../v3_0/TracingAssemblyActivation.java | 10 ++++--- .../v3_1_1/TracingAssemblyActivation.java | 8 +++--- .../gateway/common/GatewayRouteHelper.java | 9 ++++--- .../v3_1/SpringSchedulingSingletons.java | 7 ++--- .../ModelAndViewAttributesExtractor.java | 8 +++--- .../spymemcached/CompletionListener.java | 8 +++--- .../twilio/TwilioSingletons.java | 7 ++--- .../common/XxlJobInstrumenterFactory.java | 7 ++--- 17 files changed, 92 insertions(+), 67 deletions(-) diff --git a/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java b/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java index 79e0130d3129..08389a328187 100644 --- a/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java +++ b/instrumentation/graphql-java/graphql-java-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v12_0/GraphqlSingletons.java @@ -7,22 +7,23 @@ import graphql.execution.instrumentation.Instrumentation; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.graphql.internal.InstrumentationUtil; import io.opentelemetry.instrumentation.graphql.v12_0.GraphQLTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class GraphqlSingletons { private static final boolean CAPTURE_QUERY = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.graphql.capture-query", true); + DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "graphql", "capture_query") + .orElse(true); private static final boolean QUERY_SANITIZATION_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.graphql.query-sanitizer.enabled", true); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "graphql", "query_sanitizer", "enabled") + .orElse(true); private static final boolean ADD_OPERATION_NAME_TO_SPAN_NAME = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.graphql.add-operation-name-to-span-name.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "graphql", "add_operation_name_to_span_name", "enabled") + .orElse(false); private static final GraphQLTelemetry TELEMETRY = GraphQLTelemetry.builder(GlobalOpenTelemetry.get()) diff --git a/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java b/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java index 99845529f985..0beef16fd7c1 100644 --- a/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java +++ b/instrumentation/graphql-java/graphql-java-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/graphql/v20_0/GraphqlSingletons.java @@ -7,28 +7,31 @@ import graphql.execution.instrumentation.Instrumentation; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.graphql.internal.InstrumentationUtil; import io.opentelemetry.instrumentation.graphql.v20_0.GraphQLTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class GraphqlSingletons { private static final boolean CAPTURE_QUERY = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.graphql.capture-query", true); + DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "graphql", "capture_query") + .orElse(true); private static final boolean QUERY_SANITIZATION_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.graphql.query-sanitizer.enabled", true); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "graphql", "query_sanitizer", "enabled") + .orElse(true); private static final boolean DATA_FETCHER_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.graphql.data-fetcher.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "graphql", "data_fetcher", "enabled") + .orElse(false); private static final boolean TRIVIAL_DATA_FETCHER_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.graphql.trivial-data-fetcher.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "graphql", "trivial_data_fetcher", "enabled") + .orElse(false); private static final boolean ADD_OPERATION_NAME_TO_SPAN_NAME = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.graphql.add-operation-name-to-span-name.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "graphql", "add_operation_name_to_span_name", "enabled") + .orElse(false); private static final GraphQLTelemetry TELEMETRY = GraphQLTelemetry.builder(GlobalOpenTelemetry.get()) diff --git a/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java b/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java index d1d8bbc637f0..2d95a0e8d118 100644 --- a/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java +++ b/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java @@ -5,17 +5,19 @@ package io.opentelemetry.javaagent.instrumentation.guava.v10_0; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.annotation.support.async.AsyncOperationEndStrategies; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.guava.v10_0.GuavaAsyncOperationEndStrategy; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class InstrumentationHelper { static { asyncOperationEndStrategy = GuavaAsyncOperationEndStrategy.builder() .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.guava.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "guava", "span_attributes/development") + .orElse(false)) .build(); registerAsyncSpanEndStrategy(); diff --git a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java index 217454ef1c8f..acc9fd976b75 100644 --- a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java +++ b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java @@ -6,14 +6,15 @@ package io.opentelemetry.javaagent.instrumentation.hibernate; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class HibernateInstrumenterFactory { static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.hibernate.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "hibernate", "span_attributes/development") + .orElse(false); public static Instrumenter createInstrumenter( String instrumentationName) { diff --git a/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java b/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java index 8a5ea9b501c4..51aaa2271c72 100644 --- a/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java +++ b/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java @@ -6,9 +6,9 @@ package io.opentelemetry.javaagent.instrumentation.hystrix; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class HystrixSingletons { @@ -21,8 +21,9 @@ public final class HystrixSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, HystrixRequest::spanName); - if (AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.hystrix.experimental-span-attributes", false)) { + if (DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "hystrix", "span_attributes/development") + .orElse(false)) { builder.addAttributesExtractor(new ExperimentalAttributesExtractor()); } diff --git a/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java b/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java index 2e956eddc0e3..2fe35cb06325 100644 --- a/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java +++ b/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java @@ -6,15 +6,16 @@ package io.opentelemetry.javaagent.instrumentation.openai.v1_1; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.openai.v1_1.OpenAITelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class OpenAiSingletons { public static final OpenAITelemetry TELEMETRY = OpenAITelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureMessageContent( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.genai.capture-message-content", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "genai", "capture_message_content") + .orElse(false)) .build(); private OpenAiSingletons() {} diff --git a/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java b/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java index cf49c5d333a3..f1b6a33f06b4 100644 --- a/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java +++ b/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java @@ -8,6 +8,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; @@ -15,15 +16,15 @@ import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import tech.powerjob.worker.core.processor.ProcessResult; public final class PowerJobSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.powerjob-4.0"; private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.powerjob.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "powerjob", "span_attributes/development") + .orElse(false); private static final Instrumenter INSTRUMENTER = create(); public static Instrumenter instrumenter() { diff --git a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java index 6d0b5c046575..22e2bf87a37d 100644 --- a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java +++ b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java @@ -6,16 +6,17 @@ package io.opentelemetry.javaagent.instrumentation.quartz.v2_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.quartz.v2_0.QuartzTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class QuartzSingletons { public static final QuartzTelemetry TELEMETRY = QuartzTelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.quartz.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "quartz", "span_attributes/development") + .orElse(false)) .build(); private QuartzSingletons() {} diff --git a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java index 91f3b108b71a..8edf3f9ddf02 100644 --- a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java @@ -5,8 +5,9 @@ package io.opentelemetry.javaagent.instrumentation.rxjava.v2_0; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.rxjava.v2_0.TracingAssembly; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.concurrent.atomic.AtomicBoolean; public final class TracingAssemblyActivation { @@ -23,8 +24,9 @@ public static void activate(Class clz) { if (activated.get(clz).compareAndSet(false, true)) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.rxjava.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "rxjava", "span_attributes/development") + .orElse(false)) .build() .enable(); } diff --git a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java index 2dd5a0696be7..c4e53a108923 100644 --- a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java @@ -5,8 +5,9 @@ package io.opentelemetry.javaagent.instrumentation.rxjava.v3_0; -import io.opentelemetry.instrumentation.rxjava.v3_0.TracingAssembly; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.rxjava.v3.TracingAssembly; import java.util.concurrent.atomic.AtomicBoolean; public final class TracingAssemblyActivation { @@ -23,8 +24,9 @@ public static void activate(Class clz) { if (activated.get(clz).compareAndSet(false, true)) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.rxjava.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "rxjava", "span_attributes/development") + .orElse(false)) .build() .enable(); } diff --git a/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java index ca5126be9338..bee89af81fc5 100644 --- a/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java @@ -5,8 +5,9 @@ package io.opentelemetry.javaagent.instrumentation.rxjava.v3_1_1; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.rxjava.v3_1_1.TracingAssembly; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.concurrent.atomic.AtomicBoolean; public final class TracingAssemblyActivation { @@ -23,8 +24,9 @@ public static void activate(Class clz) { if (activated.get(clz).compareAndSet(false, true)) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.rxjava.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "rxjava", "span_attributes/development") + .orElse(false)) .build() .enable(); } diff --git a/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java b/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java index 89d8b72e917e..84ac094d68d7 100644 --- a/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java +++ b/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java @@ -5,8 +5,9 @@ package io.opentelemetry.javaagent.instrumentation.spring.gateway.common; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributeKey; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.regex.Pattern; import javax.annotation.Nullable; @@ -36,9 +37,9 @@ public final class GatewayRouteHelper { static { CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.spring-cloud-gateway.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "spring_cloud_gateway", "span_attributes/development") + .orElse(false); } /* Regex for UUID */ diff --git a/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java index d7d6ad54f818..64b8932df84d 100644 --- a/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java +++ b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java @@ -7,18 +7,19 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class SpringSchedulingSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.spring-scheduling.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "spring_scheduling", "span_attributes/development") + .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java b/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java index 1dcece6a87d9..7a1c078ebe54 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java @@ -5,10 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.spring.webmvc; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import javax.annotation.Nullable; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.View; @@ -16,8 +17,9 @@ public class ModelAndViewAttributesExtractor implements AttributesExtractor { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.spring-webmvc.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "spring_webmvc", "span_attributes/development") + .orElse(false); @Override public void onStart( diff --git a/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java b/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java index b045a961be82..3d1ec308a113 100644 --- a/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java +++ b/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java @@ -7,17 +7,19 @@ import static io.opentelemetry.javaagent.instrumentation.spymemcached.SpymemcachedSingletons.instrumenter; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; public abstract class CompletionListener { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.spymemcached.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "spymemcached", "span_attributes/development") + .orElse(false); private static final String DB_COMMAND_CANCELLED = "spymemcached.command.cancelled"; private static final String MEMCACHED_RESULT = "spymemcached.result"; diff --git a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java index 106ad4873ce3..f5368de8464c 100644 --- a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java +++ b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java @@ -8,16 +8,17 @@ import static io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor.alwaysClient; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.semconv.util.SpanNames; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class TwilioSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.twilio.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "twilio", "span_attributes/development") + .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java b/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java index 1544504bdac6..385569da97f4 100644 --- a/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java +++ b/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java @@ -8,17 +8,18 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class XxlJobInstrumenterFactory { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.xxl-job.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "xxl_job", "span_attributes/development") + .orElse(false); public static Instrumenter create(String instrumentationName) { XxlJobCodeAttributesGetter codeAttributesGetter = new XxlJobCodeAttributesGetter(); From 211e0f53fec6115c88fd20417443508a96e1452c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 15:24:37 -0800 Subject: [PATCH 03/73] method instrumentation (complex) --- .../internal/DeclarativeConfigUtil.java | 12 ++++ .../methods/MethodInstrumentationModule.java | 58 ++++++++++--------- .../methods/MethodsConfig.java | 5 +- 3 files changed, 45 insertions(+), 30 deletions(-) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java index a17151282fcf..e382ec5b121c 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -46,6 +46,18 @@ public static List getList(OpenTelemetry openTelemetry, String... proper return emptyList(); } + public static Optional getStructuredConfig( + OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + return Optional.ofNullable(node != null ? node.getStructured(leaf(propertyPath)) : null); + } + + public static Optional> getStructuredList( + OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + return Optional.ofNullable(node != null ? node.getStructuredList(leaf(propertyPath)) : null); + } + @Nullable private static DeclarativeConfigProperties getDeclarativeConfigNode( OpenTelemetry openTelemetry, String... propertyPath) { diff --git a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java index 71fe619da4db..6b87f8c7890b 100644 --- a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java +++ b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java @@ -10,24 +10,21 @@ import static java.util.Collections.singletonMap; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.SpanKind; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +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.extension.instrumentation.internal.ExperimentalInstrumentationModule; import io.opentelemetry.javaagent.tooling.config.MethodsConfigurationParser; import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.Optional; import java.util.stream.Collectors; @AutoService(InstrumentationModule.class) public class MethodInstrumentationModule extends InstrumentationModule implements ExperimentalInstrumentationModule { - private static final String TRACE_METHODS_CONFIG = "otel.instrumentation.methods.include"; - private final List typeInstrumentations; public MethodInstrumentationModule() { @@ -36,32 +33,37 @@ public MethodInstrumentationModule() { } private static List createInstrumentations() { - InstrumentationConfig config = AgentInstrumentationConfig.get(); - List list = - config.isDeclarative() - ? MethodsConfig.parseDeclarativeConfig(config.getDeclarativeConfig("methods")) - : parseConfigProperties(); - // ensure that there is at least one instrumentation so that muzzle reference collection could - // work - if (list.isEmpty()) { - return singletonList( - new MethodInstrumentation(null, singletonMap(SpanKind.INTERNAL, emptyList()))); + // First try structured declarative config (YAML format) + Optional> structured = + DeclarativeConfigUtil.getStructuredList(GlobalOpenTelemetry.get(), "methods", "include") + .map(MethodsConfig::parseDeclarativeConfig); + if (structured.isPresent()) { + return structured.get(); } - return list; - } - private static List parseConfigProperties() { - Map> classMethodsToTrace = - MethodsConfigurationParser.parse( - AgentInstrumentationConfig.get().getString(TRACE_METHODS_CONFIG)); + // fall back to old string property format + Optional> legacy = parseConfigProperties(); + if (legacy.isPresent()) { + return legacy.get(); + } + + // ensure at least one instrumentation for muzzle reference collection + return singletonList( + new MethodInstrumentation(null, singletonMap(SpanKind.INTERNAL, emptyList()))); + } - return classMethodsToTrace.entrySet().stream() - .filter(e -> !e.getValue().isEmpty()) + private static Optional> parseConfigProperties() { + return DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "methods", "include") + .map(MethodsConfigurationParser::parse) .map( - e -> - new MethodInstrumentation( - e.getKey(), singletonMap(SpanKind.INTERNAL, e.getValue()))) - .collect(Collectors.toList()); + classMethodsToTrace -> + classMethodsToTrace.entrySet().stream() + .filter(e -> !e.getValue().isEmpty()) + .map( + e -> + new MethodInstrumentation( + e.getKey(), singletonMap(SpanKind.INTERNAL, e.getValue()))) + .collect(Collectors.toList())); } @Override diff --git a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodsConfig.java b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodsConfig.java index 692ede856414..6eb02dde4a91 100644 --- a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodsConfig.java +++ b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodsConfig.java @@ -27,8 +27,9 @@ public class MethodsConfig { private MethodsConfig() {} - static List parseDeclarativeConfig(DeclarativeConfigProperties methods) { - return methods.getStructuredList("include", emptyList()).stream() + static List parseDeclarativeConfig( + List include) { + return include.stream() .flatMap(MethodsConfig::parseMethodInstrumentation) .collect(Collectors.toList()); } From a390d815630ea87adf27b32e09db2598d5105ab5 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 16:21:54 -0800 Subject: [PATCH 04/73] statement-sanitizer --- .../apachecamel/decorators/DbSpanDecorator.java | 8 ++++++-- .../cassandra/v3_0/CassandraSingletons.java | 10 ++++++++-- .../cassandra/v4_0/CassandraSingletons.java | 10 ++++++++-- .../cassandra/v4_4/CassandraSingletons.java | 7 +++++-- .../clickhouse/common/ClickHouseDbRequest.java | 8 ++++++-- .../couchbase/v2_0/CouchbaseQuerySanitizer.java | 8 ++++++-- .../instrumentation/geode/GeodeDbAttributesGetter.java | 8 ++++++-- .../instrumentation/hibernate/OperationNameUtil.java | 8 ++++++-- .../instrumentation/influxdb/v2_4/InfluxDbRequest.java | 8 ++++++-- .../javaagent/instrumentation/jdbc/JdbcSingletons.java | 9 ++++++++- .../jedis/v1_4/JedisDbAttributesGetter.java | 8 ++++++-- .../instrumentation/jedis/v3_0/JedisRequest.java | 8 ++++++-- .../instrumentation/jedis/v4_0/JedisRequest.java | 8 ++++++-- .../lettuce/v5_0/LettuceDbAttributesGetter.java | 8 ++++++-- .../instrumentation/lettuce/v5_1/TracingHolder.java | 7 +++++-- .../mongo/v3_1/MongoInstrumentationSingletons.java | 10 ++++++++-- .../mongo/v3_7/MongoInstrumentationSingletons.java | 10 ++++++++-- .../mongo/v4_0/MongoInstrumentationSingletons.java | 10 ++++++++-- .../v3_3/MongoInstrumentationSingletons.java | 10 ++++++++-- .../instrumentation/r2dbc/v1_0/R2dbcSingletons.java | 9 ++++++++- .../instrumentation/redisson/RedissonRequest.java | 8 ++++++-- .../v4_0/redis/VertxRedisClientAttributesGetter.java | 8 ++++++-- .../vertx/sql/VertxSqlInstrumenterFactory.java | 10 ++++++++-- 23 files changed, 154 insertions(+), 44 deletions(-) diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java index 5146ef2d30a8..e235c7a34e88 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java @@ -23,10 +23,11 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel.decorators; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer; import io.opentelemetry.instrumentation.api.internal.SemconvStability; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection; import io.opentelemetry.semconv.DbAttributes; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; @@ -38,7 +39,10 @@ class DbSpanDecorator extends BaseSpanDecorator { private static final SqlStatementSanitizer sanitizer = - SqlStatementSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + SqlStatementSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); private final String component; private final String system; diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java index 12bbc464d562..d5a1afb53a18 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v3_0/CassandraSingletons.java @@ -7,12 +7,12 @@ import com.datastax.driver.core.ExecutionInfo; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; @SuppressWarnings("deprecation") // using deprecated semconv @@ -35,7 +35,13 @@ public final class CassandraSingletons { SqlClientAttributesExtractor.builder(attributesGetter) .setTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE) .setStatementSanitizationEnabled( - AgentCommonConfig.get().isStatementSanitizationEnabled()) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true)) .build()) .addAttributesExtractor(new CassandraAttributesExtractor()) .addOperationMetrics(DbClientMetrics.get()) diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java index cb59a22ccc54..da1a486e3237 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraSingletons.java @@ -7,12 +7,12 @@ import com.datastax.oss.driver.api.core.cql.ExecutionInfo; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; @SuppressWarnings("deprecation") // using deprecated semconv @@ -34,7 +34,13 @@ public final class CassandraSingletons { SqlClientAttributesExtractor.builder(attributesGetter) .setTableAttribute(DbIncubatingAttributes.DB_CASSANDRA_TABLE) .setStatementSanitizationEnabled( - AgentCommonConfig.get().isStatementSanitizationEnabled()) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true)) .build()) .addAttributesExtractor(new CassandraAttributesExtractor()) .addOperationMetrics(DbClientMetrics.get()) diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java index d7151d1b5722..aaf63ea6e4bd 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java @@ -6,14 +6,17 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_4; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.cassandra.v4_4.CassandraTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; final class CassandraSingletons { static final CassandraTelemetry telemetry = CassandraTelemetry.builder(GlobalOpenTelemetry.get()) - .setStatementSanitizationEnabled(AgentCommonConfig.get().isStatementSanitizationEnabled()) + .setStatementSanitizationEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)) .build(); private CassandraSingletons() {} diff --git a/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java b/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java index 35753981cb9b..dd6679d7ef7f 100644 --- a/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java +++ b/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java @@ -6,16 +6,20 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.common; import com.google.auto.value.AutoValue; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementInfo; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import javax.annotation.Nullable; @AutoValue public abstract class ClickHouseDbRequest { private static final SqlStatementSanitizer sanitizer = - SqlStatementSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + SqlStatementSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); public static ClickHouseDbRequest create( @Nullable String host, @Nullable Integer port, @Nullable String dbName, String sql) { diff --git a/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java b/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java index 2fa42b1ca6bb..9e6386326174 100644 --- a/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java +++ b/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java @@ -5,10 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.couchbase.v2_0; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlDialect; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementInfo; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; @@ -17,7 +18,10 @@ public final class CouchbaseQuerySanitizer { private static final SqlStatementSanitizer sanitizer = - SqlStatementSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + SqlStatementSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); @Nullable private static final Class QUERY_CLASS; @Nullable private static final Class STATEMENT_CLASS; diff --git a/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java b/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java index 6ede8c66ff5c..75688010fc86 100644 --- a/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java +++ b/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java @@ -5,16 +5,20 @@ package io.opentelemetry.javaagent.instrumentation.geode; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; import javax.annotation.Nullable; final class GeodeDbAttributesGetter implements DbClientAttributesGetter { private static final SqlStatementSanitizer sanitizer = - SqlStatementSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + SqlStatementSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); @SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues @Override diff --git a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/OperationNameUtil.java b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/OperationNameUtil.java index 60783d0822d3..70e135918211 100644 --- a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/OperationNameUtil.java +++ b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/OperationNameUtil.java @@ -5,15 +5,19 @@ package io.opentelemetry.javaagent.instrumentation.hibernate; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementInfo; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.util.function.Function; public final class OperationNameUtil { private static final SqlStatementSanitizer sanitizer = - SqlStatementSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + SqlStatementSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); public static String getOperationNameForQuery(String query) { // set operation to default value that is used when sql sanitizer fails to extract diff --git a/instrumentation/influxdb-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbRequest.java b/instrumentation/influxdb-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbRequest.java index 560993c266d4..9cc51de1dcac 100644 --- a/instrumentation/influxdb-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbRequest.java +++ b/instrumentation/influxdb-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbRequest.java @@ -6,16 +6,20 @@ package io.opentelemetry.javaagent.instrumentation.influxdb.v2_4; import com.google.auto.value.AutoValue; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementInfo; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import javax.annotation.Nullable; @AutoValue public abstract class InfluxDbRequest { private static final SqlStatementSanitizer sanitizer = - SqlStatementSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + SqlStatementSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); public static InfluxDbRequest create( String host, int port, String dbName, String operation, String sql) { diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java index 30bfbfffc9d5..1cfa6adf77b5 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java @@ -8,6 +8,7 @@ import static io.opentelemetry.instrumentation.jdbc.internal.JdbcInstrumenterFactory.createDataSourceInstrumenter; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.SqlCommenter; import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.SqlCommenterBuilder; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; @@ -53,7 +54,13 @@ public final class JdbcSingletons { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.jdbc.statement-sanitizer.enabled", - AgentCommonConfig.get().isStatementSanitizationEnabled()), + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true)), CAPTURE_QUERY_PARAMETERS); TRANSACTION_INSTRUMENTER = diff --git a/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java b/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java index 7d0c1ae3e9f8..ddb739e0ba31 100644 --- a/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java +++ b/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java @@ -5,15 +5,19 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v1_4; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; final class JedisDbAttributesGetter implements DbClientAttributesGetter { private static final RedisCommandSanitizer sanitizer = - RedisCommandSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + RedisCommandSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); @Override public String getDbSystem(JedisRequest request) { diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisRequest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisRequest.java index 36b71513660e..e9e88b68aa38 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisRequest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisRequest.java @@ -6,8 +6,9 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; import com.google.auto.value.AutoValue; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.nio.charset.StandardCharsets; import java.util.List; import redis.clients.jedis.Connection; @@ -18,7 +19,10 @@ public abstract class JedisRequest { private static final RedisCommandSanitizer sanitizer = - RedisCommandSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + RedisCommandSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); public static JedisRequest create( Connection connection, ProtocolCommand command, List args) { diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/JedisRequest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/JedisRequest.java index a8c26bfaabbb..a662cd743017 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/JedisRequest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/JedisRequest.java @@ -6,8 +6,9 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; import com.google.auto.value.AutoValue; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.net.Socket; import java.net.SocketAddress; import java.nio.charset.StandardCharsets; @@ -22,7 +23,10 @@ public abstract class JedisRequest { private static final RedisCommandSanitizer sanitizer = - RedisCommandSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + RedisCommandSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); public static JedisRequest create(ProtocolCommand command, List args) { return new AutoValue_JedisRequest(command, args); diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java index ca3025b4a6c1..2318cb85e9ec 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java @@ -6,10 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_0; import io.lettuce.core.protocol.RedisCommand; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; import io.opentelemetry.instrumentation.lettuce.common.LettuceArgSplitter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; import java.util.Collections; import java.util.List; @@ -19,7 +20,10 @@ final class LettuceDbAttributesGetter implements DbClientAttributesGetter, Void> { private static final RedisCommandSanitizer sanitizer = - RedisCommandSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + RedisCommandSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); @SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues @Override diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java index f8444f0e0ed1..f2e619cad612 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java @@ -7,8 +7,8 @@ import io.lettuce.core.tracing.Tracing; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.lettuce.v5_1.LettuceTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class TracingHolder { @@ -20,7 +20,10 @@ public final class TracingHolder { public static final Tracing TRACING = LettuceTelemetry.builder(GlobalOpenTelemetry.get()) - .setStatementSanitizationEnabled(AgentCommonConfig.get().isStatementSanitizationEnabled()) + .setStatementSanitizationEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)) .setEncodingSpanEventsEnabled(CAPTURE_COMMAND_ENCODING_EVENTS) .build() .newTracing(); diff --git a/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java index 8ae547d85d2a..5fc2999a1c12 100644 --- a/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java @@ -8,10 +8,10 @@ import com.mongodb.event.CommandListener; import com.mongodb.event.CommandStartedEvent; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -23,7 +23,13 @@ public final class MongoInstrumentationSingletons { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.mongo.statement-sanitizer.enabled", - AgentCommonConfig.get().isStatementSanitizationEnabled())); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java index e8928e5f93a6..edeb9b671b7d 100644 --- a/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java @@ -8,10 +8,10 @@ import com.mongodb.event.CommandListener; import com.mongodb.event.CommandStartedEvent; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -23,7 +23,13 @@ public final class MongoInstrumentationSingletons { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.mongo.statement-sanitizer.enabled", - AgentCommonConfig.get().isStatementSanitizationEnabled())); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java index 20dcba7da5bb..de4988b81466 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java @@ -8,10 +8,10 @@ import com.mongodb.event.CommandListener; import com.mongodb.event.CommandStartedEvent; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -23,7 +23,13 @@ public final class MongoInstrumentationSingletons { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.mongo.statement-sanitizer.enabled", - AgentCommonConfig.get().isStatementSanitizationEnabled())); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java index 2cb3352cdbc8..a702c2c320eb 100644 --- a/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java @@ -8,10 +8,10 @@ import com.mongodb.event.CommandListener; import com.mongodb.event.CommandStartedEvent; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -23,7 +23,13 @@ public final class MongoInstrumentationSingletons { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.mongo.statement-sanitizer.enabled", - AgentCommonConfig.get().isStatementSanitizationEnabled())); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java index 3ac92e48a5f8..a24046000ef3 100644 --- a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java +++ b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.r2dbc.v1_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetry; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetryBuilder; @@ -26,7 +27,13 @@ public final class R2dbcSingletons { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.r2dbc.statement-sanitizer.enabled", - AgentCommonConfig.get().isStatementSanitizationEnabled())) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))) .addAttributesExtractor( PeerServiceAttributesExtractor.create( R2dbcSqlAttributesGetter.INSTANCE, diff --git a/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java b/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java index 2bf432f4b0df..bd91f89c13a0 100644 --- a/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java +++ b/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java @@ -10,8 +10,9 @@ import com.google.auto.value.AutoValue; import io.netty.buffer.ByteBuf; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; @@ -29,7 +30,10 @@ public abstract class RedissonRequest { private static final RedisCommandSanitizer sanitizer = - RedisCommandSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + RedisCommandSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); public static RedissonRequest create(InetSocketAddress address, Object command) { return new AutoValue_RedissonRequest(address, command); diff --git a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java index a6330addd21b..4855fff05082 100644 --- a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java +++ b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java @@ -5,10 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.vertx.v4_0.redis; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.db.RedisCommandSanitizer; import io.opentelemetry.instrumentation.api.internal.SemconvStability; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; import javax.annotation.Nullable; @@ -17,7 +18,10 @@ public enum VertxRedisClientAttributesGetter INSTANCE; private static final RedisCommandSanitizer sanitizer = - RedisCommandSanitizer.create(AgentCommonConfig.get().isStatementSanitizationEnabled()); + RedisCommandSanitizer.create( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + .orElse(true)); @SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues @Override diff --git a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java index d21b69444cd3..b2328c4a2d14 100644 --- a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java +++ b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.vertx.sql; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor; @@ -15,7 +16,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; public final class VertxSqlInstrumenterFactory { @@ -30,7 +30,13 @@ public static Instrumenter createInstrumenter( .addAttributesExtractor( SqlClientAttributesExtractor.builder(VertxSqlClientAttributesGetter.INSTANCE) .setStatementSanitizationEnabled( - AgentCommonConfig.get().isStatementSanitizationEnabled()) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "db", + "statement_sanitizer", + "enabled") + .orElse(true)) .build()) .addAttributesExtractor( ServerAttributesExtractor.create(VertxSqlClientNetAttributesGetter.INSTANCE)) From 4a6eedd73fbddf1328a6baf5f1793e40e78eed7a Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 16:22:51 -0800 Subject: [PATCH 05/73] sqlcommenter --- .../javaagent/instrumentation/jdbc/JdbcSingletons.java | 4 +++- .../javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java index 1cfa6adf77b5..69cfac7d6188 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java @@ -115,7 +115,9 @@ private static SqlCommenter configureSqlCommenter() { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.jdbc.experimental.sqlcommenter.enabled", - AgentCommonConfig.get().isSqlCommenterEnabled())); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "sqlcommenter/development") + .orElse(false))); SqlCommenterCustomizerHolder.getCustomizer().customize(builder); return builder.build(); } diff --git a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java index a24046000ef3..82bf77cd3239 100644 --- a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java +++ b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java @@ -43,7 +43,9 @@ public final class R2dbcSingletons { AgentInstrumentationConfig.get() .getBoolean( "otel.instrumentation.r2dbc.experimental.sqlcommenter.enabled", - AgentCommonConfig.get().isSqlCommenterEnabled())); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "db", "sqlcommenter/development") + .orElse(false))); Experimental.customizeSqlCommenter( builder, sqlCommenterBuilder -> From 05f6cda9482ccbd1c7f21d05d7b96f6f3aa1583b Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 16:26:34 -0800 Subject: [PATCH 06/73] shouldEmitExperimentalHttpClientTelemetry --- .../HttpMethodAttributeExtractor.java | 10 ++++++++-- .../netty/v4_1/NettyClientSingletons.java | 10 +++++++++- .../netty/v4_1/NettyServerSingletons.java | 6 ++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java index 3c522826d044..dd76dedf98ef 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java @@ -11,9 +11,9 @@ import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientUrlTemplate; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.semconv.HttpAttributes; import java.net.HttpURLConnection; import java.util.Set; @@ -29,7 +29,13 @@ public class HttpMethodAttributeExtractor< private HttpMethodAttributeExtractor(Set knownMethods) { this.knownMethods = knownMethods; emitExperimentalHttpClientTelemetry = - AgentCommonConfig.get().shouldEmitExperimentalHttpClientTelemetry(); + DeclarativeConfigUtil.getBoolean( + io.opentelemetry.api.GlobalOpenTelemetry.get(), + "general", + "http", + "client", + "emit_telemetry/development") + .orElse(false); } public static AttributesExtractor create( diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index 9631080b63cb..25f5a7f68c1d 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -10,6 +10,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.NettyRequest; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyClientInstrumenterBuilderFactory; @@ -50,7 +51,14 @@ public final class NettyClientSingletons { SSL_INSTRUMENTER = factory.createSslInstrumenter(); CLIENT_HANDLER_FACTORY = new NettyClientHandlerFactory( - INSTRUMENTER, AgentCommonConfig.get().shouldEmitExperimentalHttpClientTelemetry()); + INSTRUMENTER, + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "general", + "http", + "client", + "emit_telemetry/development") + .orElse(false)); } public static Instrumenter instrumenter() { diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java index cfbb438564b1..9c89189bd2ba 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.netty.v4_1; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.netty.v4_1.NettyServerTelemetry; import io.opentelemetry.instrumentation.netty.v4_1.NettyServerTelemetryBuilder; import io.opentelemetry.instrumentation.netty.v4_1.internal.server.NettyServerInstrumenterBuilderUtil; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; public final class NettyServerSingletons { @@ -18,7 +18,9 @@ public final class NettyServerSingletons { NettyServerInstrumenterBuilderUtil.getBuilderExtractor() .apply(builder) .configure(AgentCommonConfig.get()); - if (AgentCommonConfig.get().shouldEmitExperimentalHttpServerTelemetry()) { + if (DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "http", "server", "emit_telemetry/development") + .orElse(false)) { // this logic is only used in agent builder.setEmitExperimentalHttpServerEvents(true); } From 0362b07bb0fcdcdc9a771ce66a79f2a7597fb8db Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 16:33:53 -0800 Subject: [PATCH 07/73] logging --- .../JbossExtLogRecordInstrumentation.java | 53 ++++++++++++++----- .../SpanDecoratingContextDataInjector.java | 17 ++++-- .../mdc/v1_2/LoggingEventInstrumentation.java | 22 ++++++-- .../logback/mdc/v1_0/LogbackSingletons.java | 17 ++++-- .../mdc/v1_0/LoggingEventInstrumentation.java | 10 +++- 5 files changed, 92 insertions(+), 27 deletions(-) diff --git a/instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/mdc/v1_1/JbossExtLogRecordInstrumentation.java b/instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/mdc/v1_1/JbossExtLogRecordInstrumentation.java index d78750cb16c2..09bc41404850 100644 --- a/instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/mdc/v1_1/JbossExtLogRecordInstrumentation.java +++ b/instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/mdc/v1_1/JbossExtLogRecordInstrumentation.java @@ -11,8 +11,10 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.SpanContext; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import java.util.Map; @@ -57,9 +59,21 @@ public static String onExit( @Advice.Argument(0) String key, @Advice.Return @Nullable String value) { - boolean traceId = AgentCommonConfig.get().getTraceIdKey().equals(key); - boolean spanId = AgentCommonConfig.get().getSpanIdKey().equals(key); - boolean traceFlags = AgentCommonConfig.get().getTraceFlagsKey().equals(key); + String traceIdKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + .orElse(LoggingContextConstants.TRACE_ID); + String spanIdKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "span_id") + .orElse(LoggingContextConstants.SPAN_ID); + String traceFlagsKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + .orElse(LoggingContextConstants.TRACE_FLAGS); + boolean traceId = traceIdKey.equals(key); + boolean spanId = spanIdKey.equals(key); + boolean traceFlags = traceFlagsKey.equals(key); if (!traceId && !spanId && !traceFlags) { return value; @@ -93,9 +107,22 @@ public static class GetMdcCopyAdvice { public static Map onExit( @Advice.This ExtLogRecord record, @Advice.Return Map value) { - if (value.containsKey(AgentCommonConfig.get().getTraceIdKey()) - && value.containsKey(AgentCommonConfig.get().getSpanIdKey()) - && value.containsKey(AgentCommonConfig.get().getTraceFlagsKey())) { + String traceIdKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + .orElse(LoggingContextConstants.TRACE_ID); + String spanIdKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "span_id") + .orElse(LoggingContextConstants.SPAN_ID); + String traceFlagsKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + .orElse(LoggingContextConstants.TRACE_FLAGS); + + if (value.containsKey(traceIdKey) + && value.containsKey(spanIdKey) + && value.containsKey(traceFlagsKey)) { return value; } @@ -104,16 +131,16 @@ public static Map onExit( return value; } - if (!value.containsKey(AgentCommonConfig.get().getTraceIdKey())) { - value.put(AgentCommonConfig.get().getTraceIdKey(), spanContext.getTraceId()); + if (!value.containsKey(traceIdKey)) { + value.put(traceIdKey, spanContext.getTraceId()); } - if (!value.containsKey(AgentCommonConfig.get().getSpanIdKey())) { - value.put(AgentCommonConfig.get().getSpanIdKey(), spanContext.getSpanId()); + if (!value.containsKey(spanIdKey)) { + value.put(spanIdKey, spanContext.getSpanId()); } - if (!value.containsKey(AgentCommonConfig.get().getTraceFlagsKey())) { - value.put(AgentCommonConfig.get().getTraceFlagsKey(), spanContext.getTraceFlags().asHex()); + if (!value.containsKey(traceFlagsKey)) { + value.put(traceFlagsKey, spanContext.getTraceFlags().asHex()); } return value; } diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java index 8cd437da9d38..f73bc3f87508 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java @@ -5,12 +5,14 @@ package io.opentelemetry.javaagent.instrumentation.log4j.contextdata.v2_7; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.baggage.Baggage; import io.opentelemetry.api.baggage.BaggageEntry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ConfiguredResourceAttributesHolder; import java.util.List; @@ -25,9 +27,16 @@ public final class SpanDecoratingContextDataInjector implements ContextDataInjec private static final boolean BAGGAGE_ENABLED = AgentInstrumentationConfig.get() .getBoolean("otel.instrumentation.log4j-context-data.add-baggage", false); - private static final String TRACE_ID_KEY = AgentCommonConfig.get().getTraceIdKey(); - private static final String SPAN_ID_KEY = AgentCommonConfig.get().getSpanIdKey(); - private static final String TRACE_FLAGS_KEY = AgentCommonConfig.get().getTraceFlagsKey(); + private static final String TRACE_ID_KEY = + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + .orElse(LoggingContextConstants.TRACE_ID); + private static final String SPAN_ID_KEY = + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "span_id") + .orElse(LoggingContextConstants.SPAN_ID); + private static final String TRACE_FLAGS_KEY = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + .orElse(LoggingContextConstants.TRACE_FLAGS); private static final StringMap staticContextData = getStaticContextData(); diff --git a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java index ea9f0a21d0f8..2f3198a16f47 100644 --- a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java +++ b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java @@ -11,10 +11,12 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.ConfiguredResourceAttributesHolder; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; @@ -55,9 +57,21 @@ public static Object onExit( if (returnValue != null) { return returnValue; } - boolean traceId = AgentCommonConfig.get().getTraceIdKey().equals(key); - boolean spanId = AgentCommonConfig.get().getSpanIdKey().equals(key); - boolean traceFlags = AgentCommonConfig.get().getTraceFlagsKey().equals(key); + String traceIdKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + .orElse(LoggingContextConstants.TRACE_ID); + String spanIdKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "span_id") + .orElse(LoggingContextConstants.SPAN_ID); + String traceFlagsKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + .orElse(LoggingContextConstants.TRACE_FLAGS); + boolean traceId = traceIdKey.equals(key); + boolean spanId = spanIdKey.equals(key); + boolean traceFlags = traceFlagsKey.equals(key); if (!traceId && !spanId && !traceFlags) { return ConfiguredResourceAttributesHolder.getAttributeValue(key); diff --git a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java index c025f59d25dc..e39309a70184 100644 --- a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java +++ b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java @@ -6,18 +6,27 @@ package io.opentelemetry.javaagent.instrumentation.logback.mdc.v1_0; import ch.qos.logback.classic.spi.ILoggingEvent; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class LogbackSingletons { private static final boolean ADD_BAGGAGE = AgentInstrumentationConfig.get() .getBoolean("otel.instrumentation.logback-mdc.add-baggage", false); - private static final String TRACE_ID_KEY = AgentCommonConfig.get().getTraceIdKey(); - private static final String SPAN_ID_KEY = AgentCommonConfig.get().getSpanIdKey(); - private static final String TRACE_FLAGS_KEY = AgentCommonConfig.get().getTraceFlagsKey(); + private static final String TRACE_ID_KEY = + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + .orElse(LoggingContextConstants.TRACE_ID); + private static final String SPAN_ID_KEY = + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "span_id") + .orElse(LoggingContextConstants.SPAN_ID); + private static final String TRACE_FLAGS_KEY = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + .orElse(LoggingContextConstants.TRACE_FLAGS); public static final VirtualField CONTEXT = VirtualField.find(ILoggingEvent.class, Context.class); diff --git a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java index 38065c9adfac..58d1a6f86f65 100644 --- a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java +++ b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java @@ -17,12 +17,14 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import ch.qos.logback.classic.spi.ILoggingEvent; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.baggage.Baggage; import io.opentelemetry.api.baggage.BaggageEntry; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.ConfiguredResourceAttributesHolder; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; @@ -63,7 +65,11 @@ public static Map onExit( @Advice.This ILoggingEvent event, @Advice.Return(typing = Typing.DYNAMIC) Map contextData) { - if (contextData != null && contextData.containsKey(AgentCommonConfig.get().getTraceIdKey())) { + String traceIdKey = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + .orElse(LoggingContextConstants.TRACE_ID); + if (contextData != null && contextData.containsKey(traceIdKey)) { // Assume already instrumented event if traceId is present. return contextData; } From 3151a173c18d1dae592036577227b1e96d4fbe06 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 16:47:08 -0800 Subject: [PATCH 08/73] known_methods --- .../config/internal/DeclarativeConfigUtil.java | 8 ++++---- .../v2_2/AwsLambdaSingletons.java | 5 +---- .../AwsLambdaEventsInstrumenterFactory.java | 14 ++++++++++++-- .../decorators/HttpSpanDecorator.java | 15 ++++++++++++--- ...icsearchRestJavaagentInstrumenterFactory.java | 14 ++++++++++++-- .../HttpUrlConnectionSingletons.java | 16 +++++++++++++--- .../servlet/v2_2/Servlet2SpanNameExtractor.java | 14 ++++++++++++-- .../servlet/AgentServletInstrumenterBuilder.java | 13 ++++++++++++- 8 files changed, 78 insertions(+), 21 deletions(-) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java index e382ec5b121c..5bbd5fcbe4bd 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.api.incubator.config.internal; import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; -import static java.util.Collections.emptyList; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; @@ -37,13 +36,14 @@ public static Optional getInt(OpenTelemetry openTelemetry, String... pr return Optional.ofNullable(node != null ? node.getInt(leaf(propertyPath)) : null); } - public static List getList(OpenTelemetry openTelemetry, String... propertyPath) { + public static Optional> getList( + OpenTelemetry openTelemetry, String... propertyPath) { DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); if (node != null) { List list = node.getScalarList(leaf(propertyPath), String.class); - return list != null ? list : emptyList(); + return Optional.ofNullable(list); } - return emptyList(); + return Optional.empty(); } public static Optional getStructuredConfig( diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java index 8ffd8f7a10bd..58a411ca545f 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrapperConfiguration; import io.opentelemetry.instrumentation.awslambdaevents.common.v2_2.internal.AwsLambdaEventsInstrumenterFactory; import io.opentelemetry.instrumentation.awslambdaevents.common.v2_2.internal.AwsLambdaSqsInstrumenterFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.time.Duration; @@ -20,9 +19,7 @@ public final class AwsLambdaSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.aws-lambda-events-2.2"; private static final AwsLambdaFunctionInstrumenter FUNCTION_INSTRUMENTER = AwsLambdaEventsInstrumenterFactory.createInstrumenter( - GlobalOpenTelemetry.get(), - INSTRUMENTATION_NAME, - AgentCommonConfig.get().getKnownHttpRequestMethods()); + GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME); private static final Instrumenter MESSAGE_TRACER = AwsLambdaSqsInstrumenterFactory.forEvent(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME); private static final Duration FLUSH_TIMEOUT = diff --git a/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java b/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java index e5d615113253..b229864895b4 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java +++ b/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java @@ -7,11 +7,14 @@ import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.awslambdacore.v1_0.AwsLambdaRequest; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionAttributesExtractor; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter; +import java.util.HashSet; import java.util.Set; /** @@ -21,16 +24,23 @@ public final class AwsLambdaEventsInstrumenterFactory { public static AwsLambdaFunctionInstrumenter createInstrumenter( - OpenTelemetry openTelemetry, String instrumentationName, Set knownMethods) { + OpenTelemetry openTelemetry, String instrumentationName) { return new AwsLambdaFunctionInstrumenter( openTelemetry, Instrumenter.builder( openTelemetry, instrumentationName, AwsLambdaEventsInstrumenterFactory::spanName) .addAttributesExtractor(new AwsLambdaFunctionAttributesExtractor()) - .addAttributesExtractor(new ApiGatewayProxyAttributesExtractor(knownMethods)) + .addAttributesExtractor( + new ApiGatewayProxyAttributesExtractor(getKnownHttpMethods(openTelemetry))) .buildInstrumenter(SpanKindExtractor.alwaysServer())); } + private static Set getKnownHttpMethods(OpenTelemetry openTelemetry) { + return DeclarativeConfigUtil.getList(openTelemetry, "general", "http", "known_methods") + .map(HashSet::new) + .orElse(HttpConstants.KNOWN_METHODS); + } + private static String spanName(AwsLambdaRequest input) { if (input.getInput() instanceof APIGatewayProxyRequestEvent) { APIGatewayProxyRequestEvent request = (APIGatewayProxyRequestEvent) input.getInput(); diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java index 8e1c8b49f3fb..ae193a0281ea 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java @@ -26,16 +26,19 @@ import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet; import static io.opentelemetry.instrumentation.api.internal.HttpConstants._OTHER; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection; import io.opentelemetry.semconv.HttpAttributes; import io.opentelemetry.semconv.UrlAttributes; import java.net.MalformedURLException; import java.net.URL; +import java.util.HashSet; import java.util.Set; import javax.annotation.Nullable; import org.apache.camel.Endpoint; @@ -45,13 +48,19 @@ class HttpSpanDecorator extends BaseSpanDecorator { private static final String POST_METHOD = "POST"; private static final String GET_METHOD = "GET"; - private static final Set knownMethods = - AgentCommonConfig.get().getKnownHttpRequestMethods(); + private static final Set knownMethods = getKnownHttpMethods(); protected String getProtocol() { return "http"; } + private static Set getKnownHttpMethods() { + return DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "general", "http", "known_methods") + .map(HashSet::new) + .orElse(HttpConstants.KNOWN_METHODS); + } + protected static String getHttpMethod(Exchange exchange, Endpoint endpoint) { // 1. Use method provided in header. Object method = exchange.getIn().getHeader(Exchange.HTTP_METHOD); diff --git a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java index 6b6ebe20ccf6..784e2bbf3097 100644 --- a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java +++ b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java @@ -6,12 +6,15 @@ package io.opentelemetry.javaagent.instrumentation.elasticsearch.rest; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.elasticsearch.rest.common.v5_0.internal.ElasticsearchRestInstrumenterFactory; import io.opentelemetry.instrumentation.elasticsearch.rest.common.v5_0.internal.ElasticsearchRestRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import java.util.function.Function; import org.elasticsearch.client.Response; @@ -30,7 +33,14 @@ public static Instrumenter create( instrumentationName, Collections.emptyList(), Function.identity(), - AgentCommonConfig.get().getKnownHttpRequestMethods(), + getKnownHttpMethods(), CAPTURE_SEARCH_QUERY); } + + private static Set getKnownHttpMethods() { + return DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "general", "http", "known_methods") + .map(HashSet::new) + .orElse(HttpConstants.KNOWN_METHODS); + } } diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java index 3c502e3f838f..57c8a697a828 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java @@ -5,11 +5,15 @@ package io.opentelemetry.javaagent.instrumentation.httpurlconnection; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpClientInstrumenters; import java.net.HttpURLConnection; +import java.util.HashSet; +import java.util.Set; public final class HttpUrlConnectionSingletons { @@ -27,8 +31,7 @@ public final class HttpUrlConnectionSingletons { builder -> builder .addAttributesExtractor( - HttpMethodAttributeExtractor.create( - AgentCommonConfig.get().getKnownHttpRequestMethods())) + HttpMethodAttributeExtractor.create(getKnownHttpMethods())) .addContextCustomizer( (context, httpRequestPacket, startAttributes) -> GetOutputStreamContext.init(context))); @@ -38,5 +41,12 @@ public static Instrumenter instrumenter() { return INSTRUMENTER; } + private static Set getKnownHttpMethods() { + return DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "general", "http", "known_methods") + .map(HashSet::new) + .orElse(HttpConstants.KNOWN_METHODS); + } + private HttpUrlConnectionSingletons() {} } diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java index b6dd650f5a46..e12a0de38947 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java @@ -5,22 +5,32 @@ package io.opentelemetry.javaagent.instrumentation.servlet.v2_2; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.servlet.internal.ServletAccessor; import io.opentelemetry.instrumentation.servlet.internal.ServletRequestContext; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +import java.util.HashSet; import java.util.Set; public class Servlet2SpanNameExtractor implements SpanNameExtractor> { private final ServletAccessor accessor; - private final Set knownMethods = AgentCommonConfig.get().getKnownHttpRequestMethods(); + private final Set knownMethods = getKnownHttpMethods(); public Servlet2SpanNameExtractor(ServletAccessor accessor) { this.accessor = accessor; } + private static Set getKnownHttpMethods() { + return DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "general", "http", "known_methods") + .map(HashSet::new) + .orElse(HttpConstants.KNOWN_METHODS); + } + @Override public String extract(ServletRequestContext requestContext) { REQUEST request = requestContext.request(); diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index 8e2634fc54ce..06ba6290a7bd 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -9,9 +9,11 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter; import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.servlet.internal.ServletAccessor; @@ -22,7 +24,9 @@ import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; public final class AgentServletInstrumenterBuilder { @@ -88,9 +92,16 @@ public Instrumenter, ServletResponseContext(accessor); SpanNameExtractor> spanNameExtractor = HttpSpanNameExtractor.builder(httpAttributesGetter) - .setKnownMethods(AgentCommonConfig.get().getKnownHttpRequestMethods()) + .setKnownMethods(getKnownHttpMethods()) .build(); return build(instrumentationName, accessor, spanNameExtractor, httpAttributesGetter); } + + private static Set getKnownHttpMethods() { + return DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "general", "http", "known_methods") + .map(HashSet::new) + .orElse(HttpConstants.KNOWN_METHODS); + } } From e23153973db0d0a67817da6fa11d990e9e1b1960 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 16:53:30 -0800 Subject: [PATCH 09/73] enduser --- .../AgentServletInstrumenterBuilder.java | 5 ++++- .../servlet/BaseServletHelper.java | 7 +++++-- .../EnduserAttributesCapturerSingletons.java | 18 ++++++++++++++---- ...rityConfigServletInstrumentationModule.java | 15 +++++++++++++-- ...rityConfigWebFluxInstrumentationModule.java | 15 +++++++++++++-- 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index 06ba6290a7bd..4cbc119aa64a 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -73,7 +73,10 @@ public Instrumenter, ServletResponseContext> contextCustomizer : contextCustomizers) { builder.addContextCustomizer(contextCustomizer); diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java index e84ffcdeb663..54bc4ecaeba2 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java @@ -9,9 +9,11 @@ import static io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource.SERVER_FILTER; import static java.util.Collections.emptyList; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; @@ -21,7 +23,6 @@ import io.opentelemetry.instrumentation.servlet.internal.ServletRequestContext; import io.opentelemetry.instrumentation.servlet.internal.ServletRequestParametersExtractor; import io.opentelemetry.instrumentation.servlet.internal.ServletResponseContext; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.servlet.AppServerBridge; import io.opentelemetry.javaagent.bootstrap.servlet.ServletAsyncContext; @@ -167,7 +168,9 @@ private void captureRequestParameters(Span serverSpan, REQUEST request) { * created by servlet instrumentation we call this method on exit from the last servlet or filter. */ private void captureEnduserId(Span serverSpan, REQUEST request) { - if (!AgentCommonConfig.get().getEnduserConfig().isIdEnabled()) { + if (!DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "enduser", "id", "enabled") + .orElse(false)) { return; } diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java index 3ebaf45feb24..65769b612781 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java @@ -5,8 +5,9 @@ package io.opentelemetry.javaagent.instrumentation.spring.security.config.v6_0; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.spring.security.config.v6_0.EnduserAttributesCapturer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public class EnduserAttributesCapturerSingletons { @@ -22,9 +23,18 @@ public static EnduserAttributesCapturer enduserAttributesCapturer() { private static EnduserAttributesCapturer createEndUserAttributesCapturerFromConfig() { EnduserAttributesCapturer capturer = new EnduserAttributesCapturer(); - capturer.setEnduserIdEnabled(AgentCommonConfig.get().getEnduserConfig().isIdEnabled()); - capturer.setEnduserRoleEnabled(AgentCommonConfig.get().getEnduserConfig().isRoleEnabled()); - capturer.setEnduserScopeEnabled(AgentCommonConfig.get().getEnduserConfig().isScopeEnabled()); + capturer.setEnduserIdEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "enduser", "id", "enabled") + .orElse(false)); + capturer.setEnduserRoleEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "enduser", "role", "enabled") + .orElse(false)); + capturer.setEnduserScopeEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "general", "enduser", "scope", "enabled") + .orElse(false)); String rolePrefix = AgentInstrumentationConfig.get() 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..264e6474da7a 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,7 +9,8 @@ import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +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.extension.instrumentation.internal.ExperimentalInstrumentationModule; @@ -39,7 +40,17 @@ public boolean defaultEnabled(ConfigProperties config) { * If any functionality not related to enduser attributes is added to this module, * then this check will need to move elsewhere to only guard the enduser attributes logic. */ - && AgentCommonConfig.get().getEnduserConfig().isAnyEnabled(); + && isAnyEnduserAttributeEnabled(); + } + + private static boolean isAnyEnduserAttributeEnabled() { + var otel = GlobalOpenTelemetry.get(); + return DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "id", "enabled") + .orElse(false) + || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "role", "enabled") + .orElse(false) + || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "scope", "enabled") + .orElse(false); } @Override 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..88d7ceed7a8d 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,7 +8,8 @@ import static java.util.Collections.singletonList; import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +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; @@ -36,7 +37,17 @@ public boolean defaultEnabled(ConfigProperties config) { * If any functionality not related to enduser attributes is added to this module, * then this check will need to move elsewhere to only guard the enduser attributes logic. */ - && AgentCommonConfig.get().getEnduserConfig().isAnyEnabled(); + && isAnyEnduserAttributeEnabled(); + } + + private static boolean isAnyEnduserAttributeEnabled() { + var otel = GlobalOpenTelemetry.get(); + return DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "id", "enabled") + .orElse(false) + || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "role", "enabled") + .orElse(false) + || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "scope", "enabled") + .orElse(false); } @Override From 4cf2421a8f28afe827fba96ed966d3f4a542a006 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 17:01:25 -0800 Subject: [PATCH 10/73] peerservice --- .../semconv/net/PeerServiceResolver.java | 26 +++++++++++++++++++ .../apachedubbo/v2_7/DubboSingletons.java | 4 +-- .../instrumentation/jdbc/JdbcSingletons.java | 4 +-- .../jedis/v1_4/JedisSingletons.java | 4 +-- .../jedis/v3_0/JedisSingletons.java | 4 +-- .../lettuce/v4_0/LettuceSingletons.java | 4 +-- .../lettuce/v5_0/LettuceSingletons.java | 4 +-- .../v3_8/client/NettyClientSingletons.java | 4 +-- .../v4_0/client/NettyClientSingletons.java | 3 ++- .../netty/v4_1/NettyClientSingletons.java | 3 ++- .../r2dbc/v1_0/R2dbcSingletons.java | 4 +-- .../v1_0/ReactorNettySingletons.java | 3 ++- .../redis/VertxRedisClientSingletons.java | 4 +-- .../sql/VertxSqlInstrumenterFactory.java | 3 ++- 14 files changed, 52 insertions(+), 22 deletions(-) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/net/PeerServiceResolver.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/net/PeerServiceResolver.java index 81523e8061e4..bf4d39f8b237 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/net/PeerServiceResolver.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/net/PeerServiceResolver.java @@ -5,7 +5,13 @@ package io.opentelemetry.instrumentation.api.incubator.semconv.net; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.function.Supplier; import javax.annotation.Nullable; @@ -19,4 +25,24 @@ public interface PeerServiceResolver { static PeerServiceResolver create(Map mapping) { return new PeerServiceResolverImpl(mapping); } + + static PeerServiceResolver create(OpenTelemetry openTelemetry) { + Map peerServiceMap = new HashMap<>(); + + Optional> mappingList = + DeclarativeConfigUtil.getStructuredList( + openTelemetry, "general", "peer", "service_mapping"); + + if (mappingList.isPresent()) { + for (DeclarativeConfigProperties mapping : mappingList.get()) { + String peer = mapping.getString("peer"); + String service = mapping.getString("service"); + if (peer != null && service != null) { + peerServiceMap.put(peer, service); + } + } + } + + return new PeerServiceResolverImpl(peerServiceMap); + } } diff --git a/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboSingletons.java b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboSingletons.java index 034d739dc82c..4fa983102561 100644 --- a/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboSingletons.java +++ b/instrumentation/apache-dubbo-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboSingletons.java @@ -9,7 +9,7 @@ import io.opentelemetry.instrumentation.apachedubbo.v2_7.DubboTelemetry; import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboClientNetworkAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import org.apache.dubbo.rpc.Filter; public final class DubboSingletons { @@ -22,7 +22,7 @@ public final class DubboSingletons { .addAttributesExtractor( PeerServiceAttributesExtractor.create( new DubboClientNetworkAttributesGetter(), - AgentCommonConfig.get().getPeerServiceResolver())) + PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .build(); CLIENT_FILTER = telemetry.newClientFilter(); SERVER_FILTER = telemetry.newServerFilter(); diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java index 69cfac7d6188..f613c9f4cc0c 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java @@ -12,13 +12,13 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.SqlCommenter; import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.SqlCommenterBuilder; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.cache.Cache; import io.opentelemetry.instrumentation.jdbc.internal.DbRequest; import io.opentelemetry.instrumentation.jdbc.internal.JdbcAttributesGetter; import io.opentelemetry.instrumentation.jdbc.internal.JdbcInstrumenterFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.sqlcommenter.SqlCommenterCustomizerHolder; import io.opentelemetry.javaagent.bootstrap.jdbc.DbInfo; @@ -40,7 +40,7 @@ public final class JdbcSingletons { static { AttributesExtractor peerServiceExtractor = PeerServiceAttributesExtractor.create( - JdbcAttributesGetter.INSTANCE, AgentCommonConfig.get().getPeerServiceResolver()); + JdbcAttributesGetter.INSTANCE, PeerServiceResolver.create(GlobalOpenTelemetry.get())); CAPTURE_QUERY_PARAMETERS = AgentInstrumentationConfig.get() diff --git a/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisSingletons.java b/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisSingletons.java index b80041cc3b77..c3175074765a 100644 --- a/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisSingletons.java +++ b/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisSingletons.java @@ -10,10 +10,10 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; public final class JedisSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jedis-1.4"; @@ -33,7 +33,7 @@ public final class JedisSingletons { .addAttributesExtractor(ServerAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor( PeerServiceAttributesExtractor.create( - netAttributesGetter, AgentCommonConfig.get().getPeerServiceResolver())) + netAttributesGetter, PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addOperationMetrics(DbClientMetrics.get()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisSingletons.java b/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisSingletons.java index dc0fb845e436..3f990d87eec5 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisSingletons.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/JedisSingletons.java @@ -10,11 +10,11 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; public final class JedisSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jedis-3.0"; @@ -35,7 +35,7 @@ public final class JedisSingletons { .addAttributesExtractor(NetworkAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor( PeerServiceAttributesExtractor.create( - netAttributesGetter, AgentCommonConfig.get().getPeerServiceResolver())) + netAttributesGetter, PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addOperationMetrics(DbClientMetrics.get()) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java index 44b55c613347..b5dc54f6372d 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java @@ -15,11 +15,11 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class LettuceSingletons { @@ -55,7 +55,7 @@ public final class LettuceSingletons { .addAttributesExtractor(ServerAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractor( PeerServiceAttributesExtractor.create( - netAttributesGetter, AgentCommonConfig.get().getPeerServiceResolver())) + netAttributesGetter, PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addAttributesExtractor(new LettuceConnectAttributesExtractor()) .setEnabled( AgentInstrumentationConfig.get() diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java index e8661ad8a8cd..63ffea7ba4c8 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java @@ -15,11 +15,11 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class LettuceSingletons { @@ -57,7 +57,7 @@ public final class LettuceSingletons { .addAttributesExtractor( PeerServiceAttributesExtractor.create( connectNetworkAttributesGetter, - AgentCommonConfig.get().getPeerServiceResolver())) + PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addAttributesExtractor(new LettuceConnectAttributesExtractor()) .setEnabled( AgentInstrumentationConfig.get() diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java index 9807756bd015..487de004254a 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java @@ -7,12 +7,12 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientPeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpClientInstrumenters; import io.opentelemetry.javaagent.instrumentation.netty.v3_8.NettyRequest; import io.opentelemetry.semconv.SchemaUrls; @@ -45,7 +45,7 @@ public final class NettyClientSingletons { .addAttributesExtractor( HttpClientPeerServiceAttributesExtractor.create( NettyConnectHttpAttributesGetter.INSTANCE, - AgentCommonConfig.get().getPeerServiceResolver())) + PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .setSchemaUrl(SchemaUrls.V1_37_0) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java index a296af531281..6ac313a9882c 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java @@ -10,6 +10,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.NettyRequest; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyClientInstrumenterBuilderFactory; @@ -45,7 +46,7 @@ public final class NettyClientSingletons { enabledOrErrorOnly(sslTelemetryEnabled)); INSTRUMENTER = factory.instrumenter(); CONNECTION_INSTRUMENTER = - factory.createConnectionInstrumenter(AgentCommonConfig.get().getPeerServiceResolver()); + factory.createConnectionInstrumenter(PeerServiceResolver.create(GlobalOpenTelemetry.get())); SSL_INSTRUMENTER = factory.createSslInstrumenter(); } diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index 25f5a7f68c1d..650ebc2e2877 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -11,6 +11,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.NettyRequest; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyClientInstrumenterBuilderFactory; @@ -47,7 +48,7 @@ public final class NettyClientSingletons { enabledOrErrorOnly(sslTelemetryEnabled)); INSTRUMENTER = factory.instrumenter(); CONNECTION_INSTRUMENTER = - factory.createConnectionInstrumenter(AgentCommonConfig.get().getPeerServiceResolver()); + factory.createConnectionInstrumenter(PeerServiceResolver.create(GlobalOpenTelemetry.get())); SSL_INSTRUMENTER = factory.createSslInstrumenter(); CLIENT_HANDLER_FACTORY = new NettyClientHandlerFactory( diff --git a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java index 82bf77cd3239..d5f0158a28e1 100644 --- a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java +++ b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java @@ -8,11 +8,11 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetry; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetryBuilder; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.internal.Experimental; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.internal.R2dbcSqlAttributesGetter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.sqlcommenter.SqlCommenterCustomizerHolder; @@ -37,7 +37,7 @@ public final class R2dbcSingletons { .addAttributesExtractor( PeerServiceAttributesExtractor.create( R2dbcSqlAttributesGetter.INSTANCE, - AgentCommonConfig.get().getPeerServiceResolver())); + PeerServiceResolver.create(GlobalOpenTelemetry.get()))); Experimental.setEnableSqlCommenter( builder, AgentInstrumentationConfig.get() diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java index 5bb4297c2a35..9b590bdf2811 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java @@ -9,6 +9,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.netty.common.v4_0.NettyRequest; @@ -57,7 +58,7 @@ public final class ReactorNettySingletons { NettyConnectionInstrumentationFlag.DISABLED); CONNECTION_INSTRUMENTER = instrumenterFactory.createConnectionInstrumenter( - AgentCommonConfig.get().getPeerServiceResolver()); + PeerServiceResolver.create(GlobalOpenTelemetry.get())); } public static Instrumenter instrumenter() { diff --git a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientSingletons.java b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientSingletons.java index 7bc57fbbb10e..df60457e0332 100644 --- a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientSingletons.java +++ b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientSingletons.java @@ -11,6 +11,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; @@ -18,7 +19,6 @@ import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.vertx.core.Future; import io.vertx.redis.client.Command; import io.vertx.redis.client.impl.RedisStandaloneConnection; @@ -54,7 +54,7 @@ public final class VertxRedisClientSingletons { .addAttributesExtractor( PeerServiceAttributesExtractor.create( VertxRedisClientNetAttributesGetter.INSTANCE, - AgentCommonConfig.get().getPeerServiceResolver())) + PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addOperationMetrics(DbClientMetrics.get()); INSTRUMENTER = builder.buildInstrumenter(SpanKindExtractor.alwaysClient()); diff --git a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java index b2328c4a2d14..b59c445ab3b5 100644 --- a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java +++ b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/sql/VertxSqlInstrumenterFactory.java @@ -11,6 +11,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; @@ -43,7 +44,7 @@ public static Instrumenter createInstrumenter( .addAttributesExtractor( PeerServiceAttributesExtractor.create( VertxSqlClientNetAttributesGetter.INSTANCE, - AgentCommonConfig.get().getPeerServiceResolver())) + PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addOperationMetrics(DbClientMetrics.get()); return builder.buildInstrumenter(SpanKindExtractor.alwaysClient()); From af67bb1217cd15e8290f0627a003c2fdfa140f06 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 19:15:36 -0800 Subject: [PATCH 11/73] httpconfigure --- .../DefaultHttpClientInstrumenterBuilder.java | 39 ++++++++++--------- .../DefaultHttpServerInstrumenterBuilder.java | 32 +++++++-------- .../armeria/v1_3/ArmeriaSingletons.java | 8 +--- .../helidon/v4_3/HelidonSingletons.java | 3 +- .../JavaHttpServerSingletons.java | 6 +-- .../ktor/v2_0/HttpClientInstrumentation.java | 3 +- .../ktor/v2_0/ServerInstrumentation.java | 3 +- .../ktor/v3_0/HttpClientInstrumentation.java | 3 +- .../ktor/v3_0/ServerInstrumentation.java | 3 +- .../KubernetesClientSingletons.java | 3 +- .../v4_0/client/NettyClientSingletons.java | 3 +- .../netty/v4_1/NettyClientSingletons.java | 3 +- .../netty/v4_1/NettyServerSingletons.java | 2 +- .../ratpack/v1_7/RatpackSingletons.java | 3 +- .../v1_0/ReactorNettySingletons.java | 3 +- .../AgentServletInstrumenterBuilder.java | 3 +- .../JavaagentHttpClientInstrumenters.java | 2 +- .../JavaagentHttpServerInstrumenters.java | 2 +- 18 files changed, 52 insertions(+), 72 deletions(-) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java index d73e350503f4..34881f795598 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java @@ -10,7 +10,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapSetter; -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientPeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor; @@ -35,8 +35,6 @@ import java.util.Collection; import java.util.List; import java.util.Objects; -import java.util.function.Consumer; -import java.util.function.Supplier; import java.util.function.UnaryOperator; import javax.annotation.Nullable; @@ -265,22 +263,25 @@ InstrumenterBuilder instrumenterBuilder( } @CanIgnoreReturnValue - public DefaultHttpClientInstrumenterBuilder configure(CommonConfig config) { - set(config::getKnownHttpRequestMethods, this::setKnownMethods); - set(config::getClientRequestHeaders, this::setCapturedRequestHeaders); - set(config::getClientResponseHeaders, this::setCapturedResponseHeaders); - set(config::getPeerServiceResolver, this::setPeerServiceResolver); - set( - config::shouldEmitExperimentalHttpClientTelemetry, - this::setEmitExperimentalHttpClientTelemetry); - set(config::redactQueryParameters, this::setRedactQueryParameters); + public DefaultHttpClientInstrumenterBuilder configure( + OpenTelemetry openTelemetry) { + DeclarativeConfigUtil.getList(openTelemetry, "general", "http", "known_methods") + .ifPresent(this::setKnownMethods); + DeclarativeConfigUtil.getList( + openTelemetry, "general", "http", "client", "request_captured_headers") + .ifPresent(this::setCapturedRequestHeaders); + DeclarativeConfigUtil.getList( + openTelemetry, "general", "http", "client", "response_captured_headers") + .ifPresent(this::setCapturedResponseHeaders); + setPeerServiceResolver(PeerServiceResolver.create(openTelemetry)); + setEmitExperimentalHttpClientTelemetry( + DeclarativeConfigUtil.getBoolean( + openTelemetry, "general", "http", "client", "emit_telemetry/development") + .orElse(false)); + setRedactQueryParameters( + DeclarativeConfigUtil.getBoolean( + openTelemetry, "general", "http", "client", "redact_query_parameters/development") + .orElse(true)); return this; } - - private static void set(Supplier supplier, Consumer consumer) { - T t = supplier.get(); - if (t != null) { - consumer.accept(t); - } - } } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java index ffb48a61a9c5..d0128a5c2621 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java @@ -8,7 +8,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.context.propagation.TextMapGetter; -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimentalAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; @@ -31,8 +31,6 @@ import java.util.Collection; import java.util.List; import java.util.Objects; -import java.util.function.Consumer; -import java.util.function.Supplier; import java.util.function.UnaryOperator; import javax.annotation.Nullable; @@ -224,20 +222,20 @@ public InstrumenterBuilder instrumenterBuilder() { } @CanIgnoreReturnValue - public DefaultHttpServerInstrumenterBuilder configure(CommonConfig config) { - set(config::getKnownHttpRequestMethods, this::setKnownMethods); - set(config::getServerRequestHeaders, this::setCapturedRequestHeaders); - set(config::getServerResponseHeaders, this::setCapturedResponseHeaders); - set( - config::shouldEmitExperimentalHttpServerTelemetry, - this::setEmitExperimentalHttpServerTelemetry); + public DefaultHttpServerInstrumenterBuilder configure( + OpenTelemetry openTelemetry) { + DeclarativeConfigUtil.getList(openTelemetry, "general", "http", "known_methods") + .ifPresent(this::setKnownMethods); + DeclarativeConfigUtil.getList( + openTelemetry, "general", "http", "server", "request_captured_headers") + .ifPresent(this::setCapturedRequestHeaders); + DeclarativeConfigUtil.getList( + openTelemetry, "general", "http", "server", "response_captured_headers") + .ifPresent(this::setCapturedResponseHeaders); + setEmitExperimentalHttpServerTelemetry( + DeclarativeConfigUtil.getBoolean( + openTelemetry, "general", "http", "server", "emit_telemetry/development") + .orElse(false)); return this; } - - private static void set(Supplier supplier, Consumer consumer) { - T t = supplier.get(); - if (t != null) { - consumer.accept(t); - } - } } diff --git a/instrumentation/armeria/armeria-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaSingletons.java b/instrumentation/armeria/armeria-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaSingletons.java index 8d1fe03762ea..8290f7c2e237 100644 --- a/instrumentation/armeria/armeria-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaSingletons.java +++ b/instrumentation/armeria/armeria-1.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaSingletons.java @@ -8,13 +8,11 @@ import com.linecorp.armeria.client.HttpClient; import com.linecorp.armeria.server.HttpService; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; import io.opentelemetry.instrumentation.armeria.v1_3.ArmeriaClientTelemetry; import io.opentelemetry.instrumentation.armeria.v1_3.ArmeriaClientTelemetryBuilder; import io.opentelemetry.instrumentation.armeria.v1_3.ArmeriaServerTelemetry; import io.opentelemetry.instrumentation.armeria.v1_3.ArmeriaServerTelemetryBuilder; import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaInstrumenterBuilderUtil; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.util.function.Function; // Holds singleton references to decorators to match against during suppression. @@ -25,20 +23,18 @@ public final class ArmeriaSingletons { public static final Function SERVER_DECORATOR; static { - CommonConfig config = AgentCommonConfig.get(); - ArmeriaClientTelemetryBuilder clientBuilder = ArmeriaClientTelemetry.builder(GlobalOpenTelemetry.get()); ArmeriaInstrumenterBuilderUtil.getClientBuilderExtractor() .apply(clientBuilder) - .configure(config); + .configure(GlobalOpenTelemetry.get()); ArmeriaClientTelemetry clientTelemetry = clientBuilder.build(); ArmeriaServerTelemetryBuilder serverBuilder = ArmeriaServerTelemetry.builder(GlobalOpenTelemetry.get()); ArmeriaInstrumenterBuilderUtil.getServerBuilderExtractor() .apply(serverBuilder) - .configure(config); + .configure(GlobalOpenTelemetry.get()); ArmeriaServerTelemetry serverTelemetry = serverBuilder.build(); CLIENT_DECORATOR = clientTelemetry.newDecorator(); diff --git a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonSingletons.java b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonSingletons.java index c5ad2275ddde..5818ad9499b9 100644 --- a/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonSingletons.java +++ b/instrumentation/helidon-4.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/helidon/v4_3/HelidonSingletons.java @@ -9,7 +9,6 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.helidon.v4_3.HelidonTelemetry; import io.opentelemetry.instrumentation.helidon.v4_3.internal.HelidonInstrumenterBuilderUtil; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.util.List; public final class HelidonSingletons { @@ -20,7 +19,7 @@ public final class HelidonSingletons { var serverBuilder = HelidonTelemetry.builder(GlobalOpenTelemetry.get()); HelidonInstrumenterBuilderUtil.getServerBuilderExtractor() .apply(serverBuilder) - .configure(AgentCommonConfig.get()); + .configure(GlobalOpenTelemetry.get()); var serverTelemetry = serverBuilder.build(); FILTERS = List.of(serverTelemetry.createFilter(), new ResponseCustomizingFilter()); diff --git a/instrumentation/java-http-server/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerSingletons.java b/instrumentation/java-http-server/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerSingletons.java index 997b325f6410..5bf14569922b 100644 --- a/instrumentation/java-http-server/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerSingletons.java +++ b/instrumentation/java-http-server/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/javahttpserver/JavaHttpServerSingletons.java @@ -7,11 +7,9 @@ import com.sun.net.httpserver.Filter; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; import io.opentelemetry.instrumentation.javahttpserver.JavaHttpServerTelemetry; import io.opentelemetry.instrumentation.javahttpserver.JavaHttpServerTelemetryBuilder; import io.opentelemetry.instrumentation.javahttpserver.internal.JavaHttpServerInstrumenterBuilderUtil; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import java.util.Arrays; import java.util.List; @@ -20,13 +18,11 @@ public final class JavaHttpServerSingletons { public static final List FILTERS; static { - CommonConfig config = AgentCommonConfig.get(); - JavaHttpServerTelemetryBuilder serverBuilder = JavaHttpServerTelemetry.builder(GlobalOpenTelemetry.get()); JavaHttpServerInstrumenterBuilderUtil.getServerBuilderExtractor() .apply(serverBuilder) - .configure(config); + .configure(GlobalOpenTelemetry.get()); JavaHttpServerTelemetry serverTelemetry = serverBuilder.build(); FILTERS = Arrays.asList(serverTelemetry.newFilter(), new ResponseCustomizingFilter()); diff --git a/instrumentation/ktor/ktor-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ktor/v2_0/HttpClientInstrumentation.java b/instrumentation/ktor/ktor-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ktor/v2_0/HttpClientInstrumentation.java index 8a5276c6d695..10c7b49a90b1 100644 --- a/instrumentation/ktor/ktor-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ktor/v2_0/HttpClientInstrumentation.java +++ b/instrumentation/ktor/ktor-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ktor/v2_0/HttpClientInstrumentation.java @@ -16,7 +16,6 @@ import io.opentelemetry.instrumentation.ktor.v2_0.KtorClientTelemetry; import io.opentelemetry.instrumentation.ktor.v2_0.KtorClientTelemetryBuilder; import io.opentelemetry.instrumentation.ktor.v2_0.common.internal.KtorBuilderUtil; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import kotlin.Unit; @@ -55,7 +54,7 @@ public static class SetupFunction implements Function1 { if (CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) { diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java index 6ac313a9882c..2d785ef3d2ab 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java @@ -17,7 +17,6 @@ import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyClientInstrumenterFactory; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettySslInstrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class NettyClientSingletons { @@ -37,7 +36,7 @@ public final class NettyClientSingletons { DefaultHttpClientInstrumenterBuilder builder = NettyClientInstrumenterBuilderFactory.create( "io.opentelemetry.netty-4.0", GlobalOpenTelemetry.get()) - .configure(AgentCommonConfig.get()); + .configure(GlobalOpenTelemetry.get()); NettyClientInstrumenterFactory factory = new NettyClientInstrumenterFactory( diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index 650ebc2e2877..4001fada3d8d 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -19,7 +19,6 @@ import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettySslInstrumenter; import io.opentelemetry.instrumentation.netty.v4_1.internal.client.NettyClientHandlerFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class NettyClientSingletons { @@ -40,7 +39,7 @@ public final class NettyClientSingletons { DefaultHttpClientInstrumenterBuilder builder = NettyClientInstrumenterBuilderFactory.create( "io.opentelemetry.netty-4.1", GlobalOpenTelemetry.get()) - .configure(AgentCommonConfig.get()); + .configure(GlobalOpenTelemetry.get()); NettyClientInstrumenterFactory factory = new NettyClientInstrumenterFactory( builder, diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java index 9c89189bd2ba..d7a6b7924571 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java @@ -17,7 +17,7 @@ public final class NettyServerSingletons { NettyServerTelemetryBuilder builder = NettyServerTelemetry.builder(GlobalOpenTelemetry.get()); NettyServerInstrumenterBuilderUtil.getBuilderExtractor() .apply(builder) - .configure(AgentCommonConfig.get()); + .configure(GlobalOpenTelemetry.get()); if (DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "general", "http", "server", "emit_telemetry/development") .orElse(false)) { diff --git a/instrumentation/ratpack/ratpack-1.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackSingletons.java b/instrumentation/ratpack/ratpack-1.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackSingletons.java index 8c0adac4ba75..b9944ef88b56 100644 --- a/instrumentation/ratpack/ratpack-1.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackSingletons.java +++ b/instrumentation/ratpack/ratpack-1.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_7/RatpackSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.ratpack.v1_7.internal.ContextHolder; import io.opentelemetry.instrumentation.ratpack.v1_7.internal.OpenTelemetryHttpClient; import io.opentelemetry.instrumentation.ratpack.v1_7.internal.RatpackClientInstrumenterBuilderFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import ratpack.exec.Execution; public final class RatpackSingletons { @@ -22,7 +21,7 @@ public final class RatpackSingletons { new OpenTelemetryHttpClient( RatpackClientInstrumenterBuilderFactory.create( "io.opentelemetry.ratpack-1.7", GlobalOpenTelemetry.get()) - .configure(AgentCommonConfig.get()) + .configure(GlobalOpenTelemetry.get()) .build()); } diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java index 9b590bdf2811..11e3c842fe42 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java @@ -17,7 +17,6 @@ import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyClientInstrumenterFactory; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumentationFlag; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpClientInstrumenters; import reactor.netty.http.client.HttpClientRequest; @@ -48,7 +47,7 @@ public final class ReactorNettySingletons { DefaultHttpClientInstrumenterBuilder builder = NettyClientInstrumenterBuilderFactory.create( INSTRUMENTATION_NAME, GlobalOpenTelemetry.get()) - .configure(AgentCommonConfig.get()); + .configure(GlobalOpenTelemetry.get()); NettyClientInstrumenterFactory instrumenterFactory = new NettyClientInstrumenterFactory( builder, diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index 4cbc119aa64a..64b7d65d05a7 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -21,7 +21,6 @@ import io.opentelemetry.instrumentation.servlet.internal.ServletInstrumenterBuilder; import io.opentelemetry.instrumentation.servlet.internal.ServletRequestContext; import io.opentelemetry.instrumentation.servlet.internal.ServletResponseContext; -import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.ArrayList; import java.util.HashSet; @@ -84,7 +83,7 @@ public Instrumenter, ServletResponseContext Instrumenter create( DefaultHttpClientInstrumenterBuilder builder, Consumer> builderCustomizer) { return builder - .configure(AgentCommonConfig.get()) + .configure(GlobalOpenTelemetry.get()) .setBuilderCustomizer(builderCustomizer) .build(); } diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/JavaagentHttpServerInstrumenters.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/JavaagentHttpServerInstrumenters.java index b27cefbfa3a0..5219e82a00bf 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/JavaagentHttpServerInstrumenters.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/JavaagentHttpServerInstrumenters.java @@ -48,7 +48,7 @@ public static Instrumenter create( DefaultHttpServerInstrumenterBuilder builder, Consumer> builderCustomizer) { return builder - .configure(AgentCommonConfig.get()) + .configure(GlobalOpenTelemetry.get()) .setBuilderCustomizer(builderCustomizer) .build(); } From aa1574eda28e08c54463a795c79d267512915af0 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 19:30:59 -0800 Subject: [PATCH 12/73] delete --- .../DefaultHttpClientInstrumenterBuilder.java | 1 + .../DefaultHttpServerInstrumenterBuilder.java | 1 + .../config/internal/CommonConfig.java | 186 ------------------ .../web/RestTemplateInstrumentation.java | 1 + .../webflux/WebClientBeanPostProcessor.java | 2 + ...bMvc5InstrumentationAutoConfiguration.java | 1 + .../properties/InstrumentationConfigUtil.java | 12 +- .../web/RestClientBeanPostProcessor.java | 1 + ...bMvc6InstrumentationAutoConfiguration.java | 1 + .../bootstrap/internal/AgentCommonConfig.java | 22 --- .../config/ConfigPropertiesBridgeTest.java | 128 ------------ 11 files changed, 13 insertions(+), 343 deletions(-) delete mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java delete mode 100644 javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentCommonConfig.java delete mode 100644 javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridgeTest.java diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java index 34881f795598..23ac0f34ffab 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java @@ -35,6 +35,7 @@ import java.util.Collection; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import java.util.function.UnaryOperator; import javax.annotation.Nullable; diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java index d0128a5c2621..7c0a1f06793d 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java @@ -31,6 +31,7 @@ import java.util.Collection; import java.util.List; import java.util.Objects; +import java.util.function.Consumer; import java.util.function.UnaryOperator; import javax.annotation.Nullable; diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java deleted file mode 100644 index abf1485fd3c4..000000000000 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/CommonConfig.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.api.incubator.config.internal; - -import static java.util.Collections.emptyList; -import static java.util.Collections.emptyMap; - -import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; -import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; -import io.opentelemetry.instrumentation.api.internal.HttpConstants; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Supplier; -import javax.annotation.Nullable; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public final class CommonConfig { - - private final PeerServiceResolver peerServiceResolver; - private final List clientRequestHeaders; - private final List clientResponseHeaders; - private final List serverRequestHeaders; - private final List serverResponseHeaders; - private final Set knownHttpRequestMethods; - private final EnduserConfig enduserConfig; - private final boolean statementSanitizationEnabled; - private final boolean sqlCommenterEnabled; - private final boolean emitExperimentalHttpClientTelemetry; - private final boolean emitExperimentalHttpServerTelemetry; - private final boolean redactQueryParameters; - private final String loggingTraceIdKey; - private final String loggingSpanIdKey; - private final String loggingTraceFlagsKey; - - interface ValueProvider { - @Nullable - T get(ConfigProvider configProvider); - } - - public CommonConfig(InstrumentationConfig config) { - peerServiceResolver = - PeerServiceResolver.create( - getFromConfigProviderOrFallback( - config, - InstrumentationConfigUtil::peerServiceMapping, - emptyMap(), - () -> - config.getMap("otel.instrumentation.common.peer-service-mapping", emptyMap()))); - - clientRequestHeaders = - getFromConfigProviderOrFallback( - config, - InstrumentationConfigUtil::httpClientRequestCapturedHeaders, - emptyList(), - () -> config.getList("otel.instrumentation.http.client.capture-request-headers")); - clientResponseHeaders = - getFromConfigProviderOrFallback( - config, - InstrumentationConfigUtil::httpClientResponseCapturedHeaders, - emptyList(), - () -> config.getList("otel.instrumentation.http.client.capture-response-headers")); - serverRequestHeaders = - getFromConfigProviderOrFallback( - config, - InstrumentationConfigUtil::httpServerRequestCapturedHeaders, - emptyList(), - () -> config.getList("otel.instrumentation.http.server.capture-request-headers")); - serverResponseHeaders = - getFromConfigProviderOrFallback( - config, - InstrumentationConfigUtil::httpServerResponseCapturedHeaders, - emptyList(), - () -> config.getList("otel.instrumentation.http.server.capture-response-headers")); - knownHttpRequestMethods = - new HashSet<>( - config.getList( - "otel.instrumentation.http.known-methods", - new ArrayList<>(HttpConstants.KNOWN_METHODS))); - statementSanitizationEnabled = - config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true); - sqlCommenterEnabled = - config.getBoolean( - "otel.instrumentation.common.experimental.db-sqlcommenter.enabled", false); - emitExperimentalHttpClientTelemetry = - config.getBoolean("otel.instrumentation.http.client.emit-experimental-telemetry", false); - redactQueryParameters = - config.getBoolean( - "otel.instrumentation.http.client.experimental.redact-query-parameters", true); - emitExperimentalHttpServerTelemetry = - config.getBoolean("otel.instrumentation.http.server.emit-experimental-telemetry", false); - enduserConfig = new EnduserConfig(config); - loggingTraceIdKey = - config.getString( - "otel.instrumentation.common.logging.trace-id", LoggingContextConstants.TRACE_ID); - loggingSpanIdKey = - config.getString( - "otel.instrumentation.common.logging.span-id", LoggingContextConstants.SPAN_ID); - loggingTraceFlagsKey = - config.getString( - "otel.instrumentation.common.logging.trace-flags", LoggingContextConstants.TRACE_FLAGS); - } - - public PeerServiceResolver getPeerServiceResolver() { - return peerServiceResolver; - } - - public List getClientRequestHeaders() { - return clientRequestHeaders; - } - - public List getClientResponseHeaders() { - return clientResponseHeaders; - } - - public List getServerRequestHeaders() { - return serverRequestHeaders; - } - - public List getServerResponseHeaders() { - return serverResponseHeaders; - } - - public Set getKnownHttpRequestMethods() { - return knownHttpRequestMethods; - } - - public EnduserConfig getEnduserConfig() { - return enduserConfig; - } - - public boolean isStatementSanitizationEnabled() { - return statementSanitizationEnabled; - } - - public boolean isSqlCommenterEnabled() { - return sqlCommenterEnabled; - } - - public boolean shouldEmitExperimentalHttpClientTelemetry() { - return emitExperimentalHttpClientTelemetry; - } - - public boolean shouldEmitExperimentalHttpServerTelemetry() { - return emitExperimentalHttpServerTelemetry; - } - - public boolean redactQueryParameters() { - return redactQueryParameters; - } - - public String getTraceIdKey() { - return loggingTraceIdKey; - } - - public String getSpanIdKey() { - return loggingSpanIdKey; - } - - public String getTraceFlagsKey() { - return loggingTraceFlagsKey; - } - - private static T getFromConfigProviderOrFallback( - InstrumentationConfig config, - ValueProvider getFromConfigProvider, - T defaultValue, - Supplier fallback) { - ConfigProvider configProvider = config.getConfigProvider(); - if (configProvider != null) { - T value = getFromConfigProvider.get(configProvider); - return value != null ? value : defaultValue; - } - // fallback doesn't return null, so we can safely call it - return fallback.get(); - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java index ca4c0c97c466..9af545d9d6ce 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java @@ -25,6 +25,7 @@ static RestTemplate addIfNotPresent( ClientHttpRequestInterceptor instrumentationInterceptor = InstrumentationConfigUtil.configureClientBuilder( + openTelemetry, config, SpringWebTelemetry.builder(openTelemetry), WebTelemetryUtil.getBuilderExtractor()) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java index 9b501c410be3..9ad8b3529fcd 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java @@ -35,6 +35,7 @@ final class WebClientBeanPostProcessor implements BeanPostProcessor { static SpringWebfluxClientTelemetry getWebfluxClientTelemetry( OpenTelemetry openTelemetry, InstrumentationConfig config) { return InstrumentationConfigUtil.configureClientBuilder( + openTelemetry, config, SpringWebfluxClientTelemetry.builder(openTelemetry), SpringWebfluxBuilderUtil.getClientBuilderExtractor()) @@ -44,6 +45,7 @@ static SpringWebfluxClientTelemetry getWebfluxClientTelemetry( static SpringWebfluxServerTelemetry getWebfluxServerTelemetry( OpenTelemetry openTelemetry, InstrumentationConfig config) { return InstrumentationConfigUtil.configureServerBuilder( + openTelemetry, config, SpringWebfluxServerTelemetry.builder(openTelemetry), SpringWebfluxBuilderUtil.getServerBuilderExtractor()) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java index 73d3f657504c..f85cfd618084 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java @@ -30,6 +30,7 @@ public class SpringWebMvc5InstrumentationAutoConfiguration { @Bean Filter otelWebMvcFilter(OpenTelemetry openTelemetry, InstrumentationConfig config) { return InstrumentationConfigUtil.configureServerBuilder( + openTelemetry, config, SpringWebMvcTelemetry.builder(openTelemetry), SpringMvcBuilderUtil.getBuilderExtractor()) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java index 683529a18b29..e6ad42498344 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java @@ -6,9 +6,9 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import java.util.function.Function; @@ -21,26 +21,24 @@ private InstrumentationConfigUtil() {} @CanIgnoreReturnValue public static T configureClientBuilder( + OpenTelemetry openTelemetry, InstrumentationConfig config, T builder, Function> getBuilder) { - getBuilder.apply(builder).configure(getConfig(config)); + getBuilder.apply(builder).configure(openTelemetry); return builder; } @CanIgnoreReturnValue public static T configureServerBuilder( + OpenTelemetry openTelemetry, InstrumentationConfig config, T builder, Function> getBuilder) { - getBuilder.apply(builder).configure(getConfig(config)); + getBuilder.apply(builder).configure(openTelemetry); return builder; } - private static CommonConfig getConfig(InstrumentationConfig config) { - return new CommonConfig(config); - } - public static boolean isStatementSanitizationEnabled(InstrumentationConfig config, String key) { return config.getBoolean( key, config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java index 9ef5b7f19194..a8fbe8ed9e03 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java @@ -57,6 +57,7 @@ private static RestClient addRestClientInterceptorIfNotPresent( static ClientHttpRequestInterceptor getInterceptor( OpenTelemetry openTelemetry, InstrumentationConfig config) { return InstrumentationConfigUtil.configureClientBuilder( + openTelemetry, config, SpringWebTelemetry.builder(openTelemetry), WebTelemetryUtil.getBuilderExtractor()) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java index b8653d4d3936..debe1c62cfe4 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java @@ -30,6 +30,7 @@ public class SpringWebMvc6InstrumentationAutoConfiguration { @Bean Filter otelWebMvcFilter(OpenTelemetry openTelemetry, InstrumentationConfig config) { return InstrumentationConfigUtil.configureServerBuilder( + openTelemetry, config, SpringWebMvcTelemetry.builder(openTelemetry), SpringMvcBuilderUtil.getBuilderExtractor()) diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentCommonConfig.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentCommonConfig.java deleted file mode 100644 index e5ee4b396871..000000000000 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentCommonConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.bootstrap.internal; - -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public class AgentCommonConfig { - private AgentCommonConfig() {} - - private static final CommonConfig instance = new CommonConfig(AgentInstrumentationConfig.get()); - - public static CommonConfig get() { - return instance; - } -} diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridgeTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridgeTest.java deleted file mode 100644 index 6adba8deacfd..000000000000 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridgeTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.tooling.config; - -import static java.util.Arrays.asList; -import static java.util.Collections.emptyMap; -import static org.assertj.core.api.Assertions.assertThat; - -import io.opentelemetry.instrumentation.api.incubator.config.internal.CommonConfig; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ClientModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalGeneralInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalHttpInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalPeerInstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.InstrumentationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ServerModel; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ServiceMappingModel; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Stream; -import org.assertj.core.api.InstanceOfAssertFactories; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; - -/** - * common config that is read from declarative config or config properties in a different way - * - *

cannot test CommonConfig in its own module, because there is no implementation of - * InstrumentationConfig in that module - */ -class ConfigPropertiesBridgeTest { - - public static Stream emptyGeneralConfig() { - OpenTelemetryConfigurationModel emptyModel = - new OpenTelemetryConfigurationModel() - .withAdditionalProperty("instrumentation/development", new InstrumentationModel()); - - DefaultConfigProperties configProperties = DefaultConfigProperties.createFromMap(emptyMap()); - - return Stream.of( - Arguments.of("config properties", new ConfigPropertiesBridge(configProperties, null)), - Arguments.of( - "declarative config", - new ConfigPropertiesBridge(configProperties, SdkConfigProvider.create(emptyModel)))); - } - - @ParameterizedTest(name = "{0}") - @MethodSource("emptyGeneralConfig") - void testEmptyGeneralConfig(String name, InstrumentationConfig config) { - CommonConfig commonConfig = new CommonConfig(config); - assertThat(commonConfig.getPeerServiceResolver()).extracting("mapping").isEqualTo(emptyMap()); - assertThat(commonConfig.getClientRequestHeaders()).isEmpty(); - assertThat(commonConfig.getServerRequestHeaders()).isEmpty(); - assertThat(commonConfig.getClientResponseHeaders()).isEmpty(); - assertThat(commonConfig.getServerResponseHeaders()).isEmpty(); - } - - public static Stream fullGeneralConfig() { - InstrumentationModel model = - new InstrumentationModel() - .withGeneral( - new ExperimentalGeneralInstrumentationModel() - .withPeer( - new ExperimentalPeerInstrumentationModel() - .withServiceMapping( - asList( - new ServiceMappingModel() - .withService("cats-service") - .withPeer("1.2.3.4"), - new ServiceMappingModel() - .withService("dogs-api") - .withPeer("dogs-abcdef123.serverlessapis.com")))) - .withHttp( - new ExperimentalHttpInstrumentationModel() - .withClient( - new ClientModel() - .withRequestCapturedHeaders(asList("header1", "header2")) - .withResponseCapturedHeaders(asList("header3", "header4"))) - .withServer( - new ServerModel() - .withRequestCapturedHeaders(asList("header5", "header6")) - .withResponseCapturedHeaders(asList("header7", "header8"))))); - OpenTelemetryConfigurationModel emptyModel = - new OpenTelemetryConfigurationModel() - .withAdditionalProperty("instrumentation/development", model); - - DefaultConfigProperties configProperties = - DefaultConfigProperties.createFromMap(getProperties()); - - return Stream.of( - Arguments.of("config properties", new ConfigPropertiesBridge(configProperties, null)), - Arguments.of( - "declarative config", - new ConfigPropertiesBridge(configProperties, SdkConfigProvider.create(emptyModel)))); - } - - private static Map getProperties() { - Map properties = new HashMap<>(); - properties.put( - "otel.instrumentation.common.peer-service-mapping", - "1.2.3.4=cats-service,dogs-abcdef123.serverlessapis.com=dogs-api"); - properties.put("otel.instrumentation.http.client.capture-request-headers", "header1,header2"); - properties.put("otel.instrumentation.http.client.capture-response-headers", "header3,header4"); - properties.put("otel.instrumentation.http.server.capture-request-headers", "header5,header6"); - properties.put("otel.instrumentation.http.server.capture-response-headers", "header7,header8"); - return properties; - } - - @ParameterizedTest(name = "{0}") - @MethodSource("fullGeneralConfig") - void testFullGeneralConfig(String name, InstrumentationConfig config) { - CommonConfig commonConfig = new CommonConfig(config); - assertThat(commonConfig.getPeerServiceResolver()) - .extracting("mapping", InstanceOfAssertFactories.MAP) - .containsOnlyKeys("1.2.3.4", "dogs-abcdef123.serverlessapis.com"); - assertThat(commonConfig.getClientRequestHeaders()).containsExactly("header1", "header2"); - assertThat(commonConfig.getClientResponseHeaders()).containsExactly("header3", "header4"); - assertThat(commonConfig.getServerRequestHeaders()).containsExactly("header5", "header6"); - assertThat(commonConfig.getServerResponseHeaders()).containsExactly("header7", "header8"); - } -} From aa770b1f46407df7cec9ecd927c61e3d66fd8f85 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 19:53:23 -0800 Subject: [PATCH 13/73] Fix compilation errors: wrap HttpConstants.KNOWN_METHODS in HashSet constructor The DeclarativeConfigUtil.getList().map(HashSet::new).orElse() pattern produces Optional>, but HttpConstants.KNOWN_METHODS is a Set. Wrapping it in 'new HashSet<>()' fixes the type mismatch. Fixes compilation errors in: - AgentServletInstrumenterBuilder - Servlet2SpanNameExtractor - HttpUrlConnectionSingletons - ElasticsearchRestJavaagentInstrumenterFactory - HttpSpanDecorator (camel-2.20) - AwsLambdaEventsInstrumenterFactory --- .../v2_2/internal/AwsLambdaEventsInstrumenterFactory.java | 2 +- .../apachecamel/decorators/HttpSpanDecorator.java | 2 +- .../rest/ElasticsearchRestJavaagentInstrumenterFactory.java | 2 +- .../httpurlconnection/HttpUrlConnectionSingletons.java | 2 +- .../instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java | 2 +- .../servlet/AgentServletInstrumenterBuilder.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java b/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java index b229864895b4..b225ac64401a 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java +++ b/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java @@ -38,7 +38,7 @@ public static AwsLambdaFunctionInstrumenter createInstrumenter( private static Set getKnownHttpMethods(OpenTelemetry openTelemetry) { return DeclarativeConfigUtil.getList(openTelemetry, "general", "http", "known_methods") .map(HashSet::new) - .orElse(HttpConstants.KNOWN_METHODS); + .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } private static String spanName(AwsLambdaRequest input) { diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java index ae193a0281ea..f03d3feb98e3 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java @@ -58,7 +58,7 @@ private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "general", "http", "known_methods") .map(HashSet::new) - .orElse(HttpConstants.KNOWN_METHODS); + .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } protected static String getHttpMethod(Exchange exchange, Endpoint endpoint) { diff --git a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java index 784e2bbf3097..2f907b310921 100644 --- a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java +++ b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java @@ -41,6 +41,6 @@ private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "general", "http", "known_methods") .map(HashSet::new) - .orElse(HttpConstants.KNOWN_METHODS); + .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } } diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java index 57c8a697a828..cf79d64d548e 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java @@ -45,7 +45,7 @@ private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "general", "http", "known_methods") .map(HashSet::new) - .orElse(HttpConstants.KNOWN_METHODS); + .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } private HttpUrlConnectionSingletons() {} diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java index e12a0de38947..07d497cc80af 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java @@ -28,7 +28,7 @@ private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "general", "http", "known_methods") .map(HashSet::new) - .orElse(HttpConstants.KNOWN_METHODS); + .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } @Override diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index 64b7d65d05a7..742307bdc7b7 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -104,6 +104,6 @@ private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "general", "http", "known_methods") .map(HashSet::new) - .orElse(HttpConstants.KNOWN_METHODS); + .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } } From 2c161910665f1b3e9e240d615264fd060a057e36 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 11 Dec 2025 20:14:25 -0800 Subject: [PATCH 14/73] Fix compilation errors after API changes 1. rxjava-3.0: Fixed import - changed package from v3 to v3_0 TracingAssembly is in io.opentelemetry.instrumentation.rxjava.v3_0 not v3 2. aws-lambda-events: Updated createInstrumenter calls - Removed third parameter (HttpConstants.KNOWN_METHODS) - Method signature changed to only accept (OpenTelemetry, String) - The known methods are now retrieved internally by the factory - Removed unused HttpConstants imports from both v2_2 and v3_11 --- .../awslambdaevents/v2_2/TracingRequestWrapperBase.java | 3 +-- .../awslambdaevents/v3_11/TracingRequestWrapperBase.java | 3 +-- .../instrumentation/rxjava/v3_0/TracingAssemblyActivation.java | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java index a34faa73f4eb..92f9b61bd770 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java @@ -7,7 +7,6 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; -import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; @@ -49,7 +48,7 @@ protected TracingRequestWrapperBase(BiFunction, Object> parameterMap openTelemetrySdk, WrapperConfiguration.flushTimeout(), AwsLambdaEventsInstrumenterFactory.createInstrumenter( - openTelemetrySdk, INSTRUMENTATION_NAME, HttpConstants.KNOWN_METHODS)); + openTelemetrySdk, INSTRUMENTATION_NAME)); this.wrappedLambda = wrappedLambda; this.targetMethod = wrappedLambda.getRequestTargetMethod(); this.parameterMapper = parameterMapper; diff --git a/instrumentation/aws-lambda/aws-lambda-events-3.11/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v3_11/TracingRequestWrapperBase.java b/instrumentation/aws-lambda/aws-lambda-events-3.11/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v3_11/TracingRequestWrapperBase.java index 5b72ded55821..46d8aaad6e41 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-3.11/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v3_11/TracingRequestWrapperBase.java +++ b/instrumentation/aws-lambda/aws-lambda-events-3.11/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v3_11/TracingRequestWrapperBase.java @@ -7,7 +7,6 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; -import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrappedLambda; @@ -49,7 +48,7 @@ protected TracingRequestWrapperBase(BiFunction, Object> parameterMap openTelemetrySdk, WrapperConfiguration.flushTimeout(), AwsLambdaEventsInstrumenterFactory.createInstrumenter( - openTelemetrySdk, INSTRUMENTATION_NAME, HttpConstants.KNOWN_METHODS)); + openTelemetrySdk, INSTRUMENTATION_NAME)); this.wrappedLambda = wrappedLambda; this.targetMethod = wrappedLambda.getRequestTargetMethod(); this.parameterMapper = parameterMapper; diff --git a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java index c4e53a108923..8bd5bbd5ce9f 100644 --- a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java @@ -7,7 +7,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import io.opentelemetry.instrumentation.rxjava.v3.TracingAssembly; +import io.opentelemetry.instrumentation.rxjava.v3_0.TracingAssembly; import java.util.concurrent.atomic.AtomicBoolean; public final class TracingAssemblyActivation { From 420bbe39debe0c013a0e1ca2f81fe741ebfd89bb Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 09:58:49 -0800 Subject: [PATCH 15/73] fix java/general prefix --- .../config/internal/DeclarativeConfigUtil.java | 2 +- .../apachecamel/decorators/DbSpanDecorator.java | 2 +- .../cassandra/v4_4/CassandraSingletons.java | 2 +- .../clickhouse/common/ClickHouseDbRequest.java | 2 +- .../couchbase/v2_0/CouchbaseQuerySanitizer.java | 2 +- .../geode/GeodeDbAttributesGetter.java | 2 +- .../graphql/v12_0/GraphqlSingletons.java | 6 +++--- .../graphql/v20_0/GraphqlSingletons.java | 10 +++++----- .../instrumentation/hibernate/OperationNameUtil.java | 2 +- .../influxdb/v2_4/InfluxDbRequest.java | 2 +- .../mdc/v1_1/JbossExtLogRecordInstrumentation.java | 12 ++++++------ .../instrumentation/jdbc/JdbcSingletons.java | 2 +- .../jedis/v1_4/JedisDbAttributesGetter.java | 2 +- .../instrumentation/jedis/v3_0/JedisRequest.java | 2 +- .../instrumentation/jedis/v4_0/JedisRequest.java | 2 +- .../lettuce/v5_0/LettuceDbAttributesGetter.java | 2 +- .../instrumentation/lettuce/v5_1/TracingHolder.java | 2 +- .../v2_7/SpanDecoratingContextDataInjector.java | 6 +++--- .../log4j/mdc/v1_2/LoggingEventInstrumentation.java | 6 +++--- .../logback/mdc/v1_0/LogbackSingletons.java | 6 +++--- .../mdc/v1_0/LoggingEventInstrumentation.java | 2 +- .../methods/MethodInstrumentationModule.java | 4 ++-- .../instrumentation/r2dbc/v1_0/R2dbcSingletons.java | 2 +- .../instrumentation/redisson/RedissonRequest.java | 2 +- .../servlet/AgentServletInstrumenterBuilder.java | 2 +- .../instrumentation/servlet/BaseServletHelper.java | 2 +- .../batch/v3_0/SpringBatchInstrumentationConfig.java | 4 ++-- .../v6_0/EnduserAttributesCapturerSingletons.java | 6 +++--- ...ngSecurityConfigServletInstrumentationModule.java | 6 +++--- ...ngSecurityConfigWebFluxInstrumentationModule.java | 6 +++--- .../v4_0/redis/VertxRedisClientAttributesGetter.java | 2 +- 31 files changed, 56 insertions(+), 56 deletions(-) diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java index 5bbd5fcbe4bd..8281ed7b366c 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -80,7 +80,7 @@ private static DeclarativeConfigProperties getConfigNode( if (instrumentationConfig == null) { return empty(); } - DeclarativeConfigProperties node = instrumentationConfig.getStructured("java", empty()); + DeclarativeConfigProperties node = instrumentationConfig; for (int i = 0; i < propertyPath.length - 1; i++) { node = node.getStructured(propertyPath[i], empty()); } diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java index e235c7a34e88..af6970acb3e0 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java @@ -41,7 +41,7 @@ class DbSpanDecorator extends BaseSpanDecorator { private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)); private final String component; diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java index aaf63ea6e4bd..d7f68774df1d 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java @@ -15,7 +15,7 @@ final class CassandraSingletons { CassandraTelemetry.builder(GlobalOpenTelemetry.get()) .setStatementSanitizationEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)) .build(); diff --git a/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java b/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java index dd6679d7ef7f..ce0129733297 100644 --- a/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java +++ b/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java @@ -18,7 +18,7 @@ public abstract class ClickHouseDbRequest { private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)); public static ClickHouseDbRequest create( diff --git a/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java b/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java index 9e6386326174..e2e01d3aa215 100644 --- a/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java +++ b/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java @@ -20,7 +20,7 @@ public final class CouchbaseQuerySanitizer { private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)); @Nullable private static final Class QUERY_CLASS; diff --git a/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java b/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java index 75688010fc86..94e2f9433316 100644 --- a/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java +++ b/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java @@ -17,7 +17,7 @@ final class GeodeDbAttributesGetter implements DbClientAttributesGetter onExit( String traceIdKey = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); String spanIdKey = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "span_id") + GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") .orElse(LoggingContextConstants.SPAN_ID); String traceFlagsKey = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_flags") .orElse(LoggingContextConstants.TRACE_FLAGS); if (value.containsKey(traceIdKey) diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java index f613c9f4cc0c..65bc02157a6a 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java @@ -116,7 +116,7 @@ private static SqlCommenter configureSqlCommenter() { .getBoolean( "otel.instrumentation.jdbc.experimental.sqlcommenter.enabled", DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "sqlcommenter/development") + GlobalOpenTelemetry.get(), "java", "common", "db", "sqlcommenter/development") .orElse(false))); SqlCommenterCustomizerHolder.getCustomizer().customize(builder); return builder.build(); diff --git a/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java b/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java index ddb739e0ba31..82dcda5f6e6d 100644 --- a/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java +++ b/instrumentation/jedis/jedis-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/v1_4/JedisDbAttributesGetter.java @@ -16,7 +16,7 @@ final class JedisDbAttributesGetter implements DbClientAttributesGetter args) { diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java index 2318cb85e9ec..9a6db6b720b1 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java @@ -22,7 +22,7 @@ final class LettuceDbAttributesGetter private static final RedisCommandSanitizer sanitizer = RedisCommandSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)); @SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java index f2e619cad612..aa1de476e133 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java @@ -22,7 +22,7 @@ public final class TracingHolder { LettuceTelemetry.builder(GlobalOpenTelemetry.get()) .setStatementSanitizationEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)) .setEncodingSpanEventsEnabled(CAPTURE_COMMAND_ENCODING_EVENTS) .build() diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java index f73bc3f87508..67bb5418a7e5 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java @@ -28,14 +28,14 @@ public final class SpanDecoratingContextDataInjector implements ContextDataInjec AgentInstrumentationConfig.get() .getBoolean("otel.instrumentation.log4j-context-data.add-baggage", false); private static final String TRACE_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); private static final String SPAN_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "span_id") + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") .orElse(LoggingContextConstants.SPAN_ID); private static final String TRACE_FLAGS_KEY = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_flags") .orElse(LoggingContextConstants.TRACE_FLAGS); private static final StringMap staticContextData = getStaticContextData(); diff --git a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java index 2f3198a16f47..272972c0bc08 100644 --- a/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java +++ b/instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java @@ -59,15 +59,15 @@ public static Object onExit( } String traceIdKey = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); String spanIdKey = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "span_id") + GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") .orElse(LoggingContextConstants.SPAN_ID); String traceFlagsKey = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_flags") .orElse(LoggingContextConstants.TRACE_FLAGS); boolean traceId = traceIdKey.equals(key); boolean spanId = spanIdKey.equals(key); diff --git a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java index e39309a70184..aecff7990267 100644 --- a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java +++ b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java @@ -18,14 +18,14 @@ public final class LogbackSingletons { AgentInstrumentationConfig.get() .getBoolean("otel.instrumentation.logback-mdc.add-baggage", false); private static final String TRACE_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); private static final String SPAN_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "general", "logging", "span_id") + DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") .orElse(LoggingContextConstants.SPAN_ID); private static final String TRACE_FLAGS_KEY = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "trace_flags") + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_flags") .orElse(LoggingContextConstants.TRACE_FLAGS); public static final VirtualField CONTEXT = diff --git a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java index 58d1a6f86f65..36de3f755cce 100644 --- a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java +++ b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LoggingEventInstrumentation.java @@ -67,7 +67,7 @@ public static Map onExit( String traceIdKey = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "general", "logging", "trace_id") + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); if (contextData != null && contextData.containsKey(traceIdKey)) { // Assume already instrumented event if traceId is present. diff --git a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java index 6b87f8c7890b..368207fd3527 100644 --- a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java +++ b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java @@ -35,7 +35,7 @@ public MethodInstrumentationModule() { private static List createInstrumentations() { // First try structured declarative config (YAML format) Optional> structured = - DeclarativeConfigUtil.getStructuredList(GlobalOpenTelemetry.get(), "methods", "include") + DeclarativeConfigUtil.getStructuredList(GlobalOpenTelemetry.get(), "java", "methods", "include") .map(MethodsConfig::parseDeclarativeConfig); if (structured.isPresent()) { return structured.get(); @@ -53,7 +53,7 @@ private static List createInstrumentations() { } private static Optional> parseConfigProperties() { - return DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "methods", "include") + return DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "methods", "include") .map(MethodsConfigurationParser::parse) .map( classMethodsToTrace -> diff --git a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java index d5f0158a28e1..31702c5b9d7b 100644 --- a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java +++ b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java @@ -44,7 +44,7 @@ public final class R2dbcSingletons { .getBoolean( "otel.instrumentation.r2dbc.experimental.sqlcommenter.enabled", DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "sqlcommenter/development") + GlobalOpenTelemetry.get(), "java", "common", "db", "sqlcommenter/development") .orElse(false))); Experimental.customizeSqlCommenter( builder, diff --git a/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java b/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java index bd91f89c13a0..912cd4bd3d8a 100644 --- a/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java +++ b/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java @@ -32,7 +32,7 @@ public abstract class RedissonRequest { private static final RedisCommandSanitizer sanitizer = RedisCommandSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)); public static RedissonRequest create(InetSocketAddress address, Object command) { diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index 742307bdc7b7..0295a8261255 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -74,7 +74,7 @@ public Instrumenter, ServletResponseContext> contextCustomizer : contextCustomizers) { diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java index 54bc4ecaeba2..0625f051b486 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java @@ -169,7 +169,7 @@ private void captureRequestParameters(Span serverSpan, REQUEST request) { */ private void captureEnduserId(Span serverSpan, REQUEST request) { if (!DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "enduser", "id", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "enduser", "id", "enabled") .orElse(false)) { return; } diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java index 834ef755a25b..69f1dfb800a3 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java @@ -14,12 +14,12 @@ public final class SpringBatchInstrumentationConfig { // the item level instrumentation is very chatty so it's disabled by default private static final boolean ITEM_TRACING_ENABLED = - DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "spring_batch", "item", "enabled") + DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "java", "spring_batch", "item", "enabled") .orElse(false); private static final boolean CREATE_ROOT_SPAN_FOR_CHUNK = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "spring_batch", "chunk/development", "new_trace") + GlobalOpenTelemetry.get(), "java", "spring_batch", "chunk/development", "new_trace") .orElse(false); public static String instrumentationName() { diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java index 65769b612781..170bdbb0db2f 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java @@ -25,15 +25,15 @@ private static EnduserAttributesCapturer createEndUserAttributesCapturerFromConf EnduserAttributesCapturer capturer = new EnduserAttributesCapturer(); capturer.setEnduserIdEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "enduser", "id", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "enduser", "id", "enabled") .orElse(false)); capturer.setEnduserRoleEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "enduser", "role", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "enduser", "role", "enabled") .orElse(false)); capturer.setEnduserScopeEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "enduser", "scope", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "enduser", "scope", "enabled") .orElse(false)); String rolePrefix = 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 264e6474da7a..ccebc14e4a0e 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 @@ -45,11 +45,11 @@ public boolean defaultEnabled(ConfigProperties config) { private static boolean isAnyEnduserAttributeEnabled() { var otel = GlobalOpenTelemetry.get(); - return DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "id", "enabled") + return DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "id", "enabled") .orElse(false) - || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "role", "enabled") + || DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "role", "enabled") .orElse(false) - || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "scope", "enabled") + || DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "scope", "enabled") .orElse(false); } 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 88d7ceed7a8d..630774ef20d0 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 @@ -42,11 +42,11 @@ public boolean defaultEnabled(ConfigProperties config) { private static boolean isAnyEnduserAttributeEnabled() { var otel = GlobalOpenTelemetry.get(); - return DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "id", "enabled") + return DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "id", "enabled") .orElse(false) - || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "role", "enabled") + || DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "role", "enabled") .orElse(false) - || DeclarativeConfigUtil.getBoolean(otel, "general", "enduser", "scope", "enabled") + || DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "scope", "enabled") .orElse(false); } diff --git a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java index 4855fff05082..85f17f4c228d 100644 --- a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java +++ b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java @@ -20,7 +20,7 @@ public enum VertxRedisClientAttributesGetter private static final RedisCommandSanitizer sanitizer = RedisCommandSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") .orElse(true)); @SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues From 987e596ea509e7bf5f8701a6db9a6f57123b26a0 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 10:51:39 -0800 Subject: [PATCH 16/73] category1 --- .../couchbase/v2_0/CouchbaseSingletons.java | 7 +++--- .../grpc/v1_6/GrpcSingletons.java | 22 ++++++++++-------- .../instrumentation/jaxrs/JaxrsConfig.java | 8 ++++--- .../kafkaclients/v0_11/KafkaSingletons.java | 12 ++++++---- .../kafkastreams/KafkaStreamsSingletons.java | 7 +++--- .../lettuce/v5_1/TracingHolder.java | 12 ++++++---- .../micrometer/v1_5/MicrometerSingletons.java | 17 ++++++++------ .../oshi/MetricsRegistration.java | 7 +++--- .../v2_8/telemetry/PulsarSingletons.java | 7 +++--- .../rabbitmq/RabbitSingletons.java | 7 +++--- .../kafka/v1_0/ReactorKafkaSingletons.java | 7 +++--- .../v1_0/ReactorNettySingletons.java | 7 +++--- .../spring/batch/v3_0/job/JobSingletons.java | 7 +++--- .../v4_1/SpringIntegrationSingletons.java | 17 ++++++++------ .../kafka/v2_7/SpringKafkaSingletons.java | 15 ++++++------ .../EnduserAttributesCapturerSingletons.java | 23 +++++++++++++------ .../kafka/v3_6/VertxKafkaSingletons.java | 7 +++--- 17 files changed, 113 insertions(+), 76 deletions(-) diff --git a/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSingletons.java b/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSingletons.java index 2da19976743f..14c29e41b2f2 100644 --- a/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSingletons.java +++ b/instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseSingletons.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.couchbase.v2_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; @@ -13,7 +14,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class CouchbaseSingletons { @@ -35,8 +35,9 @@ public final class CouchbaseSingletons { CouchbaseRequestInfo.init(context, couchbaseRequest)) .addOperationMetrics(DbClientMetrics.get()); - if (AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.couchbase.experimental-span-attributes", false)) { + if (DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "couchbase", "experimental_span_attributes") + .orElse(false)) { builder.addAttributesExtractor(new ExperimentalAttributesExtractor()); } diff --git a/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java b/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java index 987e55d0116f..c421693d6547 100644 --- a/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java +++ b/instrumentation/grpc-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grpc/v1_6/GrpcSingletons.java @@ -13,10 +13,10 @@ import io.grpc.ServerBuilder; import io.grpc.ServerInterceptor; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry; import io.opentelemetry.instrumentation.grpc.v1_6.internal.ContextStorageBridge; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -38,19 +38,23 @@ public final class GrpcSingletons { static { boolean emitMessageEvents = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.grpc.emit-message-events", true); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "grpc", "emit_message_events") + .orElse(true); boolean experimentalSpanAttributes = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.grpc.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "grpc", "experimental_span_attributes") + .orElse(false); List clientRequestMetadata = - AgentInstrumentationConfig.get() - .getList("otel.instrumentation.grpc.capture-metadata.client.request", emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "grpc", "capture_metadata", "client", "request") + .orElse(emptyList()); List serverRequestMetadata = - AgentInstrumentationConfig.get() - .getList("otel.instrumentation.grpc.capture-metadata.server.request", emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "grpc", "capture_metadata", "server", "request") + .orElse(emptyList()); GrpcTelemetry telemetry = GrpcTelemetry.builder(GlobalOpenTelemetry.get()) diff --git a/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsConfig.java b/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsConfig.java index 3457cfba7f24..596b46bde44a 100644 --- a/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsConfig.java +++ b/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsConfig.java @@ -5,13 +5,15 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; public final class JaxrsConfig { public static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.jaxrs.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "jaxrs", "experimental_span_attributes") + .orElse(false); private JaxrsConfig() {} } diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java index fa181e8dbb24..84690e5fe715 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java @@ -6,12 +6,12 @@ package io.opentelemetry.javaagent.instrumentation.kafkaclients.v0_11; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProducerRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import org.apache.kafka.clients.producer.RecordMetadata; @@ -19,8 +19,9 @@ public final class KafkaSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.kafka-clients-0.11"; private static final boolean PRODUCER_PROPAGATION_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.producer-propagation.enabled", true); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "kafka", "producer_propagation", "enabled") + .orElse(true); private static final Instrumenter PRODUCER_INSTRUMENTER; private static final Instrumenter CONSUMER_RECEIVE_INSTRUMENTER; @@ -31,8 +32,9 @@ public final class KafkaSingletons { new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") + .orElse(false)) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); PRODUCER_INSTRUMENTER = instrumenterFactory.createProducerInstrumenter(); diff --git a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java index b39a610a3a6d..b33ca1185823 100644 --- a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java +++ b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.kafkastreams; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class KafkaStreamsSingletons { @@ -20,8 +20,9 @@ public final class KafkaStreamsSingletons { new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") + .orElse(false)) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) .createConsumerProcessInstrumenter(); diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java index aa1de476e133..efab918ceef6 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java @@ -9,14 +9,18 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.lettuce.v5_1.LettuceTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class TracingHolder { private static final boolean CAPTURE_COMMAND_ENCODING_EVENTS = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.lettuce.experimental.command-encoding-events.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "lettuce", + "experimental", + "command_encoding_events", + "enabled") + .orElse(false); public static final Tracing TRACING = LettuceTelemetry.builder(GlobalOpenTelemetry.get()) diff --git a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java index bba50e52d4a2..c5863559af87 100644 --- a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java +++ b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java @@ -7,10 +7,9 @@ import io.micrometer.core.instrument.MeterRegistry; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry; import io.opentelemetry.instrumentation.micrometer.v1_5.internal.OpenTelemetryInstrument; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.Iterator; public final class MicrometerSingletons { @@ -18,17 +17,21 @@ public final class MicrometerSingletons { private static final MeterRegistry METER_REGISTRY; static { - InstrumentationConfig config = AgentInstrumentationConfig.get(); METER_REGISTRY = OpenTelemetryMeterRegistry.builder(GlobalOpenTelemetry.get()) .setPrometheusMode( - config.getBoolean("otel.instrumentation.micrometer.prometheus-mode.enabled", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "micrometer", "prometheus_mode", "enabled") + .orElse(false)) .setBaseTimeUnit( TimeUnitParser.parseConfigValue( - config.getString("otel.instrumentation.micrometer.base-time-unit"))) + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "java", "micrometer", "base_time_unit") + .orElse(null))) .setMicrometerHistogramGaugesEnabled( - config.getBoolean( - "otel.instrumentation.micrometer.histogram-gauges.enabled", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "micrometer", "histogram_gauges", "enabled") + .orElse(false)) .build(); } diff --git a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java index 742e20909781..b900e639156e 100644 --- a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java +++ b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/MetricsRegistration.java @@ -6,9 +6,9 @@ package io.opentelemetry.javaagent.instrumentation.oshi; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.oshi.ProcessMetrics; import io.opentelemetry.instrumentation.oshi.SystemMetrics; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -23,8 +23,9 @@ public static void register() { observables.addAll(SystemMetrics.registerObservers(GlobalOpenTelemetry.get())); // ProcessMetrics don't follow the spec - if (AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.oshi.experimental-metrics.enabled", false)) { + if (DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "oshi", "experimental_metrics", "enabled") + .orElse(false)) { observables.addAll(ProcessMetrics.registerObservers(GlobalOpenTelemetry.get())); } Thread cleanupTelemetry = new Thread(() -> MetricsRegistration.closeObservables(observables)); diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java index c26022efea02..7120a59b250c 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java @@ -10,6 +10,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter; @@ -25,7 +26,6 @@ import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; import io.opentelemetry.instrumentation.api.internal.Timer; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.pulsar.v2_8.VirtualFieldStore; import java.util.List; @@ -143,8 +143,9 @@ private static Instrumenter createProducerInstrumenter() { ServerAttributesExtractor.create(new PulsarNetClientAttributesGetter())) .addOperationMetrics(MessagingProducerMetrics.get()); - if (AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.pulsar.experimental-span-attributes", false)) { + if (DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "pulsar", "experimental_span_attributes") + .orElse(false)) { builder.addAttributesExtractor(ExperimentalProducerAttributesExtractor.INSTANCE); } diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java index c8af3a8784d6..ec101fe02787 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java @@ -11,6 +11,7 @@ import com.rabbitmq.client.GetResponse; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.ContextKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesGetter; @@ -19,7 +20,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.util.ArrayList; import java.util.List; @@ -27,8 +27,9 @@ public final class RabbitSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.rabbitmq.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "rabbitmq", "experimental_span_attributes") + .orElse(false); private static final String instrumentationName = "io.opentelemetry.rabbitmq-2.7"; private static final Instrumenter channelInstrumenter = createChannelInstrumenter(false); diff --git a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java index e965f84a05d5..c3fa83a177dc 100644 --- a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java +++ b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.reactor.kafka.v1_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; final class ReactorKafkaSingletons { @@ -20,8 +20,9 @@ final class ReactorKafkaSingletons { new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") + .orElse(false)) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) .createConsumerProcessInstrumenter(); diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java index 11e3c842fe42..82ad6061c8bc 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java @@ -9,6 +9,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.util.VirtualField; @@ -17,7 +18,6 @@ import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyClientInstrumenterFactory; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumentationFlag; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.JavaagentHttpClientInstrumenters; import reactor.netty.http.client.HttpClientRequest; import reactor.netty.http.client.HttpClientResponse; @@ -27,8 +27,9 @@ public final class ReactorNettySingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.reactor-netty-1.0"; private static final boolean connectionTelemetryEnabled = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.reactor-netty.connection-telemetry.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "reactor_netty", "connection_telemetry", "enabled") + .orElse(false); private static final Instrumenter INSTRUMENTER; private static final NettyConnectionInstrumenter CONNECTION_INSTRUMENTER; diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/job/JobSingletons.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/job/JobSingletons.java index 1f75b22ea1b1..c9d181a0aaa9 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/job/JobSingletons.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/job/JobSingletons.java @@ -9,17 +9,18 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import org.springframework.batch.core.JobExecution; public class JobSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.spring-batch.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "spring_batch", "experimental_span_attributes") + .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java index 19cbd73fcb2e..e4278c9de476 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java @@ -8,8 +8,8 @@ import static java.util.Collections.singletonList; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.spring.integration.v4_1.SpringIntegrationTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.util.List; import org.springframework.messaging.support.ChannelInterceptor; @@ -17,17 +17,20 @@ public final class SpringIntegrationSingletons { private static final List PATTERNS = - AgentInstrumentationConfig.get() - .getList( - "otel.instrumentation.spring-integration.global-channel-interceptor-patterns", - singletonList("*")); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "spring_integration", + "global_channel_interceptor_patterns") + .orElse(singletonList("*")); private static final ChannelInterceptor INTERCEPTOR = SpringIntegrationTelemetry.builder(GlobalOpenTelemetry.get()) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) .setProducerSpanEnabled( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.spring-integration.producer.enabled", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "spring_integration", "producer", "enabled") + .orElse(false)) .build() .newChannelInterceptor(); diff --git a/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java b/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java index 1fd566dd5659..3f6547355d59 100644 --- a/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java +++ b/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java @@ -6,23 +6,26 @@ package io.opentelemetry.javaagent.instrumentation.spring.kafka.v2_7; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry; import io.opentelemetry.instrumentation.spring.kafka.v2_7.internal.SpringKafkaErrorCauseExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class SpringKafkaSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-kafka-2.7"; + private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") + .orElse(false); + private static final SpringKafkaTelemetry TELEMETRY = SpringKafkaTelemetry.builder(GlobalOpenTelemetry.get()) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) - .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + .setCaptureExperimentalSpanAttributes(CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) .build(); @@ -32,9 +35,7 @@ public final class SpringKafkaSingletons { KafkaInstrumenterFactory factory = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) - .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + .setCaptureExperimentalSpanAttributes(CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) .setErrorCauseExtractor(SpringKafkaErrorCauseExtractor.INSTANCE); diff --git a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java index 170bdbb0db2f..5bcd567420d5 100644 --- a/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java +++ b/instrumentation/spring/spring-security-config-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/security/config/v6_0/EnduserAttributesCapturerSingletons.java @@ -8,7 +8,6 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.spring.security.config.v6_0.EnduserAttributesCapturer; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public class EnduserAttributesCapturerSingletons { @@ -37,17 +36,27 @@ private static EnduserAttributesCapturer createEndUserAttributesCapturerFromConf .orElse(false)); String rolePrefix = - AgentInstrumentationConfig.get() - .getString( - "otel.instrumentation.spring-security.enduser.role.granted-authority-prefix"); + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), + "java", + "spring_security", + "enduser", + "role", + "granted_authority_prefix") + .orElse(null); if (rolePrefix != null) { capturer.setRoleGrantedAuthorityPrefix(rolePrefix); } String scopePrefix = - AgentInstrumentationConfig.get() - .getString( - "otel.instrumentation.spring-security.enduser.scope.granted-authority-prefix"); + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), + "java", + "spring_security", + "enduser", + "scope", + "granted_authority_prefix") + .orElse(null); if (scopePrefix != null) { capturer.setScopeGrantedAuthorityPrefix(scopePrefix); } diff --git a/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java b/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java index 44947e2723d7..64f97ecbeace 100644 --- a/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java +++ b/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java @@ -6,11 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.vertx.kafka.v3_6; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class VertxKafkaSingletons { @@ -25,8 +25,9 @@ public final class VertxKafkaSingletons { new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") + .orElse(false)) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); BATCH_PROCESS_INSTRUMENTER = factory.createBatchProcessInstrumenter(); From b42e1ff3fc4e2c11b563ab74fe59a205b7348234 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 11:08:04 -0800 Subject: [PATCH 17/73] another batch --- .../executors/ExecutorMatchers.java | 12 ++-- .../instrumentation/jdbc/JdbcSingletons.java | 57 +++++++++++++------ .../HttpJspPageInstrumentationSingletons.java | 7 ++- ...ationContextInstrumentationSingletons.java | 7 ++- .../KubernetesClientSingletons.java | 10 +++- .../lettuce/v4_0/LettuceSingletons.java | 11 +++- .../lettuce/v5_0/LettuceSingletons.java | 11 +++- .../v3_1/MongoInstrumentationSingletons.java | 16 +++--- .../v3_7/MongoInstrumentationSingletons.java | 16 +++--- .../v4_0/MongoInstrumentationSingletons.java | 16 +++--- .../v3_3/MongoInstrumentationSingletons.java | 16 +++--- .../v4_0/client/NettyClientSingletons.java | 12 ++-- .../netty/v4_1/NettyClientSingletons.java | 13 +++-- .../r2dbc/v1_0/R2dbcSingletons.java | 42 +++++++++----- .../rabbitmq/RabbitInstrumenterHelper.java | 7 ++- .../AgentServletInstrumenterBuilder.java | 16 ++++-- .../servlet/BaseServletHelper.java | 21 ++++--- 17 files changed, 179 insertions(+), 111 deletions(-) diff --git a/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java b/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java index 717f088e4fcd..ea5722d7e0b9 100644 --- a/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java +++ b/instrumentation/executors/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/executors/ExecutorMatchers.java @@ -12,7 +12,8 @@ import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.named; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; @@ -98,16 +99,17 @@ final class ExecutorMatchers { "scala.concurrent.Future$InternalCallbackExecutor$", "scala.concurrent.impl.ExecutionContextImpl")); combined.addAll( - AgentInstrumentationConfig.get() - .getList("otel.instrumentation.executors.include", emptyList())); + DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "executors", "include") + .orElse(emptyList())); INSTRUMENTED_EXECUTOR_NAMES = Collections.unmodifiableSet(combined); INSTRUMENTED_EXECUTOR_PREFIXES = Collections.singletonList("slick.util.AsyncExecutor$"); } static ElementMatcher.Junction executorNameMatcher() { - if (AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.executors.include-all", false)) { + if (DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "executors", "include_all") + .orElse(false)) { return any(); } diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java index 65bc02157a6a..14ec8d1e1ad9 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java @@ -19,7 +19,6 @@ import io.opentelemetry.instrumentation.jdbc.internal.DbRequest; import io.opentelemetry.instrumentation.jdbc.internal.JdbcAttributesGetter; import io.opentelemetry.instrumentation.jdbc.internal.JdbcInstrumenterFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.sqlcommenter.SqlCommenterCustomizerHolder; import io.opentelemetry.javaagent.bootstrap.jdbc.DbInfo; import java.sql.Connection; @@ -43,32 +42,44 @@ public final class JdbcSingletons { JdbcAttributesGetter.INSTANCE, PeerServiceResolver.create(GlobalOpenTelemetry.get())); CAPTURE_QUERY_PARAMETERS = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.jdbc.experimental.capture-query-parameters", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "jdbc", + "experimental", + "capture_query_parameters") + .orElse(false); STATEMENT_INSTRUMENTER = JdbcInstrumenterFactory.createStatementInstrumenter( GlobalOpenTelemetry.get(), Collections.singletonList(peerServiceExtractor), true, - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.jdbc.statement-sanitizer.enabled", - DeclarativeConfigUtil.getBoolean( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "jdbc", "statement_sanitizer", "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), - "general", + "java", "db", "statement_sanitizer", - "enabled") - .orElse(true)), + "enabled")) + .orElse(true), CAPTURE_QUERY_PARAMETERS); TRANSACTION_INSTRUMENTER = JdbcInstrumenterFactory.createTransactionInstrumenter( GlobalOpenTelemetry.get(), Collections.singletonList(peerServiceExtractor), - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.jdbc.experimental.transaction.enabled", false)); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "jdbc", + "experimental", + "transaction", + "enabled") + .orElse(false)); } public static Instrumenter transactionInstrumenter() { @@ -112,12 +123,22 @@ private static boolean isWrapperInternal(T object, Class private static SqlCommenter configureSqlCommenter() { SqlCommenterBuilder builder = SqlCommenter.builder(); builder.setEnabled( - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.jdbc.experimental.sqlcommenter.enabled", - DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "sqlcommenter/development") - .orElse(false))); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "jdbc", + "experimental", + "sqlcommenter", + "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "sqlcommenter/development")) + .orElse(false)); SqlCommenterCustomizerHolder.getCustomizer().customize(builder); return builder.build(); } diff --git a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java index fd8c74030f81..9a1c497c51b3 100644 --- a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java +++ b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java @@ -10,10 +10,10 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.net.URI; import java.net.URISyntaxException; @@ -25,8 +25,9 @@ public class HttpJspPageInstrumentationSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.jsp.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "jsp", "experimental_span_attributes") + .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java index ddb24d33023a..1712e8a68d64 100644 --- a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java +++ b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java @@ -8,10 +8,10 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import javax.annotation.Nullable; import org.apache.jasper.JspCompilationContext; @@ -19,8 +19,9 @@ public class JspCompilationContextInstrumentationSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.jsp.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "jsp", "experimental_span_attributes") + .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientSingletons.java b/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientSingletons.java index 3cf79071ccd0..2c9aa06593d4 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientSingletons.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientSingletons.java @@ -10,16 +10,20 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import okhttp3.Request; public class KubernetesClientSingletons { private static final Instrumenter> INSTRUMENTER; private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.kubernetes-client.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "kubernetes_client", + "experimental_span_attributes") + .orElse(false); private static final ContextPropagators CONTEXT_PROPAGATORS; static { diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java index b5dc54f6372d..5352ea115bd2 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSingletons.java @@ -11,6 +11,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.ContextKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; @@ -20,7 +21,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class LettuceSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.lettuce-4.0"; @@ -58,8 +58,13 @@ public final class LettuceSingletons { netAttributesGetter, PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addAttributesExtractor(new LettuceConnectAttributesExtractor()) .setEnabled( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.lettuce.connection-telemetry.enabled", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "lettuce", + "connection_telemetry", + "enabled") + .orElse(false)) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java index 63ffea7ba4c8..2f4290e76581 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSingletons.java @@ -11,6 +11,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.ContextKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; @@ -20,7 +21,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class LettuceSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.lettuce-5.0"; @@ -60,8 +60,13 @@ public final class LettuceSingletons { PeerServiceResolver.create(GlobalOpenTelemetry.get()))) .addAttributesExtractor(new LettuceConnectAttributesExtractor()) .setEnabled( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.lettuce.connection-telemetry.enabled", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "lettuce", + "connection_telemetry", + "enabled") + .orElse(false)) .buildInstrumenter(SpanKindExtractor.alwaysClient()); } diff --git a/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java index 5fc2999a1c12..cbc5059f891f 100644 --- a/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -20,16 +19,17 @@ public final class MongoInstrumentationSingletons { MongoInstrumenterFactory.createInstrumenter( GlobalOpenTelemetry.get(), "io.opentelemetry.mongo-3.1", - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.mongo.statement-sanitizer.enabled", - DeclarativeConfigUtil.getBoolean( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), - "general", + "java", "db", "statement_sanitizer", - "enabled") - .orElse(true))); + "enabled")) + .orElse(true)); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java index edeb9b671b7d..e0ce0d920c79 100644 --- a/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -20,16 +19,17 @@ public final class MongoInstrumentationSingletons { MongoInstrumenterFactory.createInstrumenter( GlobalOpenTelemetry.get(), "io.opentelemetry.mongo-3.7", - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.mongo.statement-sanitizer.enabled", - DeclarativeConfigUtil.getBoolean( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), - "general", + "java", "db", "statement_sanitizer", - "enabled") - .orElse(true))); + "enabled")) + .orElse(true)); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java index de4988b81466..1df42d351b79 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -20,16 +19,17 @@ public final class MongoInstrumentationSingletons { MongoInstrumenterFactory.createInstrumenter( GlobalOpenTelemetry.get(), "io.opentelemetry.mongo-4.0", - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.mongo.statement-sanitizer.enabled", - DeclarativeConfigUtil.getBoolean( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), - "general", + "java", "db", "statement_sanitizer", - "enabled") - .orElse(true))); + "enabled")) + .orElse(true)); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java index a702c2c320eb..917cab6e3e58 100644 --- a/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.mongo.v3_1.internal.MongoInstrumenterFactory; import io.opentelemetry.instrumentation.mongo.v3_1.internal.TracingCommandListener; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class MongoInstrumentationSingletons { @@ -20,16 +19,17 @@ public final class MongoInstrumentationSingletons { MongoInstrumenterFactory.createInstrumenter( GlobalOpenTelemetry.get(), "io.opentelemetry.mongo-async-3.3", - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.mongo.statement-sanitizer.enabled", - DeclarativeConfigUtil.getBoolean( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), - "general", + "java", "db", "statement_sanitizer", - "enabled") - .orElse(true))); + "enabled")) + .orElse(true)); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java index 2d785ef3d2ab..cc99a97dc11d 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java @@ -10,6 +10,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.NettyRequest; @@ -17,16 +18,17 @@ import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyClientInstrumenterFactory; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettySslInstrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class NettyClientSingletons { private static final boolean connectionTelemetryEnabled = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.netty.connection-telemetry.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "netty", "connection_telemetry", "enabled") + .orElse(false); private static final boolean sslTelemetryEnabled = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.netty.ssl-telemetry.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "netty", "ssl_telemetry", "enabled") + .orElse(false); private static final Instrumenter INSTRUMENTER; private static final NettyConnectionInstrumenter CONNECTION_INSTRUMENTER; diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index 4001fada3d8d..a91ffebf8dd6 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -19,16 +19,17 @@ import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettyConnectionInstrumenter; import io.opentelemetry.instrumentation.netty.common.v4_0.internal.client.NettySslInstrumenter; import io.opentelemetry.instrumentation.netty.v4_1.internal.client.NettyClientHandlerFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class NettyClientSingletons { private static final boolean connectionTelemetryEnabled = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.netty.connection-telemetry.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "netty", "connection_telemetry", "enabled") + .orElse(false); private static final boolean sslTelemetryEnabled = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.netty.ssl-telemetry.enabled", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "netty", "ssl_telemetry", "enabled") + .orElse(false); private static final Instrumenter INSTRUMENTER; private static final NettyConnectionInstrumenter CONNECTION_INSTRUMENTER; @@ -54,7 +55,7 @@ public final class NettyClientSingletons { INSTRUMENTER, DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), - "general", + "java", "http", "client", "emit_telemetry/development") diff --git a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java index 31702c5b9d7b..11791f74a2d3 100644 --- a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java +++ b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java @@ -13,7 +13,6 @@ import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetryBuilder; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.internal.Experimental; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.internal.R2dbcSqlAttributesGetter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.sqlcommenter.SqlCommenterCustomizerHolder; public final class R2dbcSingletons { @@ -24,28 +23,43 @@ public final class R2dbcSingletons { R2dbcTelemetryBuilder builder = R2dbcTelemetry.builder(GlobalOpenTelemetry.get()) .setStatementSanitizationEnabled( - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.r2dbc.statement-sanitizer.enabled", - DeclarativeConfigUtil.getBoolean( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "r2dbc", + "statement_sanitizer", + "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), - "general", + "java", "db", "statement_sanitizer", - "enabled") - .orElse(true))) + "enabled")) + .orElse(true)) .addAttributesExtractor( PeerServiceAttributesExtractor.create( R2dbcSqlAttributesGetter.INSTANCE, PeerServiceResolver.create(GlobalOpenTelemetry.get()))); Experimental.setEnableSqlCommenter( builder, - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.r2dbc.experimental.sqlcommenter.enabled", - DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "sqlcommenter/development") - .orElse(false))); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "r2dbc", + "experimental", + "sqlcommenter", + "enabled") + .or( + () -> + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "sqlcommenter/development")) + .orElse(false)); Experimental.customizeSqlCommenter( builder, sqlCommenterBuilder -> diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java index 2f0c77addc01..06e19257a413 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitInstrumenterHelper.java @@ -13,7 +13,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes; import java.util.Map; @@ -21,8 +21,9 @@ public class RabbitInstrumenterHelper { static final AttributeKey RABBITMQ_COMMAND = AttributeKey.stringKey("rabbitmq.command"); private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.rabbitmq.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "rabbitmq", "experimental_span_attributes") + .orElse(false); private static final RabbitInstrumenterHelper INSTRUMENTER_HELPER = new RabbitInstrumenterHelper(); diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index 0295a8261255..bf646d80449f 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -21,7 +21,6 @@ import io.opentelemetry.instrumentation.servlet.internal.ServletInstrumenterBuilder; import io.opentelemetry.instrumentation.servlet.internal.ServletRequestContext; import io.opentelemetry.instrumentation.servlet.internal.ServletResponseContext; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -30,12 +29,17 @@ public final class AgentServletInstrumenterBuilder { private static final List CAPTURE_REQUEST_PARAMETERS = - AgentInstrumentationConfig.get() - .getList( - "otel.instrumentation.servlet.experimental.capture-request-parameters", emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "servlet", + "experimental", + "capture_request_parameters") + .orElse(emptyList()); private static final boolean CAPTURE_EXPERIMENTAL_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.servlet.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "servlet", "experimental_span_attributes") + .orElse(false); private AgentServletInstrumenterBuilder() {} diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java index 0625f051b486..5eda4dfd2fe0 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/BaseServletHelper.java @@ -23,7 +23,6 @@ import io.opentelemetry.instrumentation.servlet.internal.ServletRequestContext; import io.opentelemetry.instrumentation.servlet.internal.ServletRequestParametersExtractor; import io.opentelemetry.instrumentation.servlet.internal.ServletResponseContext; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.servlet.AppServerBridge; import io.opentelemetry.javaagent.bootstrap.servlet.ServletAsyncContext; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; @@ -34,13 +33,21 @@ public abstract class BaseServletHelper { private static final List CAPTURE_REQUEST_PARAMETERS = - AgentInstrumentationConfig.get() - .getList( - "otel.instrumentation.servlet.experimental.capture-request-parameters", emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "servlet", + "experimental", + "capture_request_parameters") + .orElse(emptyList()); private static final boolean ADD_TRACE_ID_REQUEST_ATTRIBUTE = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.servlet.experimental.add-trace-id-request-attribute", true); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "servlet", + "experimental", + "add_trace_id_request_attribute") + .orElse(true); protected final Instrumenter, ServletResponseContext> instrumenter; From dea3a2b24eef6993a0d07abc978973751344967f Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 11:12:00 -0800 Subject: [PATCH 18/73] another batch --- .../apacheelasticjob/v3_0/ElasticJobSingletons.java | 7 ++++--- .../instrumentation/apacheshenyu/v2_4/MetaDataHelper.java | 8 +++++--- .../apachecamel/decorators/BaseSpanDecorator.java | 8 +++++--- .../ElasticsearchRestJavaagentInstrumenterFactory.java | 8 ++++---- .../ElasticsearchTransportInstrumenterFactory.java | 7 ++++--- .../lettuce/v4_0/InstrumentationPoints.java | 8 +++++--- .../lettuce/v5_0/EndCommandAsyncBiFunction.java | 8 +++++--- .../lettuce/v5_0/EndConnectAsyncBiFunction.java | 8 +++++--- .../lettuce/v5_0/rx/LettuceFluxTerminationRunnable.java | 8 +++++--- 9 files changed, 42 insertions(+), 28 deletions(-) diff --git a/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java b/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java index 4baeb2c9f3d3..2d45358ad732 100644 --- a/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java +++ b/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java @@ -7,18 +7,19 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class ElasticJobSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.apache-elasticjob-3.0"; private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.apache-elasticjob.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "apache_elasticjob", "experimental_span_attributes") + .orElse(false); private static final Instrumenter INSTRUMENTER = createInstrumenter(); diff --git a/instrumentation/apache-shenyu-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheshenyu/v2_4/MetaDataHelper.java b/instrumentation/apache-shenyu-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheshenyu/v2_4/MetaDataHelper.java index 4414e6eeb628..c839e5c822ba 100644 --- a/instrumentation/apache-shenyu-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheshenyu/v2_4/MetaDataHelper.java +++ b/instrumentation/apache-shenyu-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheshenyu/v2_4/MetaDataHelper.java @@ -5,11 +5,12 @@ package io.opentelemetry.javaagent.instrumentation.apacheshenyu.v2_4; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import org.apache.shenyu.common.dto.MetaData; public final class MetaDataHelper { @@ -58,8 +59,9 @@ public final class MetaDataHelper { static { CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.apache-shenyu.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "apache_shenyu", "experimental_span_attributes") + .orElse(false); } private MetaDataHelper() {} diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/BaseSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/BaseSpanDecorator.java index 1fe50b3abbda..09ddc5ebf7f5 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/BaseSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/BaseSpanDecorator.java @@ -23,10 +23,11 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel.decorators; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection; import io.opentelemetry.javaagent.instrumentation.apachecamel.SpanDecorator; import java.util.Collections; @@ -41,8 +42,9 @@ class BaseSpanDecorator implements SpanDecorator { static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.camel.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "camel", "experimental_span_attributes") + .orElse(false); static final String DEFAULT_OPERATION_NAME = "CamelOperation"; diff --git a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java index 2f907b310921..f21817e007d5 100644 --- a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java +++ b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java @@ -11,7 +11,6 @@ import io.opentelemetry.instrumentation.api.internal.HttpConstants; import io.opentelemetry.instrumentation.elasticsearch.rest.common.v5_0.internal.ElasticsearchRestInstrumenterFactory; import io.opentelemetry.instrumentation.elasticsearch.rest.common.v5_0.internal.ElasticsearchRestRequest; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -21,8 +20,9 @@ public final class ElasticsearchRestJavaagentInstrumenterFactory { private static final boolean CAPTURE_SEARCH_QUERY = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.elasticsearch.capture-search-query", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "elasticsearch", "capture_search_query") + .orElse(false); private ElasticsearchRestJavaagentInstrumenterFactory() {} @@ -39,7 +39,7 @@ public static Instrumenter create( private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "general", "http", "known_methods") + GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/elasticsearch/elasticsearch-transport-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/ElasticsearchTransportInstrumenterFactory.java b/instrumentation/elasticsearch/elasticsearch-transport-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/ElasticsearchTransportInstrumenterFactory.java index 488ac51bb16e..e604990104b4 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/ElasticsearchTransportInstrumenterFactory.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/ElasticsearchTransportInstrumenterFactory.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.elasticsearch.transport; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientMetrics; import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientSpanNameExtractor; @@ -13,13 +14,13 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import org.elasticsearch.action.ActionResponse; public final class ElasticsearchTransportInstrumenterFactory { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.elasticsearch.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "elasticsearch", "experimental_span_attributes") + .orElse(false); public static Instrumenter create( String instrumentationName, diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/InstrumentationPoints.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/InstrumentationPoints.java index 514379987135..2fecda6d275c 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/InstrumentationPoints.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/InstrumentationPoints.java @@ -14,9 +14,10 @@ import com.lambdaworks.redis.protocol.CommandType; import com.lambdaworks.redis.protocol.ProtocolKeyword; import com.lambdaworks.redis.protocol.RedisCommand; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.EnumSet; import java.util.Set; import java.util.concurrent.CancellationException; @@ -24,8 +25,9 @@ public final class InstrumentationPoints { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.lettuce.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "lettuce", "experimental_span_attributes") + .orElse(false); private static final Set NON_INSTRUMENTING_COMMANDS = EnumSet.of(SHUTDOWN, DEBUG); diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndCommandAsyncBiFunction.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndCommandAsyncBiFunction.java index 2baad6fd0692..e26fb76b08db 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndCommandAsyncBiFunction.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndCommandAsyncBiFunction.java @@ -8,9 +8,10 @@ import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.LettuceSingletons.instrumenter; import io.lettuce.core.protocol.RedisCommand; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.concurrent.CancellationException; import java.util.function.BiFunction; @@ -27,8 +28,9 @@ public class EndCommandAsyncBiFunction implements BiFunction { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.lettuce.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "lettuce", "experimental_span_attributes") + .orElse(false); private final Context context; private final RedisCommand command; diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndConnectAsyncBiFunction.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndConnectAsyncBiFunction.java index d179605e5ccc..9c363bf8d3cd 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndConnectAsyncBiFunction.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/EndConnectAsyncBiFunction.java @@ -8,9 +8,10 @@ import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.LettuceSingletons.connectInstrumenter; import io.lettuce.core.RedisURI; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.concurrent.CancellationException; import java.util.function.BiFunction; @@ -27,8 +28,9 @@ public class EndConnectAsyncBiFunction implements BiFunction { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.lettuce.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "lettuce", "experimental_span_attributes") + .orElse(false); private final Context context; private final RedisURI redisUri; diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/rx/LettuceFluxTerminationRunnable.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/rx/LettuceFluxTerminationRunnable.java index af20fc892495..d89bea70c4e9 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/rx/LettuceFluxTerminationRunnable.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/rx/LettuceFluxTerminationRunnable.java @@ -8,9 +8,10 @@ import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.LettuceSingletons.instrumenter; import io.lettuce.core.protocol.RedisCommand; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.function.Consumer; import java.util.logging.Logger; import org.reactivestreams.Subscription; @@ -21,8 +22,9 @@ public class LettuceFluxTerminationRunnable implements Consumer>, Runnable { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.lettuce.experimental-span-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "lettuce", "experimental_span_attributes") + .orElse(false); private Context context; private int numResults; From 83e4ae8444c5a86dc32699872a621d436129cae5 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 11:18:04 -0800 Subject: [PATCH 19/73] another batch --- .../v1_0/AwsLambdaSingletons.java | 9 +- .../v2_2/AwsLambdaSingletons.java | 9 +- .../awssdk/v1_11/TracingRequestHandler.java | 10 +- .../awssdk/v2_2/AwsSdkSingletons.java | 13 +- .../ExternalAnnotationInstrumentation.java | 21 ++-- .../jul/JavaUtilLoggingHelper.java | 10 +- .../appender/v1_1/LoggingEventMapper.java | 31 +++-- .../WithSpanInstrumentation.java | 14 ++- .../log4j/appender/v1_2/LogEventMapper.java | 40 +++++-- .../log4j/appender/v2_17/Log4jHelper.java | 58 ++++++--- .../SpanDecoratingContextDataInjector.java | 6 +- .../appender/v1_0/LogbackSingletons.java | 112 ++++++++++++------ .../logback/mdc/v1_0/LogbackSingletons.java | 6 +- .../WithSpanInstrumentation.java | 10 +- .../AnnotationExcludedMethods.java | 10 +- .../reactor/v3_1/HooksInstrumentation.java | 11 +- .../v4_8/RocketMqClientHooks.java | 11 +- 17 files changed, 262 insertions(+), 119 deletions(-) diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java index 5cef0f369635..ca55dffe8cb3 100644 --- a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenterFactory; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrapperConfiguration; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.time.Duration; public final class AwsLambdaSingletons { @@ -18,10 +18,9 @@ public final class AwsLambdaSingletons { AwsLambdaFunctionInstrumenterFactory.createInstrumenter(GlobalOpenTelemetry.get()); private static final Duration FLUSH_TIMEOUT = Duration.ofMillis( - AgentInstrumentationConfig.get() - .getLong( - "otel.instrumentation.aws-lambda.flush-timeout", - WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis())); + DeclarativeConfigUtil.getInt( + GlobalOpenTelemetry.get(), "java", "aws-lambda", "flush_timeout") + .orElse((int) WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis())); public static AwsLambdaFunctionInstrumenter functionInstrumenter() { return FUNCTION_INSTRUMENTER; diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java index 58a411ca545f..3b9736198255 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java @@ -7,12 +7,12 @@ import com.amazonaws.services.lambda.runtime.events.SQSEvent; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.AwsLambdaFunctionInstrumenter; import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.WrapperConfiguration; import io.opentelemetry.instrumentation.awslambdaevents.common.v2_2.internal.AwsLambdaEventsInstrumenterFactory; import io.opentelemetry.instrumentation.awslambdaevents.common.v2_2.internal.AwsLambdaSqsInstrumenterFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.time.Duration; public final class AwsLambdaSingletons { @@ -24,10 +24,9 @@ public final class AwsLambdaSingletons { AwsLambdaSqsInstrumenterFactory.forEvent(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME); private static final Duration FLUSH_TIMEOUT = Duration.ofMillis( - AgentInstrumentationConfig.get() - .getLong( - "otel.instrumentation.aws-lambda.flush-timeout", - WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis())); + DeclarativeConfigUtil.getInt( + GlobalOpenTelemetry.get(), "java", "aws-lambda", "flush_timeout") + .orElse((int) WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis())); public static AwsLambdaFunctionInstrumenter functionInstrumenter() { return FUNCTION_INSTRUMENTER; diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java index 872c7303507a..9c0351d89daf 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java @@ -13,8 +13,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.awssdk.v1_11.AwsSdkTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; /** @@ -36,8 +36,12 @@ public class TracingRequestHandler extends RequestHandler2 { public static final RequestHandler2 tracingHandler = AwsSdkTelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.aws-sdk.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "aws-sdk", + "experimental_span_attributes") + .orElse(false)) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) 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..838c7771711e 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,9 +5,10 @@ package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry; import io.opentelemetry.instrumentation.awssdk.v2_2.internal.AbstractAwsSdkTelemetryFactory; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.util.List; @@ -33,7 +34,15 @@ protected boolean messagingReceiveInstrumentationEnabled() { @Override protected boolean getBoolean(String name, boolean defaultValue) { - return AgentInstrumentationConfig.get().getBoolean(name, defaultValue); + // Convert otel.instrumentation.xxx.yyy to java/xxx/yyy format + String converted = name.replace("otel.instrumentation.", "").replace(".", "_").replace("-", "_"); + String[] parts = converted.split("_", 2); + if (parts.length == 2) { + return DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", parts[0].replace("_", "-"), parts[1]) + .orElse(defaultValue); + } + return defaultValue; } } diff --git a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java index 5c39fc2bcbb2..1d11251abb8d 100644 --- a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java +++ b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java @@ -16,11 +16,11 @@ import static net.bytebuddy.matcher.ElementMatchers.none; import static net.bytebuddy.matcher.ElementMatchers.not; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.tooling.config.MethodsConfigurationParser; @@ -79,8 +79,11 @@ public class ExternalAnnotationInstrumentation implements TypeInstrumentation { private final ElementMatcher.Junction excludedMethodsMatcher; public ExternalAnnotationInstrumentation() { - Set additionalTraceAnnotations = - configureAdditionalTraceAnnotations(AgentInstrumentationConfig.get()); + String configString = + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "java", "external-annotations", "include") + .orElse(null); + Set additionalTraceAnnotations = configureAdditionalTraceAnnotations(configString); if (additionalTraceAnnotations.isEmpty()) { classLoaderOptimization = none(); @@ -115,8 +118,7 @@ public void transform(TypeTransformer transformer) { } // visible for testing - static Set configureAdditionalTraceAnnotations(InstrumentationConfig config) { - String configString = config.getString(TRACE_ANNOTATIONS_CONFIG); + static Set configureAdditionalTraceAnnotations(String configString) { if (configString == null) { return Collections.unmodifiableSet(new HashSet<>(DEFAULT_ANNOTATIONS)); } else if (configString.isEmpty()) { @@ -148,7 +150,12 @@ private static ElementMatcher.Junction configureExcludedMetho Map> excludedMethods = MethodsConfigurationParser.parse( - AgentInstrumentationConfig.get().getString(TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG)); + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), + "java", + "external-annotations", + "exclude_methods") + .orElse(null)); for (Map.Entry> entry : excludedMethods.entrySet()) { String className = entry.getKey(); ElementMatcher.Junction classMather = diff --git a/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java b/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java index dfc29d6ad673..45774ff15d30 100644 --- a/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java +++ b/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java @@ -13,7 +13,7 @@ import io.opentelemetry.api.logs.LogRecordBuilder; import io.opentelemetry.api.logs.Severity; import io.opentelemetry.context.Context; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.semconv.incubating.ThreadIncubatingAttributes; import java.util.concurrent.TimeUnit; import java.util.logging.Formatter; @@ -25,8 +25,12 @@ public final class JavaUtilLoggingHelper { private static final Formatter FORMATTER = new AccessibleFormatter(); private static final boolean captureExperimentalAttributes = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.java-util-logging.experimental-log-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "java-util-logging", + "experimental_log_attributes") + .orElse(false); public static void capture(Logger logger, LogRecord logRecord) { diff --git a/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java b/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java index c9df4e328c04..343000933fd8 100644 --- a/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java +++ b/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java @@ -14,8 +14,8 @@ import io.opentelemetry.api.logs.LogRecordBuilder; import io.opentelemetry.api.logs.Severity; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.internal.cache.Cache; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.semconv.incubating.ThreadIncubatingAttributes; import java.util.List; import java.util.Map; @@ -36,23 +36,34 @@ public final class LoggingEventMapper { private final List captureMdcAttributes; private static final boolean captureExperimentalAttributes = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.jboss-logmanager.experimental-log-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "jboss-logmanager", + "experimental_log_attributes") + .orElse(false); // cached as an optimization private final boolean captureAllMdcAttributes; private final boolean captureEventName = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.jboss-logmanager.experimental.capture-event-name", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "jboss-logmanager", + "experimental", + "capture_event_name") + .orElse(false); private LoggingEventMapper() { this.captureMdcAttributes = - AgentInstrumentationConfig.get() - .getList( - "otel.instrumentation.jboss-logmanager.experimental.capture-mdc-attributes", - emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "jboss-logmanager", + "experimental", + "capture_mdc_attributes") + .orElse(emptyList()); this.captureAllMdcAttributes = captureMdcAttributes.size() == 1 && captureMdcAttributes.get(0).equals("*"); } diff --git a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java index bf8c9bdfb1e9..6a3a80e8ad3f 100644 --- a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java +++ b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java @@ -14,9 +14,10 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.internal.AsmApi; @@ -54,10 +55,13 @@ class WithSpanInstrumentation implements TypeInstrumentation { // whether to check the transformed bytecode with asm CheckClassAdapter private static final boolean CHECK_CLASS = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.kotlinx-coroutines.check-class", - AgentInstrumentationConfig.get().getBoolean("otel.javaagent.debug", false)); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "kotlinx-coroutines", "check_class") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "javaagent", "debug") + .orElse(false)); private final ElementMatcher.Junction annotatedMethodMatcher; // this matcher matches all methods that should be excluded from transformation diff --git a/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java b/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java index 22c28ad19fbb..479723a267e1 100644 --- a/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java +++ b/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java @@ -13,9 +13,9 @@ import io.opentelemetry.api.logs.LogRecordBuilder; import io.opentelemetry.api.logs.Severity; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.api.internal.cache.Cache; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.semconv.CodeAttributes; import io.opentelemetry.semconv.ExceptionAttributes; import io.opentelemetry.semconv.incubating.ThreadIncubatingAttributes; @@ -48,8 +48,12 @@ public final class LogEventMapper { private static final int TRACE_INT = 5000; private static final boolean captureExperimentalAttributes = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.log4j-appender.experimental-log-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental_log_attributes") + .orElse(false); private final Map> captureMdcAttributes; @@ -57,15 +61,23 @@ public final class LogEventMapper { private final boolean captureAllMdcAttributes; private final boolean captureEventName = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.log4j-appender.experimental.capture-event-name", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_event_name") + .orElse(false); private LogEventMapper() { List captureMdcAttributes = - AgentInstrumentationConfig.get() - .getList( - "otel.instrumentation.log4j-appender.experimental.capture-mdc-attributes", - emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_mdc_attributes") + .orElse(emptyList()); this.captureMdcAttributes = captureMdcAttributes.stream() .collect(Collectors.toMap(attr -> attr, LogEventMapper::getMdcAttributeKey)); @@ -74,9 +86,13 @@ private LogEventMapper() { } boolean captureCodeAttributes = - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.log4j-appender.experimental.capture-code-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_code_attributes") + .orElse(false); public void capture( String fqcn, Category logger, Priority level, Object message, Throwable throwable) { diff --git a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java index ee35aaa184a4..bbb422227bb3 100644 --- a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java +++ b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java @@ -10,10 +10,9 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.logs.LogRecordBuilder; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.log4j.appender.v2_17.internal.ContextDataAccessor; import io.opentelemetry.instrumentation.log4j.appender.v2_17.internal.LogEventMapper; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; @@ -35,26 +34,53 @@ public final class Log4jHelper { private static final MethodHandle stackTraceMethodHandle = getStackTraceMethodHandle(); static { - InstrumentationConfig config = AgentInstrumentationConfig.get(); - captureExperimentalAttributes = - config.getBoolean("otel.instrumentation.log4j-appender.experimental-log-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental_log_attributes") + .orElse(false); boolean captureCodeAttributes = - config.getBoolean( - "otel.instrumentation.log4j-appender.experimental.capture-code-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_code_attributes") + .orElse(false); boolean captureMapMessageAttributes = - config.getBoolean( - "otel.instrumentation.log4j-appender.experimental.capture-map-message-attributes", - false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_map_message_attributes") + .orElse(false); boolean captureMarkerAttribute = - config.getBoolean( - "otel.instrumentation.log4j-appender.experimental.capture-marker-attribute", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_marker_attribute") + .orElse(false); List captureContextDataAttributes = - config.getList( - "otel.instrumentation.log4j-appender.experimental.capture-mdc-attributes", emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_mdc_attributes") + .orElse(emptyList()); boolean captureEventName = - config.getBoolean( - "otel.instrumentation.log4j-appender.experimental.capture-event-name", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "log4j-appender", + "experimental", + "capture_event_name") + .orElse(false); mapper = new LogEventMapper<>( diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java index 67bb5418a7e5..cd2d54898afa 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java @@ -13,7 +13,6 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ConfiguredResourceAttributesHolder; import java.util.List; import java.util.Map; @@ -25,8 +24,9 @@ public final class SpanDecoratingContextDataInjector implements ContextDataInjector { private static final boolean BAGGAGE_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.log4j-context-data.add-baggage", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "log4j-context-data", "add_baggage") + .orElse(false); private static final String TRACE_ID_KEY = DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); diff --git a/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java b/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java index 903605643e39..54ce7c29344d 100644 --- a/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java +++ b/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java @@ -7,10 +7,9 @@ import static java.util.Collections.emptyList; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.logback.appender.v1_0.internal.LoggingEventMapper; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.DeprecatedConfigProperties; import java.util.List; public final class LogbackSingletons { @@ -18,48 +17,93 @@ public final class LogbackSingletons { private static final LoggingEventMapper mapper; static { - InstrumentationConfig config = AgentInstrumentationConfig.get(); - boolean captureExperimentalAttributes = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental-log-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental_log_attributes") + .orElse(false); boolean captureCodeAttributes = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-code-attributes", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_code_attributes") + .orElse(false); boolean captureMarkerAttribute = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-marker-attribute", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_marker_attribute") + .orElse(false); boolean captureKeyValuePairAttributes = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-key-value-pair-attributes", - false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_key_value_pair_attributes") + .orElse(false); boolean captureLoggerContext = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-logger-context-attributes", - false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_logger_context_attributes") + .orElse(false); boolean captureTemplate = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-template", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_template") + .orElse(false); boolean captureArguments = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-arguments", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_arguments") + .orElse(false); boolean captureLogstashMarkerAttributes = - DeprecatedConfigProperties.getBoolean( - config, - "otel.instrumentation.logback-appender.experimental.capture-logstash-attributes", - "otel.instrumentation.logback-appender.experimental.capture-logstash-marker-attributes", - false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_logstash_marker_attributes") + .orElse(false); boolean captureLogstashStructuredArguments = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-logstash-structured-arguments", - false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_logstash_structured_arguments") + .orElse(false); List captureMdcAttributes = - config.getList( - "otel.instrumentation.logback-appender.experimental.capture-mdc-attributes", - emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_mdc_attributes") + .orElse(emptyList()); boolean captureEventName = - config.getBoolean( - "otel.instrumentation.logback-appender.experimental.capture-event-name", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "logback-appender", + "experimental", + "capture_event_name") + .orElse(false); mapper = LoggingEventMapper.builder() diff --git a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java index aecff7990267..d7cc9f32a3f1 100644 --- a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java +++ b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java @@ -11,12 +11,12 @@ import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.log.LoggingContextConstants; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; public final class LogbackSingletons { private static final boolean ADD_BAGGAGE = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.logback-mdc.add-baggage", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "logback-mdc", "add_baggage") + .orElse(false); private static final String TRACE_ID_KEY = DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); diff --git a/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java b/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java index c6b8fc0c83de..2011c8e791dd 100644 --- a/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java +++ b/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java @@ -17,11 +17,12 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.whereAny; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.annotation.support.async.AsyncOperationEndSupport; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.tooling.config.MethodsConfigurationParser; @@ -100,7 +101,12 @@ static ElementMatcher.Junction configureExcludedMethods() { Map> excludedMethods = MethodsConfigurationParser.parse( - AgentInstrumentationConfig.get().getString(TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG)); + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), + "java", + "opentelemetry-annotations", + "exclude_methods") + .orElse(null)); for (Map.Entry> entry : excludedMethods.entrySet()) { String className = entry.getKey(); ElementMatcher.Junction matcher = diff --git a/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java b/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java index 9bec0120fe70..c80660e8aa73 100644 --- a/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java +++ b/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java @@ -9,7 +9,8 @@ import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; import static net.bytebuddy.matcher.ElementMatchers.none; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.tooling.config.MethodsConfigurationParser; import java.util.Map; import java.util.Set; @@ -32,7 +33,12 @@ public static ElementMatcher.Junction configureExcludedMethod Map> excludedMethods = MethodsConfigurationParser.parse( - AgentInstrumentationConfig.get().getString(TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG)); + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), + "java", + "opentelemetry-instrumentation-annotations", + "exclude_methods") + .orElse(null)); for (Map.Entry> entry : excludedMethods.entrySet()) { String className = entry.getKey(); ElementMatcher.Junction matcher = diff --git a/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java b/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java index 0591db7569ea..d924ee703427 100644 --- a/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java +++ b/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java @@ -9,8 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.namedOneOf; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.reactor.v3_1.ContextPropagationOperator; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import net.bytebuddy.asm.Advice; @@ -41,8 +42,12 @@ public static class ResetOnEachOperatorAdvice { public static void postStaticInitializer() { ContextPropagationOperator.builder() .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.reactor.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "reactor", + "experimental_span_attributes") + .orElse(false)) .build() .registerOnEachOperator(); } diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java index 7c2b958ca4f9..046db35aa122 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.rocketmqclient.v4_8; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.rocketmqclient.v4_8.RocketMqTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import org.apache.rocketmq.client.hook.ConsumeMessageHook; import org.apache.rocketmq.client.hook.SendMessageHook; @@ -19,9 +19,12 @@ public final class RocketMqClientHooks { RocketMqTelemetry.builder(GlobalOpenTelemetry.get()) .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) .setCaptureExperimentalSpanAttributes( - AgentInstrumentationConfig.get() - .getBoolean( - "otel.instrumentation.rocketmq-client.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "rocketmq-client", + "experimental_span_attributes") + .orElse(false)) .build(); public static final ConsumeMessageHook CONSUME_MESSAGE_HOOK = From f32f0be878330f2c3c54a46ea8d0a45239edb12c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 11:34:31 -0800 Subject: [PATCH 20/73] compile --- .../extannotations/IncludeTest.java | 12 +------- .../ExternalAnnotationInstrumentation.java | 5 ---- .../instrumentation/jdbc/JdbcSingletons.java | 28 +++++++++---------- .../WithSpanInstrumentation.java | 2 +- .../v3_1/MongoInstrumentationSingletons.java | 14 +++++----- .../v3_7/MongoInstrumentationSingletons.java | 14 +++++----- .../v4_0/MongoInstrumentationSingletons.java | 14 +++++----- .../v3_3/MongoInstrumentationSingletons.java | 14 +++++----- .../WithSpanInstrumentation.java | 3 -- .../AnnotationExcludedMethods.java | 3 -- .../r2dbc/v1_0/R2dbcSingletons.java | 28 +++++++++---------- 11 files changed, 58 insertions(+), 79 deletions(-) diff --git a/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java b/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java index 9f717b107392..f0bb10f3818c 100644 --- a/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java +++ b/instrumentation/external-annotations/javaagent-unit-tests/src/test/java/io/opentelemetry/javaagent/instrumentation/extannotations/IncludeTest.java @@ -7,32 +7,22 @@ import static io.opentelemetry.javaagent.instrumentation.extannotations.ExternalAnnotationInstrumentation.DEFAULT_ANNOTATIONS; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.stream.Stream; -import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -@ExtendWith(MockitoExtension.class) class IncludeTest { - @Mock InstrumentationConfig config; - @ParameterizedTest @MethodSource("provideArguments") void testConfiguration(String value, List expected) { - when(config.getString("otel.instrumentation.external-annotations.include")).thenReturn(value); - - assertThat(ExternalAnnotationInstrumentation.configureAdditionalTraceAnnotations(config)) + assertThat(ExternalAnnotationInstrumentation.configureAdditionalTraceAnnotations(value)) .isEqualTo(new HashSet<>(expected)); } diff --git a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java index 1d11251abb8d..256951e99ec9 100644 --- a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java +++ b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java @@ -67,11 +67,6 @@ public class ExternalAnnotationInstrumentation implements TypeInstrumentation { "kamon.annotation.api.Trace", "org.springframework.cloud.sleuth.annotation.NewSpan"); - private static final String TRACE_ANNOTATIONS_CONFIG = - "otel.instrumentation.external-annotations.include"; - private static final String TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG = - "otel.instrumentation.external-annotations.exclude-methods"; - private final ElementMatcher.Junction classLoaderOptimization; private final ElementMatcher.Junction traceAnnotationMatcher; diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java index 14ec8d1e1ad9..f5bba72d5fb8 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcSingletons.java @@ -57,15 +57,15 @@ public final class JdbcSingletons { true, DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "jdbc", "statement_sanitizer", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "db", - "statement_sanitizer", - "enabled")) - .orElse(true), + GlobalOpenTelemetry.get(), + "java", + "db", + "statement_sanitizer", + "enabled") + .orElse(true)), CAPTURE_QUERY_PARAMETERS); TRANSACTION_INSTRUMENTER = @@ -130,15 +130,15 @@ private static SqlCommenter configureSqlCommenter() { "experimental", "sqlcommenter", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "common", - "db", - "sqlcommenter/development")) - .orElse(false)); + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "sqlcommenter/development") + .orElse(false))); SqlCommenterCustomizerHolder.getCustomizer().customize(builder); return builder.build(); } diff --git a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java index 6a3a80e8ad3f..1eb3ffea4950 100644 --- a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java +++ b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java @@ -60,7 +60,7 @@ class WithSpanInstrumentation implements TypeInstrumentation { .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "javaagent", "debug") + GlobalOpenTelemetry.get(), "java", "javaagent", "debug") // FIXME .orElse(false)); private final ElementMatcher.Junction annotatedMethodMatcher; diff --git a/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java index cbc5059f891f..35a2995d221a 100644 --- a/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_1/MongoInstrumentationSingletons.java @@ -21,15 +21,15 @@ public final class MongoInstrumentationSingletons { "io.opentelemetry.mongo-3.1", DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "db", - "statement_sanitizer", - "enabled")) - .orElse(true)); + GlobalOpenTelemetry.get(), + "java", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java index e0ce0d920c79..0ac795a4f846 100644 --- a/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-3.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v3_7/MongoInstrumentationSingletons.java @@ -21,15 +21,15 @@ public final class MongoInstrumentationSingletons { "io.opentelemetry.mongo-3.7", DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "db", - "statement_sanitizer", - "enabled")) - .orElse(true)); + GlobalOpenTelemetry.get(), + "java", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java index 1df42d351b79..a548dc04d36d 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoInstrumentationSingletons.java @@ -21,15 +21,15 @@ public final class MongoInstrumentationSingletons { "io.opentelemetry.mongo-4.0", DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "db", - "statement_sanitizer", - "enabled")) - .orElse(true)); + GlobalOpenTelemetry.get(), + "java", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java b/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java index 917cab6e3e58..5bd50ea102c4 100644 --- a/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java +++ b/instrumentation/mongo/mongo-async-3.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mongoasync/v3_3/MongoInstrumentationSingletons.java @@ -21,15 +21,15 @@ public final class MongoInstrumentationSingletons { "io.opentelemetry.mongo-async-3.3", DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "mongo", "statement_sanitizer", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "db", - "statement_sanitizer", - "enabled")) - .orElse(true)); + GlobalOpenTelemetry.get(), + "java", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))); public static final CommandListener LISTENER = new TracingCommandListener(INSTRUMENTER); diff --git a/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java b/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java index 2011c8e791dd..91dc93cd7b9e 100644 --- a/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java +++ b/instrumentation/opentelemetry-extension-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extensionannotations/WithSpanInstrumentation.java @@ -42,9 +42,6 @@ public class WithSpanInstrumentation implements TypeInstrumentation { - private static final String TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG = - "otel.instrumentation.opentelemetry-annotations.exclude-methods"; - private final ElementMatcher.Junction annotatedMethodMatcher; private final ElementMatcher.Junction annotatedParametersMatcher; // this matcher matches all methods that should be excluded from transformation diff --git a/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java b/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java index c80660e8aa73..c9305de792df 100644 --- a/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java +++ b/instrumentation/opentelemetry-instrumentation-annotations-1.16/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/instrumentationannotations/AnnotationExcludedMethods.java @@ -21,9 +21,6 @@ public final class AnnotationExcludedMethods { - private static final String TRACE_ANNOTATED_METHODS_EXCLUDE_CONFIG = - "otel.instrumentation.opentelemetry-instrumentation-annotations.exclude-methods"; - /* Returns a matcher for all methods that should be excluded from auto-instrumentation by annotation-based advices. diff --git a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java index 11791f74a2d3..7c44950a9997 100644 --- a/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java +++ b/instrumentation/r2dbc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/r2dbc/v1_0/R2dbcSingletons.java @@ -29,15 +29,15 @@ public final class R2dbcSingletons { "r2dbc", "statement_sanitizer", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "db", - "statement_sanitizer", - "enabled")) - .orElse(true)) + GlobalOpenTelemetry.get(), + "java", + "db", + "statement_sanitizer", + "enabled") + .orElse(true))) .addAttributesExtractor( PeerServiceAttributesExtractor.create( R2dbcSqlAttributesGetter.INSTANCE, @@ -51,15 +51,15 @@ public final class R2dbcSingletons { "experimental", "sqlcommenter", "enabled") - .or( + .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "common", - "db", - "sqlcommenter/development")) - .orElse(false)); + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "sqlcommenter/development") + .orElse(false))); Experimental.customizeSqlCommenter( builder, sqlCommenterBuilder -> From 4a12565da90ebd3a1c5de2f3e984aa02c2f21d13 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 11:35:45 -0800 Subject: [PATCH 21/73] spotless --- .../apacheelasticjob/v3_0/ElasticJobSingletons.java | 5 ++++- .../awssdk/v1_11/TracingRequestHandler.java | 5 +---- .../awssdk/v2_2/AwsSdkSingletons.java | 3 ++- .../apachecamel/decorators/DbSpanDecorator.java | 7 ++++++- .../cassandra/v4_4/CassandraSingletons.java | 7 ++++++- .../clickhouse/common/ClickHouseDbRequest.java | 7 ++++++- .../couchbase/v2_0/CouchbaseQuerySanitizer.java | 7 ++++++- ...lasticsearchRestJavaagentInstrumenterFactory.java | 3 +-- .../ExternalAnnotationInstrumentation.java | 5 +---- .../geode/GeodeDbAttributesGetter.java | 7 ++++++- .../graphql/v12_0/GraphqlSingletons.java | 9 +++++++-- .../graphql/v20_0/GraphqlSingletons.java | 9 +++++++-- .../instrumentation/hibernate/OperationNameUtil.java | 7 ++++++- .../influxdb/v2_4/InfluxDbRequest.java | 7 ++++++- .../instrumentation/jul/JavaUtilLoggingHelper.java | 5 +---- .../appender/v1_1/LoggingEventMapper.java | 5 +---- .../jedis/v1_4/JedisDbAttributesGetter.java | 7 ++++++- .../instrumentation/jedis/v3_0/JedisRequest.java | 7 ++++++- .../instrumentation/jedis/v4_0/JedisRequest.java | 7 ++++++- .../lettuce/v5_0/LettuceDbAttributesGetter.java | 7 ++++++- .../instrumentation/lettuce/v5_1/TracingHolder.java | 7 ++++++- .../log4j/appender/v1_2/LogEventMapper.java | 5 +---- .../log4j/appender/v2_17/Log4jHelper.java | 5 +---- .../v2_7/SpanDecoratingContextDataInjector.java | 6 ++++-- .../logback/mdc/v1_0/LogbackSingletons.java | 6 ++++-- .../methods/MethodInstrumentationModule.java | 3 ++- .../micrometer/v1_5/MicrometerSingletons.java | 12 ++++++++++-- .../reactor/v3_1/HooksInstrumentation.java | 5 +---- .../instrumentation/redisson/RedissonRequest.java | 7 ++++++- .../batch/v3_0/SpringBatchInstrumentationConfig.java | 3 ++- .../v4_1/SpringIntegrationSingletons.java | 6 +++++- .../v4_0/redis/VertxRedisClientAttributesGetter.java | 7 ++++++- 32 files changed, 139 insertions(+), 59 deletions(-) diff --git a/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java b/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java index 2d45358ad732..4f5b141c463c 100644 --- a/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java +++ b/instrumentation/apache-elasticjob-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apacheelasticjob/v3_0/ElasticJobSingletons.java @@ -18,7 +18,10 @@ public final class ElasticJobSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.apache-elasticjob-3.0"; private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "apache_elasticjob", "experimental_span_attributes") + GlobalOpenTelemetry.get(), + "java", + "apache_elasticjob", + "experimental_span_attributes") .orElse(false); private static final Instrumenter INSTRUMENTER = diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java index 9c0351d89daf..9d29ed7f0408 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java @@ -37,10 +37,7 @@ public class TracingRequestHandler extends RequestHandler2 { AwsSdkTelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "aws-sdk", - "experimental_span_attributes") + GlobalOpenTelemetry.get(), "java", "aws-sdk", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) 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 838c7771711e..21dc028f741c 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 @@ -35,7 +35,8 @@ protected boolean messagingReceiveInstrumentationEnabled() { @Override protected boolean getBoolean(String name, boolean defaultValue) { // Convert otel.instrumentation.xxx.yyy to java/xxx/yyy format - String converted = name.replace("otel.instrumentation.", "").replace(".", "_").replace("-", "_"); + String converted = + name.replace("otel.instrumentation.", "").replace(".", "_").replace("-", "_"); String[] parts = converted.split("_", 2); if (parts.length == 2) { return DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java index af6970acb3e0..dfcda922b9d6 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java @@ -41,7 +41,12 @@ class DbSpanDecorator extends BaseSpanDecorator { private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)); private final String component; diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java index d7f68774df1d..dcaa0fcba546 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraSingletons.java @@ -15,7 +15,12 @@ final class CassandraSingletons { CassandraTelemetry.builder(GlobalOpenTelemetry.get()) .setStatementSanitizationEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)) .build(); diff --git a/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java b/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java index ce0129733297..5f464a6b0110 100644 --- a/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java +++ b/instrumentation/clickhouse/clickhouse-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/clickhouse/common/ClickHouseDbRequest.java @@ -18,7 +18,12 @@ public abstract class ClickHouseDbRequest { private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)); public static ClickHouseDbRequest create( diff --git a/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java b/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java index e2e01d3aa215..da0feddf40db 100644 --- a/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java +++ b/instrumentation/couchbase/couchbase-2-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseQuerySanitizer.java @@ -20,7 +20,12 @@ public final class CouchbaseQuerySanitizer { private static final SqlStatementSanitizer sanitizer = SqlStatementSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)); @Nullable private static final Class QUERY_CLASS; diff --git a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java index f21817e007d5..4ffa8c0fd150 100644 --- a/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java +++ b/instrumentation/elasticsearch/elasticsearch-rest-common-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/ElasticsearchRestJavaagentInstrumenterFactory.java @@ -38,8 +38,7 @@ public static Instrumenter create( } private static Set getKnownHttpMethods() { - return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "java", "http", "known_methods") + return DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java index 256951e99ec9..d917852789ac 100644 --- a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java +++ b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java @@ -146,10 +146,7 @@ private static ElementMatcher.Junction configureExcludedMetho Map> excludedMethods = MethodsConfigurationParser.parse( DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), - "java", - "external-annotations", - "exclude_methods") + GlobalOpenTelemetry.get(), "java", "external-annotations", "exclude_methods") .orElse(null)); for (Map.Entry> entry : excludedMethods.entrySet()) { String className = entry.getKey(); diff --git a/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java b/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java index 94e2f9433316..ffe653209a68 100644 --- a/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java +++ b/instrumentation/geode-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/geode/GeodeDbAttributesGetter.java @@ -17,7 +17,12 @@ final class GeodeDbAttributesGetter implements DbClientAttributesGetter args) { diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java index 9a6db6b720b1..0d24562d76fb 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceDbAttributesGetter.java @@ -22,7 +22,12 @@ final class LettuceDbAttributesGetter private static final RedisCommandSanitizer sanitizer = RedisCommandSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)); @SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java index efab918ceef6..3c411ed489db 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/TracingHolder.java @@ -26,7 +26,12 @@ public final class TracingHolder { LettuceTelemetry.builder(GlobalOpenTelemetry.get()) .setStatementSanitizationEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)) .setEncodingSpanEventsEnabled(CAPTURE_COMMAND_ENCODING_EVENTS) .build() diff --git a/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java b/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java index 479723a267e1..9552ae4bd4d9 100644 --- a/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java +++ b/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java @@ -49,10 +49,7 @@ public final class LogEventMapper { private static final boolean captureExperimentalAttributes = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "log4j-appender", - "experimental_log_attributes") + GlobalOpenTelemetry.get(), "java", "log4j-appender", "experimental_log_attributes") .orElse(false); private final Map> captureMdcAttributes; diff --git a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java index bbb422227bb3..1d49a7e5bd15 100644 --- a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java +++ b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java @@ -36,10 +36,7 @@ public final class Log4jHelper { static { captureExperimentalAttributes = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "log4j-appender", - "experimental_log_attributes") + GlobalOpenTelemetry.get(), "java", "log4j-appender", "experimental_log_attributes") .orElse(false); boolean captureCodeAttributes = DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java index cd2d54898afa..36df4ffa037d 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java @@ -28,10 +28,12 @@ public final class SpanDecoratingContextDataInjector implements ContextDataInjec GlobalOpenTelemetry.get(), "java", "log4j-context-data", "add_baggage") .orElse(false); private static final String TRACE_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); private static final String SPAN_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") .orElse(LoggingContextConstants.SPAN_ID); private static final String TRACE_FLAGS_KEY = DeclarativeConfigUtil.getString( diff --git a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java index d7cc9f32a3f1..63d5ebf91c17 100644 --- a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java +++ b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java @@ -18,10 +18,12 @@ public final class LogbackSingletons { GlobalOpenTelemetry.get(), "java", "logback-mdc", "add_baggage") .orElse(false); private static final String TRACE_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "java", "common", "logging", "trace_id") .orElse(LoggingContextConstants.TRACE_ID); private static final String SPAN_ID_KEY = - DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "java", "common", "logging", "span_id") .orElse(LoggingContextConstants.SPAN_ID); private static final String TRACE_FLAGS_KEY = DeclarativeConfigUtil.getString( diff --git a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java index 368207fd3527..2137433f06bd 100644 --- a/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java +++ b/instrumentation/methods/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/MethodInstrumentationModule.java @@ -35,7 +35,8 @@ public MethodInstrumentationModule() { private static List createInstrumentations() { // First try structured declarative config (YAML format) Optional> structured = - DeclarativeConfigUtil.getStructuredList(GlobalOpenTelemetry.get(), "java", "methods", "include") + DeclarativeConfigUtil.getStructuredList( + GlobalOpenTelemetry.get(), "java", "methods", "include") .map(MethodsConfig::parseDeclarativeConfig); if (structured.isPresent()) { return structured.get(); diff --git a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java index c5863559af87..99d6fbf52226 100644 --- a/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java +++ b/instrumentation/micrometer/micrometer-1.5/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/v1_5/MicrometerSingletons.java @@ -21,7 +21,11 @@ public final class MicrometerSingletons { OpenTelemetryMeterRegistry.builder(GlobalOpenTelemetry.get()) .setPrometheusMode( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "micrometer", "prometheus_mode", "enabled") + GlobalOpenTelemetry.get(), + "java", + "micrometer", + "prometheus_mode", + "enabled") .orElse(false)) .setBaseTimeUnit( TimeUnitParser.parseConfigValue( @@ -30,7 +34,11 @@ public final class MicrometerSingletons { .orElse(null))) .setMicrometerHistogramGaugesEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "micrometer", "histogram_gauges", "enabled") + GlobalOpenTelemetry.get(), + "java", + "micrometer", + "histogram_gauges", + "enabled") .orElse(false)) .build(); } diff --git a/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java b/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java index d924ee703427..0bca5472d787 100644 --- a/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java +++ b/instrumentation/reactor/reactor-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/v3_1/HooksInstrumentation.java @@ -43,10 +43,7 @@ public static void postStaticInitializer() { ContextPropagationOperator.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "reactor", - "experimental_span_attributes") + GlobalOpenTelemetry.get(), "java", "reactor", "experimental_span_attributes") .orElse(false)) .build() .registerOnEachOperator(); diff --git a/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java b/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java index 912cd4bd3d8a..9344bd22d210 100644 --- a/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java +++ b/instrumentation/redisson/redisson-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/redisson/RedissonRequest.java @@ -32,7 +32,12 @@ public abstract class RedissonRequest { private static final RedisCommandSanitizer sanitizer = RedisCommandSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)); public static RedissonRequest create(InetSocketAddress address, Object command) { diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java index 69f1dfb800a3..264aa4719531 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/v3_0/SpringBatchInstrumentationConfig.java @@ -14,7 +14,8 @@ public final class SpringBatchInstrumentationConfig { // the item level instrumentation is very chatty so it's disabled by default private static final boolean ITEM_TRACING_ENABLED = - DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "java", "spring_batch", "item", "enabled") + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "spring_batch", "item", "enabled") .orElse(false); private static final boolean CREATE_ROOT_SPAN_FOR_CHUNK = diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java index e4278c9de476..0b7d94ba1df2 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java @@ -29,7 +29,11 @@ public final class SpringIntegrationSingletons { .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) .setProducerSpanEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "spring_integration", "producer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "spring_integration", + "producer", + "enabled") .orElse(false)) .build() .newChannelInterceptor(); diff --git a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java index 85f17f4c228d..9c9487e7436d 100644 --- a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java +++ b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientAttributesGetter.java @@ -20,7 +20,12 @@ public enum VertxRedisClientAttributesGetter private static final RedisCommandSanitizer sanitizer = RedisCommandSanitizer.create( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "db", "statement_sanitizer", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "db", + "statement_sanitizer", + "enabled") .orElse(true)); @SuppressWarnings("deprecation") // using deprecated DbSystemIncubatingValues From cb138f79063da811130224d93e2e5cbe2ae791d6 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 11:50:08 -0800 Subject: [PATCH 22/73] up --- .../v1_0/AwsLambdaSingletons.java | 2 +- .../v2_2/AwsLambdaSingletons.java | 2 +- .../awssdk/v1_11/TracingRequestHandler.java | 2 +- .../awssdk/v2_2/AwsSdkSingletons.java | 13 ++++------- .../ExternalAnnotationInstrumentation.java | 4 ++-- .../jul/JavaUtilLoggingHelper.java | 2 +- .../appender/v1_1/LoggingEventMapper.java | 6 ++--- .../WithSpanInstrumentation.java | 2 +- .../log4j/appender/v1_2/LogEventMapper.java | 2 +- .../log4j/appender/v2_17/Log4jHelper.java | 2 +- .../SpanDecoratingContextDataInjector.java | 2 +- .../appender/v1_0/LogbackSingletons.java | 22 +++++++++---------- .../logback/mdc/v1_0/LogbackSingletons.java | 2 +- 13 files changed, 29 insertions(+), 34 deletions(-) diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java index ca55dffe8cb3..1de79f61d377 100644 --- a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java +++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaSingletons.java @@ -19,7 +19,7 @@ public final class AwsLambdaSingletons { private static final Duration FLUSH_TIMEOUT = Duration.ofMillis( DeclarativeConfigUtil.getInt( - GlobalOpenTelemetry.get(), "java", "aws-lambda", "flush_timeout") + GlobalOpenTelemetry.get(), "java", "aws_lambda", "flush_timeout") .orElse((int) WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis())); public static AwsLambdaFunctionInstrumenter functionInstrumenter() { diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java index 3b9736198255..332a3f0d08cd 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdaevents/v2_2/AwsLambdaSingletons.java @@ -25,7 +25,7 @@ public final class AwsLambdaSingletons { private static final Duration FLUSH_TIMEOUT = Duration.ofMillis( DeclarativeConfigUtil.getInt( - GlobalOpenTelemetry.get(), "java", "aws-lambda", "flush_timeout") + GlobalOpenTelemetry.get(), "java", "aws_lambda", "flush_timeout") .orElse((int) WrapperConfiguration.OTEL_LAMBDA_FLUSH_TIMEOUT_DEFAULT.toMillis())); public static AwsLambdaFunctionInstrumenter functionInstrumenter() { diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java index 9d29ed7f0408..93efb6eaafb6 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java @@ -37,7 +37,7 @@ public class TracingRequestHandler extends RequestHandler2 { AwsSdkTelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "aws-sdk", "experimental_span_attributes") + GlobalOpenTelemetry.get(), "java", "aws_sdk", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) 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 21dc028f741c..ba6989fc6039 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 @@ -35,15 +35,10 @@ protected boolean messagingReceiveInstrumentationEnabled() { @Override protected boolean getBoolean(String name, boolean defaultValue) { // Convert otel.instrumentation.xxx.yyy to java/xxx/yyy format - String converted = - name.replace("otel.instrumentation.", "").replace(".", "_").replace("-", "_"); - String[] parts = converted.split("_", 2); - if (parts.length == 2) { - return DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", parts[0].replace("_", "-"), parts[1]) - .orElse(defaultValue); - } - return defaultValue; + // e.g. otel.instrumentation.aws-sdk.experimental-span-attributes -> java/aws_sdk/experimental_span_attributes + String[] parts = name.replace("otel.instrumentation.", "java.").replace("-", "_").split("\\."); + return DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), parts) + .orElse(defaultValue); } } diff --git a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java index d917852789ac..4f9e4d575365 100644 --- a/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java +++ b/instrumentation/external-annotations/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/extannotations/ExternalAnnotationInstrumentation.java @@ -76,7 +76,7 @@ public class ExternalAnnotationInstrumentation implements TypeInstrumentation { public ExternalAnnotationInstrumentation() { String configString = DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "java", "external-annotations", "include") + GlobalOpenTelemetry.get(), "java", "external_annotations", "include") .orElse(null); Set additionalTraceAnnotations = configureAdditionalTraceAnnotations(configString); @@ -146,7 +146,7 @@ private static ElementMatcher.Junction configureExcludedMetho Map> excludedMethods = MethodsConfigurationParser.parse( DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "java", "external-annotations", "exclude_methods") + GlobalOpenTelemetry.get(), "java", "external_annotations", "exclude_methods") .orElse(null)); for (Map.Entry> entry : excludedMethods.entrySet()) { String className = entry.getKey(); diff --git a/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java b/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java index 9f4e0c5944f7..25a0d8b4a2a6 100644 --- a/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java +++ b/instrumentation/java-util-logging/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jul/JavaUtilLoggingHelper.java @@ -26,7 +26,7 @@ public final class JavaUtilLoggingHelper { private static final boolean captureExperimentalAttributes = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "java-util-logging", "experimental_log_attributes") + GlobalOpenTelemetry.get(), "java", "java_util_logging", "experimental_log_attributes") .orElse(false); public static void capture(Logger logger, LogRecord logRecord) { diff --git a/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java b/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java index bd014e13805e..86bc14830a01 100644 --- a/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java +++ b/instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/LoggingEventMapper.java @@ -37,7 +37,7 @@ public final class LoggingEventMapper { private static final boolean captureExperimentalAttributes = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "jboss-logmanager", "experimental_log_attributes") + GlobalOpenTelemetry.get(), "java", "jboss_logmanager", "experimental_log_attributes") .orElse(false); // cached as an optimization @@ -47,7 +47,7 @@ public final class LoggingEventMapper { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "jboss-logmanager", + "jboss_logmanager", "experimental", "capture_event_name") .orElse(false); @@ -57,7 +57,7 @@ private LoggingEventMapper() { DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "java", - "jboss-logmanager", + "jboss_logmanager", "experimental", "capture_mdc_attributes") .orElse(emptyList()); diff --git a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java index 1eb3ffea4950..a9392ca2ced4 100644 --- a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java +++ b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java @@ -56,7 +56,7 @@ class WithSpanInstrumentation implements TypeInstrumentation { // whether to check the transformed bytecode with asm CheckClassAdapter private static final boolean CHECK_CLASS = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "kotlinx-coroutines", "check_class") + GlobalOpenTelemetry.get(), "java", "kotlinx_coroutines", "check_class") .orElseGet( () -> DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java b/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java index 9552ae4bd4d9..eb9b08bdfbc5 100644 --- a/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java +++ b/instrumentation/log4j/log4j-appender-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v1_2/LogEventMapper.java @@ -49,7 +49,7 @@ public final class LogEventMapper { private static final boolean captureExperimentalAttributes = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "log4j-appender", "experimental_log_attributes") + GlobalOpenTelemetry.get(), "java", "log4j_appender", "experimental_log_attributes") .orElse(false); private final Map> captureMdcAttributes; diff --git a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java index 1d49a7e5bd15..7470c31371b4 100644 --- a/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java +++ b/instrumentation/log4j/log4j-appender-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/appender/v2_17/Log4jHelper.java @@ -36,7 +36,7 @@ public final class Log4jHelper { static { captureExperimentalAttributes = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "log4j-appender", "experimental_log_attributes") + GlobalOpenTelemetry.get(), "java", "log4j_appender", "experimental_log_attributes") .orElse(false); boolean captureCodeAttributes = DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java index 36df4ffa037d..fec6fb12799f 100644 --- a/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java +++ b/instrumentation/log4j/log4j-context-data/log4j-context-data-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/contextdata/v2_7/SpanDecoratingContextDataInjector.java @@ -25,7 +25,7 @@ public final class SpanDecoratingContextDataInjector implements ContextDataInjector { private static final boolean BAGGAGE_ENABLED = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "log4j-context-data", "add_baggage") + GlobalOpenTelemetry.get(), "java", "log4j_context_data", "add_baggage") .orElse(false); private static final String TRACE_ID_KEY = DeclarativeConfigUtil.getString( diff --git a/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java b/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java index 54ce7c29344d..23a83c20c927 100644 --- a/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java +++ b/instrumentation/logback/logback-appender-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/appender/v1_0/LogbackSingletons.java @@ -21,14 +21,14 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental_log_attributes") .orElse(false); boolean captureCodeAttributes = DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_code_attributes") .orElse(false); @@ -36,7 +36,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_marker_attribute") .orElse(false); @@ -44,7 +44,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_key_value_pair_attributes") .orElse(false); @@ -52,7 +52,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_logger_context_attributes") .orElse(false); @@ -60,7 +60,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_template") .orElse(false); @@ -68,7 +68,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_arguments") .orElse(false); @@ -76,7 +76,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_logstash_marker_attributes") .orElse(false); @@ -84,7 +84,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_logstash_structured_arguments") .orElse(false); @@ -92,7 +92,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_mdc_attributes") .orElse(emptyList()); @@ -100,7 +100,7 @@ public final class LogbackSingletons { DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", - "logback-appender", + "logback_appender", "experimental", "capture_event_name") .orElse(false); diff --git a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java index 63d5ebf91c17..ac6a3024a9c6 100644 --- a/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java +++ b/instrumentation/logback/logback-mdc-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/logback/mdc/v1_0/LogbackSingletons.java @@ -15,7 +15,7 @@ public final class LogbackSingletons { private static final boolean ADD_BAGGAGE = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "logback-mdc", "add_baggage") + GlobalOpenTelemetry.get(), "java", "logback_mdc", "add_baggage") .orElse(false); private static final String TRACE_ID_KEY = DeclarativeConfigUtil.getString( From ebac89dd5662a7343fe6c798478f16bda8cacf10 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 12:49:09 -0800 Subject: [PATCH 23/73] springbootstarter --- .../ConfigPropertiesBackedConfigProvider.java | 7 +- ...tiesBackedDeclarativeConfigProperties.java | 11 ++- .../OpenTelemetryAutoConfiguration.java | 22 ++++-- .../properties/SpringOpenTelemetrySdk.java | 72 +++++++++++++++++++ .../tooling/OpenTelemetryInstaller.java | 2 +- 5 files changed, 98 insertions(+), 16 deletions(-) rename {javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config => declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge}/ConfigPropertiesBackedConfigProvider.java (85%) rename {javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config => declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge}/ConfigPropertiesBackedDeclarativeConfigProperties.java (96%) create mode 100644 instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringOpenTelemetrySdk.java diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedConfigProvider.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java similarity index 85% rename from javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedConfigProvider.java rename to declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java index 7aaccbf8b32b..8358057bb3d8 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedConfigProvider.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedConfigProvider.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.tooling.config; +package io.opentelemetry.instrumentation.config.bridge; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; @@ -13,9 +13,8 @@ /** * A {@link ConfigProvider} implementation backed by {@link ConfigProperties}. * - *

This is used when the user configured the agent with system properties (not YAML), so we - * create a ConfigProvider that provides access to the configuration through the declarative config - * API. + *

This is used when the user configured with system properties (not YAML), so we create a + * ConfigProvider that provides access to the configuration through the declarative config API. * *

This allows instrumentations to always use {@code ExtendedOpenTelemetry.getConfigProvider()} * regardless of whether the user started with system properties or YAML. diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java similarity index 96% rename from javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedDeclarativeConfigProperties.java rename to declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index 0101f0543f1a..2898c27e5f53 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.javaagent.tooling.config; +package io.opentelemetry.instrumentation.config.bridge; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.common.ComponentLoader; @@ -20,11 +20,10 @@ * Implementation of {@link DeclarativeConfigProperties} backed by {@link ConfigProperties}. * *

This allows instrumentations to use the declarative config API even when the user configured - * the agent with system properties (not YAML). It uses a dynamic bridge approach that tracks the - * navigation path and only resolves to system properties at the leaf node when a value is actually - * requested. + * with system properties (not YAML). It uses a dynamic bridge approach that tracks the navigation + * path and only resolves to system properties at the leaf node when a value is actually requested. */ -final class ConfigPropertiesBackedDeclarativeConfigProperties +public final class ConfigPropertiesBackedDeclarativeConfigProperties implements DeclarativeConfigProperties { private final ConfigProperties configProperties; @@ -84,7 +83,7 @@ private static final class StructuredListMapping { * @param configProperties the ConfigProperties to read from * @return a new DeclarativeConfigProperties instance */ - static DeclarativeConfigProperties createInstrumentationConfig( + public static DeclarativeConfigProperties createInstrumentationConfig( ConfigProperties configProperties) { return new ConfigPropertiesBackedDeclarativeConfigProperties( configProperties, Collections.emptyList()); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index bbb40a59a2cb..d54c25f5a8c2 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -13,6 +13,7 @@ import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; +import io.opentelemetry.instrumentation.config.bridge.ConfigPropertiesBackedConfigProvider; import io.opentelemetry.instrumentation.config.bridge.DeclarativeConfigPropertiesBridgeBuilder; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.DeclarativeConfigDisabled; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.DeclarativeConfigEnabled; @@ -24,6 +25,7 @@ import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelSpringProperties; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringConfigProperties; +import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.SpringOpenTelemetrySdk; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.DistroComponentProvider; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.DistroVersionResourceProvider; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.resources.ResourceCustomizerProvider; @@ -124,15 +126,25 @@ public AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk( } @Bean - public OpenTelemetry openTelemetry( - AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { + public OpenTelemetrySdk openTelemetry( + AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk, + ConfigProvider configProvider) { logStart(); - return autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); + OpenTelemetrySdk sdk = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); + // Wrap the SDK to provide ConfigProvider for DeclarativeConfigUtil + // SpringOpenTelemetrySdk extends OpenTelemetrySdk and implements ExtendedOpenTelemetry + return SpringOpenTelemetrySdk.create(sdk, configProvider); + } + + @Bean + public ConfigProvider configProvider(ConfigProperties properties) { + return ConfigPropertiesBackedConfigProvider.create(properties); } @Bean - public InstrumentationConfig instrumentationConfig(ConfigProperties properties) { - return new ConfigPropertiesBridge(properties); + public InstrumentationConfig instrumentationConfig( + ConfigProperties properties, ConfigProvider configProvider) { + return new ConfigPropertiesBridge(properties, configProvider); } /** diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringOpenTelemetrySdk.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringOpenTelemetrySdk.java new file mode 100644 index 000000000000..f0110ccce230 --- /dev/null +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/SpringOpenTelemetrySdk.java @@ -0,0 +1,72 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; + +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; +import io.opentelemetry.api.incubator.config.ConfigProvider; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import java.io.Closeable; +import javax.annotation.concurrent.ThreadSafe; + +/** + * An {@link OpenTelemetrySdk} that also implements {@link ExtendedOpenTelemetry} and provides a + * {@link ConfigProvider}. + * + *

This allows instrumentations to use {@code ExtendedOpenTelemetry.getConfigProvider()} + * regardless of whether the SDK was configured with system properties or YAML. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. + */ +@ThreadSafe +public final class SpringOpenTelemetrySdk extends OpenTelemetrySdk + implements ExtendedOpenTelemetry, Closeable { + + private final ConfigProvider configProvider; + + private SpringOpenTelemetrySdk(OpenTelemetrySdk delegate, ConfigProvider configProvider) { + super( + delegate.getSdkTracerProvider(), + delegate.getSdkMeterProvider(), + delegate.getSdkLoggerProvider(), + delegate.getPropagators()); + this.configProvider = configProvider; + } + + /** + * Creates a new {@link SpringOpenTelemetrySdk} that wraps the given SDK and provides the given + * ConfigProvider. + * + * @param openTelemetrySdk the SDK to wrap + * @param configProvider the ConfigProvider to return from getConfigProvider() + * @return a new SpringOpenTelemetrySdk + */ + public static SpringOpenTelemetrySdk create( + OpenTelemetrySdk openTelemetrySdk, ConfigProvider configProvider) { + return new SpringOpenTelemetrySdk(openTelemetrySdk, configProvider); + } + + @Override + public ConfigProvider getConfigProvider() { + return configProvider; + } + + @Override + public String toString() { + return "SpringOpenTelemetrySdk{" + + "tracerProvider=" + + getSdkTracerProvider() + + ", meterProvider=" + + getSdkMeterProvider() + + ", loggerProvider=" + + getSdkLoggerProvider() + + ", propagators=" + + getPropagators() + + ", configProvider=" + + configProvider + + '}'; + } +} diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 0b2153f096de..4768ef1c4e3f 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -10,9 +10,9 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.instrumentation.config.bridge.ConfigPropertiesBackedConfigProvider; import io.opentelemetry.instrumentation.config.bridge.DeclarativeConfigPropertiesBridgeBuilder; import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess; -import io.opentelemetry.javaagent.tooling.config.ConfigPropertiesBackedConfigProvider; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; From 4ddab60a7c685ae05ee94a3c28a131a3d9fb90ff Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 12:54:59 -0800 Subject: [PATCH 24/73] runtimetelemetry --- .../java17/Java17RuntimeMetricsInstaller.java | 3 +- .../internal/RuntimeMetricsConfigUtil.java | 30 ++++++++++++------- .../java8/Java8RuntimeMetricsInstaller.java | 3 +- .../internal/RuntimeMetricsConfigUtil.java | 21 ++++++++----- .../Java17RuntimeMetricsProvider.java | 5 ++-- .../Java8RuntimeMetricsProvider.java | 5 ++-- .../RuntimeMetricsAutoConfiguration.java | 4 +-- .../RuntimeMetricsProvider.java | 3 +- 8 files changed, 42 insertions(+), 32 deletions(-) diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java17/Java17RuntimeMetricsInstaller.java b/instrumentation/runtime-telemetry/runtime-telemetry-java17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java17/Java17RuntimeMetricsInstaller.java index 0cd2cd3da663..bb5c1c61dd6d 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java17/Java17RuntimeMetricsInstaller.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java17/Java17RuntimeMetricsInstaller.java @@ -9,7 +9,6 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics; import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.RuntimeMetricsConfigUtil; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.extension.AgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; @@ -21,7 +20,7 @@ public class Java17RuntimeMetricsInstaller implements AgentListener { public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { RuntimeMetrics runtimeMetrics = RuntimeMetricsConfigUtil.configure( - RuntimeMetrics.builder(GlobalOpenTelemetry.get()), AgentInstrumentationConfig.get()); + RuntimeMetrics.builder(GlobalOpenTelemetry.get()), GlobalOpenTelemetry.get()); if (runtimeMetrics != null) { Runtime.getRuntime() .addShutdownHook( diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java index 8ddd5f5d8082..088319944fdd 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java @@ -5,7 +5,8 @@ package io.opentelemetry.instrumentation.runtimemetrics.java17.internal; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics; import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetricsBuilder; import javax.annotation.Nullable; @@ -19,18 +20,24 @@ private RuntimeMetricsConfigUtil() {} @Nullable public static RuntimeMetrics configure( - RuntimeMetricsBuilder builder, InstrumentationConfig config) { + RuntimeMetricsBuilder builder, OpenTelemetry openTelemetry) { /* By default, don't use any JFR metrics. May change this once semantic conventions are updated. If enabled, default to only the metrics not already covered by runtime-telemetry-java8 */ - boolean defaultEnabled = config.getBoolean("otel.instrumentation.common.default-enabled", true); - if (config.getBoolean("otel.instrumentation.runtime-telemetry-java17.enable-all", false)) { + boolean defaultEnabled = + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled").orElse(true); + if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry_java17", "enable_all") + .orElse(false)) { builder.enableAllFeatures(); - } else if (config.getBoolean("otel.instrumentation.runtime-telemetry-java17.enabled", false)) { + } else if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry_java17", "enabled") + .orElse(false)) { // default configuration - } else if (config.getBoolean( - "otel.instrumentation.runtime-telemetry.enabled", defaultEnabled)) { + } else if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry", "enabled") + .orElse(defaultEnabled)) { // This only uses metrics gathered by JMX builder.disableAllFeatures(); } else { @@ -38,12 +45,15 @@ public static RuntimeMetrics configure( return null; } - if (config.getBoolean( - "otel.instrumentation.runtime-telemetry.emit-experimental-telemetry", false)) { + if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry", "emit_experimental_telemetry") + .orElse(false)) { builder.emitExperimentalTelemetry(); } - if (config.getBoolean("otel.instrumentation.runtime-telemetry.capture-gc-cause", false)) { + if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry", "capture_gc_cause") + .orElse(false)) { builder.captureGcCause(); } diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java index 0713e0c6c7ef..c3041274197d 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/Java8RuntimeMetricsInstaller.java @@ -9,7 +9,6 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.RuntimeMetricsConfigUtil; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.extension.AgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; @@ -25,7 +24,7 @@ public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { RuntimeMetrics runtimeMetrics = RuntimeMetricsConfigUtil.configure( - RuntimeMetrics.builder(GlobalOpenTelemetry.get()), AgentInstrumentationConfig.get()); + RuntimeMetrics.builder(GlobalOpenTelemetry.get()), GlobalOpenTelemetry.get()); if (runtimeMetrics != null) { Runtime.getRuntime() .addShutdownHook( diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java index c0f3ef37afee..195d29a218a1 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java @@ -5,7 +5,8 @@ package io.opentelemetry.instrumentation.runtimemetrics.java8.internal; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics; import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetricsBuilder; import javax.annotation.Nullable; @@ -19,19 +20,25 @@ private RuntimeMetricsConfigUtil() {} @Nullable public static RuntimeMetrics configure( - RuntimeMetricsBuilder builder, InstrumentationConfig config) { - boolean defaultEnabled = config.getBoolean("otel.instrumentation.common.default-enabled", true); - if (!config.getBoolean("otel.instrumentation.runtime-telemetry.enabled", defaultEnabled)) { + RuntimeMetricsBuilder builder, OpenTelemetry openTelemetry) { + boolean defaultEnabled = + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled").orElse(true); + if (!DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry", "enabled") + .orElse(defaultEnabled)) { // nothing is enabled return null; } - if (config.getBoolean( - "otel.instrumentation.runtime-telemetry.emit-experimental-telemetry", false)) { + if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry", "emit_experimental_telemetry") + .orElse(false)) { builder.emitExperimentalTelemetry(); } - if (config.getBoolean("otel.instrumentation.runtime-telemetry.capture-gc-cause", false)) { + if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "runtime_telemetry", "capture_gc_cause") + .orElse(false)) { builder.captureGcCause(); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java17RuntimeMetricsProvider.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java17RuntimeMetricsProvider.java index 6518099c4bcc..275dcc8c15b0 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java17RuntimeMetricsProvider.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java17RuntimeMetricsProvider.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.runtimemetrics.java17.RuntimeMetrics; import io.opentelemetry.instrumentation.runtimemetrics.java17.internal.RuntimeMetricsConfigUtil; import javax.annotation.Nullable; @@ -29,8 +28,8 @@ public int minJavaVersion() { @Nullable @Override - public AutoCloseable start(OpenTelemetry openTelemetry, InstrumentationConfig config) { + public AutoCloseable start(OpenTelemetry openTelemetry) { logger.debug("Use runtime metrics instrumentation for Java 17+"); - return RuntimeMetricsConfigUtil.configure(RuntimeMetrics.builder(openTelemetry), config); + return RuntimeMetricsConfigUtil.configure(RuntimeMetrics.builder(openTelemetry), openTelemetry); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java8RuntimeMetricsProvider.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java8RuntimeMetricsProvider.java index 3b7f334ca815..75050a424071 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java8RuntimeMetricsProvider.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/Java8RuntimeMetricsProvider.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.runtimemetrics.java8.RuntimeMetrics; import io.opentelemetry.instrumentation.runtimemetrics.java8.internal.RuntimeMetricsConfigUtil; import javax.annotation.Nullable; @@ -29,8 +28,8 @@ public int minJavaVersion() { @Nullable @Override - public AutoCloseable start(OpenTelemetry openTelemetry, InstrumentationConfig config) { + public AutoCloseable start(OpenTelemetry openTelemetry) { logger.debug("Use runtime metrics instrumentation for Java 8"); - return RuntimeMetricsConfigUtil.configure(RuntimeMetrics.builder(openTelemetry), config); + return RuntimeMetricsConfigUtil.configure(RuntimeMetrics.builder(openTelemetry), openTelemetry); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsAutoConfiguration.java index d32c13904fdd..268e9d230e9d 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import java.util.Comparator; import java.util.Optional; @@ -45,7 +44,6 @@ public void stopMetrics() throws Exception { public void handleApplicationReadyEvent(ApplicationReadyEvent event) { ConfigurableApplicationContext applicationContext = event.getApplicationContext(); OpenTelemetry openTelemetry = applicationContext.getBean(OpenTelemetry.class); - InstrumentationConfig config = applicationContext.getBean(InstrumentationConfig.class); double version = Math.max(8, Double.parseDouble(System.getProperty("java.specification.version"))); @@ -56,7 +54,7 @@ public void handleApplicationReadyEvent(ApplicationReadyEvent event) { .findFirst(); if (metricsProvider.isPresent()) { - this.closeable = metricsProvider.get().start(openTelemetry, config); + this.closeable = metricsProvider.get().start(openTelemetry); } else { logger.debug("No runtime metrics instrumentation available for Java {}", version); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsProvider.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsProvider.java index 8549f9394e61..80254addb1b1 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsProvider.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/runtimemetrics/RuntimeMetricsProvider.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.runtimemetrics; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import javax.annotation.Nullable; /** @@ -19,5 +18,5 @@ public interface RuntimeMetricsProvider { int minJavaVersion(); @Nullable - AutoCloseable start(OpenTelemetry openTelemetry, InstrumentationConfig config); + AutoCloseable start(OpenTelemetry openTelemetry); } From 3ea3aed8ad20286c893db7e16859245c58e79d65 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 14:13:54 -0800 Subject: [PATCH 25/73] experimental --- ...tiesBackedDeclarativeConfigProperties.java | 12 ++-- .../awssdk/v1_11/TracingRequestHandler.java | 18 +++++- .../awssdk/v2_2/AwsSdkSingletons.java | 14 ++++- .../dropwizardviews/DropwizardSingletons.java | 11 +++- .../finatra/FinatraSingletons.java | 11 +++- .../grails/GrailsSingletons.java | 11 +++- .../v1_0/JaxrsInstrumentationModule.java | 5 +- .../jaxrs/v1_0/JaxrsSingletons.java | 11 +++- ...JaxrsAnnotationsInstrumentationModule.java | 5 +- ...JaxrsAnnotationsInstrumentationModule.java | 5 +- .../jaxrs/JaxrsInstrumenterFactory.java | 11 +++- .../axis2/Axis2Singletons.java | 7 ++- .../common/JaxWsInstrumenterFactory.java | 11 +++- .../instrumentation/cxf/CxfSingletons.java | 7 ++- .../jws/v1_1/JwsInstrumentationModule.java | 5 +- .../metro/MetroSingletons.java | 7 ++- .../jfinal/v3_2/JFinalSingletons.java | 11 +++- .../jms/v1_1/JmsSingletons.java | 19 +++++- .../jms/v3_0/JmsSingletons.java | 19 +++++- .../jms/JmsReceiveSpanUtil.java | 10 +++- .../mojarra/MojarraSingletons.java | 11 +++- .../mojarra/v3_0/MojarraSingletons.java | 11 +++- .../myfaces/MyFacesSingletons.java | 11 +++- .../myfaces/v3_0/MyFacesSingletons.java | 11 +++- .../HttpJspPageInstrumentationSingletons.java | 10 +++- ...ationContextInstrumentationSingletons.java | 10 +++- .../kafkaclients/v0_11/KafkaSingletons.java | 18 +++++- .../kafkastreams/KafkaStreamsSingletons.java | 18 +++++- .../nats/v2_17/NatsSingletons.java | 7 ++- .../play/v2_4/Play24Singletons.java | 11 +++- .../play/v2_6/Play26Singletons.java | 11 +++- .../v2_8/telemetry/PulsarSingletons.java | 14 ++++- .../rabbitmq/RabbitSingletons.java | 19 +++++- .../ratpack/RatpackSingletons.java | 15 ++++- .../kafka/v1_0/ReactorKafkaSingletons.java | 18 +++++- .../v4_8/RocketMqClientHooks.java | 10 +++- .../v5_0/RocketMqSingletons.java | 16 ++++- .../v4_1/SpringIntegrationSingletons.java | 10 +++- .../spring/jms/v2_0/SpringJmsSingletons.java | 19 +++++- .../spring/jms/v6_0/SpringJmsSingletons.java | 19 +++++- .../kafka/v2_7/SpringKafkaSingletons.java | 27 ++++++--- .../pulsar/v1_0/SpringPulsarSingletons.java | 19 +++++- .../rabbit/v1_0/SpringRabbitSingletons.java | 11 +++- .../v5_0/server/WebfluxSingletons.java | 11 +++- .../SpringWebMvcInstrumenterFactory.java | 20 ++++++- .../v2_0/SpringWsInstrumentationModule.java | 5 +- .../spring/ws/v2_0/SpringWsSingletons.java | 11 +++- .../struts/v2_3/StrutsSingletons.java | 11 +++- .../struts/v7_0/StrutsSingletons.java | 11 +++- .../tapestry/TapestrySingletons.java | 11 +++- .../vaadin/VaadinSingletons.java | 19 ++++-- .../kafka/v3_6/VertxKafkaSingletons.java | 18 +++++- .../internal/ExperimentalConfig.java | 58 ------------------- .../InstrumentationModule.java | 7 ++- 54 files changed, 525 insertions(+), 193 deletions(-) delete mode 100644 javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index 2898c27e5f53..5b6fd1214f2a 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -53,8 +53,8 @@ private static final class StructuredListMapping { static { PROPERTY_MAPPINGS = new HashMap<>(); - // Add mappings as needed, e.g.: - // PROPERTY_MAPPINGS.put("common.enabled", "otel.instrumentation.common.default-enabled"); + // Javaagent-specific property (not under otel.instrumentation prefix) + PROPERTY_MAPPINGS.put("javaagent.indy/development.enabled", "otel.javaagent.experimental.indy"); LIST_MAPPINGS = new HashMap<>(); LIST_MAPPINGS.put( @@ -160,13 +160,13 @@ private static String translatePath(String path) { * Translates a single declarative config name segment to system property format. * *

Handles the "/development" suffix convention used for experimental properties in declarative - * config, translating it to the "experimental-" prefix used in flat properties. + * config, translating it to the "experimental." prefix used in flat properties. */ private static String translateName(String name) { - // Handle /development suffix → experimental- prefix - // e.g., "span_attributes/development" → "experimental-span-attributes" + // Handle /development suffix → experimental. prefix + // e.g., "controller_telemetry/development" → "experimental.controller-telemetry" if (name.endsWith("/development")) { - return "experimental-" + return "experimental." + name.substring(0, name.length() - "/development".length()).replace('_', '-'); } // Convert snake_case to kebab-case (the convention for flat properties) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java index 93efb6eaafb6..6bab37e8f48b 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java @@ -15,7 +15,7 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.awssdk.v1_11.AwsSdkTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; /** * A {@link RequestHandler2} for use in the agent. Unlike library instrumentation, the agent will @@ -40,8 +40,20 @@ public class TracingRequestHandler extends RequestHandler2 { GlobalOpenTelemetry.get(), "java", "aws_sdk", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .build() .newRequestHandler(); 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 ba6989fc6039..d2b16d51937a 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 @@ -9,7 +9,7 @@ import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry; import io.opentelemetry.instrumentation.awssdk.v2_2.internal.AbstractAwsSdkTelemetryFactory; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import java.util.List; public final class AwsSdkSingletons { @@ -24,12 +24,20 @@ private static class AwsSdkTelemetryFactory extends AbstractAwsSdkTelemetryFacto @Override protected List getCapturedHeaders() { - return ExperimentalConfig.get().getMessagingHeaders(); + return DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); } @Override protected boolean messagingReceiveInstrumentationEnabled() { - return ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + return DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); } @Override diff --git a/instrumentation/dropwizard/dropwizard-views-0.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardSingletons.java b/instrumentation/dropwizard/dropwizard-views-0.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardSingletons.java index d9902baa96ab..146c73ba8186 100644 --- a/instrumentation/dropwizard/dropwizard-views-0.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardSingletons.java +++ b/instrumentation/dropwizard/dropwizard-views-0.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/dropwizardviews/DropwizardSingletons.java @@ -7,8 +7,8 @@ import io.dropwizard.views.View; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class DropwizardSingletons { @@ -17,7 +17,14 @@ public final class DropwizardSingletons { private static final Instrumenter INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, DropwizardSingletons::spanName) - .setEnabled(ExperimentalConfig.get().viewTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "view_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); private static String spanName(View view) { diff --git a/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java b/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java index bc08b04d5435..daa6821f7bb8 100644 --- a/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java +++ b/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java @@ -11,12 +11,12 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.ClassNames; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; import io.opentelemetry.instrumentation.api.util.VirtualField; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class FinatraSingletons { @@ -36,7 +36,14 @@ public final class FinatraSingletons { ? ClassNames.simpleName(request.controllerClass()) : "") .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/grails-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grails/GrailsSingletons.java b/instrumentation/grails-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grails/GrailsSingletons.java index e12b8418aa3f..a3727cf21539 100644 --- a/instrumentation/grails-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grails/GrailsSingletons.java +++ b/instrumentation/grails-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grails/GrailsSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.grails; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class GrailsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.grails-3.0"; @@ -25,7 +25,14 @@ public final class GrailsSingletons { INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } 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..4b8b697e18dc 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,7 +10,6 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import com.google.auto.service.AutoService; -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; @@ -41,7 +40,9 @@ public boolean defaultEnabled(ConfigProperties config) { // 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 super.defaultEnabled(config) + && config.getBoolean( + "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); } @Override diff --git a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsSingletons.java b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsSingletons.java index 8a4bc94451be..d58f1030c73f 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsSingletons.java +++ b/instrumentation/jaxrs/jaxrs-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v1_0/JaxrsSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v1_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class JaxrsSingletons { @@ -26,7 +26,14 @@ public final class JaxrsSingletons { INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } 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..4379d9716672 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,7 +9,6 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; -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; @@ -44,7 +43,9 @@ public boolean defaultEnabled(ConfigProperties config) { // 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 super.defaultEnabled(config) + && config.getBoolean( + "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); } @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..9487d93d9e71 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,7 +9,6 @@ import static java.util.Arrays.asList; import com.google.auto.service.AutoService; -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; @@ -44,7 +43,9 @@ public boolean defaultEnabled(ConfigProperties config) { // 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 super.defaultEnabled(config) + && config.getBoolean( + "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); } @Override diff --git a/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsInstrumenterFactory.java b/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsInstrumenterFactory.java index ae2096cbdaab..8006e11f71f9 100644 --- a/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsInstrumenterFactory.java +++ b/instrumentation/jaxrs/jaxrs-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/JaxrsInstrumenterFactory.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class JaxrsInstrumenterFactory { @@ -21,7 +21,14 @@ public static Instrumenter createInstrumenter(String instrume instrumentationName, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java b/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java index 1ffb4e74b6e1..cddd314c00e4 100644 --- a/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java +++ b/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.axis2; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public class Axis2Singletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jaxws-2.0-axis2-1.6"; @@ -18,7 +18,10 @@ public class Axis2Singletons { INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, Axis2Request::spanName) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "controller_telemetry/development", "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsInstrumenterFactory.java b/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsInstrumenterFactory.java index 0a3502758ec0..05ebbeb8c39a 100644 --- a/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsInstrumenterFactory.java +++ b/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsInstrumenterFactory.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.jaxws.common; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class JaxWsInstrumenterFactory { @@ -21,7 +21,14 @@ public static Instrumenter createInstrumenter(String instrum instrumentationName, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java b/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java index b048d97985b8..b82328a21a92 100644 --- a/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java +++ b/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.cxf; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public class CxfSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jaxws-cxf-3.0"; @@ -18,7 +18,10 @@ public class CxfSingletons { INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, CxfRequest::spanName) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "controller_telemetry/development", "enabled") + .orElse(false)) .buildInstrumenter(); } 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..afe98f0a3789 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,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.jaxws.jws.v1_1; import com.google.auto.service.AutoService; -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; @@ -30,7 +29,9 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled(ConfigProperties config) { // this instrumentation only produces controller telemetry - return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled(); + return super.defaultEnabled(config) + && config.getBoolean( + "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); } @Override diff --git a/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java b/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java index aa6ef3858d56..0cef5415b992 100644 --- a/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java +++ b/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.metro; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public class MetroSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jaxws-metro-2.2"; @@ -18,7 +18,10 @@ public class MetroSingletons { INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, MetroRequest::spanName) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "controller_telemetry/development", "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java b/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java index cfcc9aaf6675..8c5db9e961cf 100644 --- a/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java +++ b/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java @@ -12,11 +12,11 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public final class JFinalSingletons { @@ -34,7 +34,14 @@ public final class JFinalSingletons { GlobalOpenTelemetry.get(), "io.opentelemetry.jfinal-3.2", CodeSpanNameExtractor.create(codedAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .addAttributesExtractor(CodeAttributesExtractor.create(codedAttributesGetter)) .buildInstrumenter(); } diff --git a/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java b/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java index d68de50afb9c..53b112f2f087 100644 --- a/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java +++ b/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsSingletons.java @@ -6,10 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.jms.v1_1; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class JmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jms-1.1"; @@ -21,9 +22,21 @@ public final class JmsSingletons { static { JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)); PRODUCER_INSTRUMENTER = factory.createProducerInstrumenter(); CONSUMER_RECEIVE_INSTRUMENTER = factory.createConsumerReceiveInstrumenter(); diff --git a/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java b/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java index d5595e75899f..edae49a3b2d0 100644 --- a/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java +++ b/instrumentation/jms/jms-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v3_0/JmsSingletons.java @@ -6,10 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.jms.v3_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class JmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.jms-3.0"; @@ -21,9 +22,21 @@ public final class JmsSingletons { static { JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)); PRODUCER_INSTRUMENTER = factory.createProducerInstrumenter(); CONSUMER_RECEIVE_INSTRUMENTER = factory.createConsumerReceiveInstrumenter(); diff --git a/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java b/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java index be0bbd88b243..0885804c857c 100644 --- a/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java +++ b/instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsReceiveSpanUtil.java @@ -8,16 +8,22 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil; import io.opentelemetry.instrumentation.api.internal.Timer; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.bootstrap.jms.JmsReceiveContextHolder; public final class JmsReceiveSpanUtil { private static final ContextPropagators propagators = GlobalOpenTelemetry.getPropagators(); private static final boolean receiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); public static void createReceiveSpan( Instrumenter receiveInstrumenter, diff --git a/instrumentation/jsf/jsf-mojarra-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/MojarraSingletons.java b/instrumentation/jsf/jsf-mojarra-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/MojarraSingletons.java index 5cd44f713c39..7899dc144f72 100644 --- a/instrumentation/jsf/jsf-mojarra-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/MojarraSingletons.java +++ b/instrumentation/jsf/jsf-mojarra-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/MojarraSingletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.mojarra; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jsf.javax.JsfErrorCauseExtractor; import io.opentelemetry.javaagent.instrumentation.jsf.javax.JsfRequest; @@ -21,7 +21,14 @@ public class MojarraSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, JsfRequest::spanName) .setErrorCauseExtractor(new JsfErrorCauseExtractor()) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jsf/jsf-mojarra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/v3_0/MojarraSingletons.java b/instrumentation/jsf/jsf-mojarra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/v3_0/MojarraSingletons.java index 3957e3fa5587..058c853e348b 100644 --- a/instrumentation/jsf/jsf-mojarra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/v3_0/MojarraSingletons.java +++ b/instrumentation/jsf/jsf-mojarra-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/mojarra/v3_0/MojarraSingletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.mojarra.v3_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jsf.jakarta.JsfErrorCauseExtractor; import io.opentelemetry.javaagent.instrumentation.jsf.jakarta.JsfRequest; @@ -21,7 +21,14 @@ public class MojarraSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, JsfRequest::spanName) .setErrorCauseExtractor(new JsfErrorCauseExtractor()) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jsf/jsf-myfaces-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/MyFacesSingletons.java b/instrumentation/jsf/jsf-myfaces-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/MyFacesSingletons.java index 9be3ba91893c..fbc74d43b677 100644 --- a/instrumentation/jsf/jsf-myfaces-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/MyFacesSingletons.java +++ b/instrumentation/jsf/jsf-myfaces-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/MyFacesSingletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.myfaces; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jsf.javax.JsfRequest; public class MyFacesSingletons { @@ -20,7 +20,14 @@ public class MyFacesSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, JsfRequest::spanName) .setErrorCauseExtractor(new MyFacesErrorCauseExtractor()) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jsf/jsf-myfaces-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/v3_0/MyFacesSingletons.java b/instrumentation/jsf/jsf-myfaces-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/v3_0/MyFacesSingletons.java index 6f82d5c74efe..a71f2c3ac708 100644 --- a/instrumentation/jsf/jsf-myfaces-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/v3_0/MyFacesSingletons.java +++ b/instrumentation/jsf/jsf-myfaces-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/myfaces/v3_0/MyFacesSingletons.java @@ -6,8 +6,8 @@ package io.opentelemetry.javaagent.instrumentation.myfaces.v3_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jsf.jakarta.JsfRequest; public class MyFacesSingletons { @@ -20,7 +20,14 @@ public class MyFacesSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, JsfRequest::spanName) .setErrorCauseExtractor(new MyFacesErrorCauseExtractor()) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java index 9a1c497c51b3..d103a8aff10c 100644 --- a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java +++ b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/HttpJspPageInstrumentationSingletons.java @@ -14,7 +14,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.net.URI; import java.net.URISyntaxException; import java.util.logging.Logger; @@ -38,7 +37,14 @@ public class HttpJspPageInstrumentationSingletons { "io.opentelemetry.jsp-2.3", HttpJspPageInstrumentationSingletons::spanNameOnRender) .addAttributesExtractor(new RenderAttributesExtractor()) - .setEnabled(ExperimentalConfig.get().viewTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "view_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(SpanKindExtractor.alwaysInternal()); } diff --git a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java index 1712e8a68d64..f9efc4da1bdf 100644 --- a/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java +++ b/instrumentation/jsp-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jsp/JspCompilationContextInstrumentationSingletons.java @@ -12,7 +12,6 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import javax.annotation.Nullable; import org.apache.jasper.JspCompilationContext; import org.apache.jasper.compiler.Compiler; @@ -32,7 +31,14 @@ public class JspCompilationContextInstrumentationSingletons { "io.opentelemetry.jsp-2.3", JspCompilationContextInstrumentationSingletons::spanNameOnCompile) .addAttributesExtractor(new CompilationAttributesExtractor()) - .setEnabled(ExperimentalConfig.get().viewTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "view_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(SpanKindExtractor.alwaysInternal()); } diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java index 84690e5fe715..1d87e96ea434 100644 --- a/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java +++ b/instrumentation/kafka/kafka-clients/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/v0_11/KafkaSingletons.java @@ -12,7 +12,7 @@ import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProducerRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.apache.kafka.clients.producer.RecordMetadata; public final class KafkaSingletons { @@ -30,13 +30,25 @@ public final class KafkaSingletons { static { KafkaInstrumenterFactory instrumenterFactory = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)); PRODUCER_INSTRUMENTER = instrumenterFactory.createProducerInstrumenter(); CONSUMER_RECEIVE_INSTRUMENTER = instrumenterFactory.createConsumerReceiveInstrumenter(); CONSUMER_PROCESS_INSTRUMENTER = instrumenterFactory.createConsumerProcessInstrumenter(); diff --git a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java index b33ca1185823..5e18c4b3ed9d 100644 --- a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java +++ b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java @@ -10,7 +10,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; public final class KafkaStreamsSingletons { @@ -18,13 +18,25 @@ public final class KafkaStreamsSingletons { private static final Instrumenter INSTRUMENTER = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)) .createConsumerProcessInstrumenter(); public static Instrumenter instrumenter() { diff --git a/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java b/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java index 13e95063e94c..e36e63d53dee 100644 --- a/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java +++ b/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsSingletons.java @@ -9,15 +9,18 @@ import static io.opentelemetry.instrumentation.nats.v2_17.internal.NatsInstrumenterFactory.createProducerInstrumenter; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.nats.v2_17.internal.NatsRequest; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import java.util.List; public final class NatsSingletons { private static final List capturedHeaders = - ExperimentalConfig.get().getMessagingHeaders(); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); public static final Instrumenter PRODUCER_INSTRUMENTER = createProducerInstrumenter(GlobalOpenTelemetry.get(), capturedHeaders); diff --git a/instrumentation/play/play-mvc/play-mvc-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_4/Play24Singletons.java b/instrumentation/play/play-mvc/play-mvc-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_4/Play24Singletons.java index 26c9581ddb36..bac14312b94a 100644 --- a/instrumentation/play/play-mvc/play-mvc-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_4/Play24Singletons.java +++ b/instrumentation/play/play-mvc/play-mvc-2.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_4/Play24Singletons.java @@ -8,10 +8,10 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import play.api.mvc.Request; import scala.Option; @@ -21,7 +21,14 @@ public final class Play24Singletons { private static final Instrumenter INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), "io.opentelemetry.play-mvc-2.4", s -> SPAN_NAME) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); public static Instrumenter instrumenter() { diff --git a/instrumentation/play/play-mvc/play-mvc-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_6/Play26Singletons.java b/instrumentation/play/play-mvc/play-mvc-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_6/Play26Singletons.java index 3b72dab6282a..67a3010454cd 100644 --- a/instrumentation/play/play-mvc/play-mvc-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_6/Play26Singletons.java +++ b/instrumentation/play/play-mvc/play-mvc-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/play/v2_6/Play26Singletons.java @@ -8,10 +8,10 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.annotation.Nullable; @@ -27,7 +27,14 @@ public final class Play26Singletons { private static final Instrumenter INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), "io.opentelemetry.play-mvc-2.6", s -> SPAN_NAME) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); @Nullable private static final Method typedKeyGetUnderlying; diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java index 7120a59b250c..76ce798cf06b 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarSingletons.java @@ -26,8 +26,8 @@ import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; import io.opentelemetry.instrumentation.api.internal.Timer; import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.pulsar.v2_8.VirtualFieldStore; +import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; import org.apache.pulsar.client.api.Consumer; @@ -41,9 +41,17 @@ public final class PulsarSingletons { private static final TextMapPropagator PROPAGATOR = TELEMETRY.getPropagators().getTextMapPropagator(); private static final List capturedHeaders = - ExperimentalConfig.get().getMessagingHeaders(); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); private static final boolean receiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); private static final Instrumenter CONSUMER_PROCESS_INSTRUMENTER = createConsumerProcessInstrumenter(); diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java index ec101fe02787..8ef1e7840897 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java @@ -20,8 +20,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public final class RabbitSingletons { @@ -84,7 +84,14 @@ private static Instrumenter createReceiveInstrument return Instrumenter.builder( GlobalOpenTelemetry.get(), instrumentationName, ReceiveRequest::spanName) .addAttributesExtractors(extractors) - .setEnabled(ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)) .addSpanLinksExtractor( new PropagatorBasedSpanLinksExtractor<>( GlobalOpenTelemetry.getPropagators().getTextMapPropagator(), @@ -112,7 +119,13 @@ private static Instrumenter createDeliverInstrumenter() { private static AttributesExtractor buildMessagingAttributesExtractor( MessagingAttributesGetter getter, MessageOperation operation) { return MessagingAttributesExtractor.builder(getter, operation) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .build(); } diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackSingletons.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackSingletons.java index 6796026d6dfd..a5fee6378dae 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackSingletons.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackSingletons.java @@ -8,19 +8,28 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteSource; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import ratpack.handling.Context; public final class RatpackSingletons { + private static final boolean CONTROLLER_TELEMETRY_ENABLED = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false); + private static final Instrumenter INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), "io.opentelemetry.ratpack-1.4", s -> s) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled(CONTROLLER_TELEMETRY_ENABLED) .buildInstrumenter(); public static Instrumenter instrumenter() { @@ -30,7 +39,7 @@ public static Instrumenter instrumenter() { public static void updateSpanNames(io.opentelemetry.context.Context otelContext, Context ctx) { String matchedRoute = updateServerSpanName(otelContext, ctx); // update ratpack span name - if (ExperimentalConfig.get().controllerTelemetryEnabled()) { + if (CONTROLLER_TELEMETRY_ENABLED) { Span.fromContext(otelContext).updateName(matchedRoute); } } diff --git a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java index c3fa83a177dc..54b807c04413 100644 --- a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java +++ b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java @@ -10,7 +10,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; final class ReactorKafkaSingletons { @@ -18,13 +18,25 @@ final class ReactorKafkaSingletons { private static final Instrumenter PROCESS_INSTRUMENTER = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)) .createConsumerProcessInstrumenter(); public static Instrumenter processInstrumenter() { diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java index 046db35aa122..fb5a3fb14e5c 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java @@ -8,7 +8,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.rocketmqclient.v4_8.RocketMqTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.apache.rocketmq.client.hook.ConsumeMessageHook; import org.apache.rocketmq.client.hook.SendMessageHook; @@ -17,7 +17,13 @@ public final class RocketMqClientHooks { @SuppressWarnings("deprecation") // call to deprecated method will be removed in the future private static final RocketMqTelemetry TELEMETRY = RocketMqTelemetry.builder(GlobalOpenTelemetry.get()) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java index 605838c13c2a..3f669a997bd8 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v5_0/RocketMqSingletons.java @@ -8,8 +8,9 @@ import apache.rocketmq.v2.ReceiveMessageRequest; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import java.util.List; import org.apache.rocketmq.client.apis.consumer.ConsumeResult; import org.apache.rocketmq.client.apis.message.MessageView; @@ -25,9 +26,18 @@ public final class RocketMqSingletons { static { OpenTelemetry openTelemetry = GlobalOpenTelemetry.get(); - List messagingHeaders = ExperimentalConfig.get().getMessagingHeaders(); + List messagingHeaders = + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); boolean receiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); PRODUCER_INSTRUMENTER = RocketMqInstrumenterFactory.createProducerInstrumenter(openTelemetry, messagingHeaders); diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java index 0b7d94ba1df2..63bfc6080a24 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java @@ -10,7 +10,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.spring.integration.v4_1.SpringIntegrationTelemetry; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import java.util.List; import org.springframework.messaging.support.ChannelInterceptor; @@ -26,7 +26,13 @@ public final class SpringIntegrationSingletons { private static final ChannelInterceptor INTERCEPTOR = SpringIntegrationTelemetry.builder(GlobalOpenTelemetry.get()) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setProducerSpanEnabled( DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), diff --git a/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java b/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java index 034e3cdedac7..e35fb6783b92 100644 --- a/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java +++ b/instrumentation/spring/spring-jms/spring-jms-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v2_0/SpringJmsSingletons.java @@ -6,23 +6,36 @@ package io.opentelemetry.javaagent.instrumentation.spring.jms.v2_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class SpringJmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-jms-2.0"; private static final boolean RECEIVE_TELEMETRY_ENABLED = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); private static final Instrumenter LISTENER_INSTRUMENTER; private static final Instrumenter RECEIVE_INSTRUMENTER; static { JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED); LISTENER_INSTRUMENTER = factory.createConsumerProcessInstrumenter(true); diff --git a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java index 38360f67e3a6..f91b9887d743 100644 --- a/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java +++ b/instrumentation/spring/spring-jms/spring-jms-6.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/jms/v6_0/SpringJmsSingletons.java @@ -6,23 +6,36 @@ package io.opentelemetry.javaagent.instrumentation.spring.jms.v6_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import io.opentelemetry.javaagent.instrumentation.jms.JmsInstrumenterFactory; import io.opentelemetry.javaagent.instrumentation.jms.MessageWithDestination; +import java.util.Collections; public final class SpringJmsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-jms-6.0"; private static final boolean RECEIVE_TELEMETRY_ENABLED = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); private static final Instrumenter LISTENER_INSTRUMENTER; private static final Instrumenter RECEIVE_INSTRUMENTER; static { JmsInstrumenterFactory factory = new JmsInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED); LISTENER_INSTRUMENTER = factory.createConsumerProcessInstrumenter(true); diff --git a/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java b/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java index 3f6547355d59..9df23bd6856f 100644 --- a/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java +++ b/instrumentation/spring/spring-kafka-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/kafka/v2_7/SpringKafkaSingletons.java @@ -12,7 +12,8 @@ import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry; import io.opentelemetry.instrumentation.spring.kafka.v2_7.internal.SpringKafkaErrorCauseExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; +import java.util.List; public final class SpringKafkaSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-kafka-2.7"; @@ -22,22 +23,34 @@ public final class SpringKafkaSingletons { GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") .orElse(false); + private static final List CAPTURED_HEADERS = + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") + .orElse(Collections.emptyList()); + + private static final boolean RECEIVE_TELEMETRY_ENABLED = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); + private static final SpringKafkaTelemetry TELEMETRY = SpringKafkaTelemetry.builder(GlobalOpenTelemetry.get()) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders(CAPTURED_HEADERS) .setCaptureExperimentalSpanAttributes(CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) - .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED) .build(); private static final Instrumenter BATCH_PROCESS_INSTRUMENTER; static { KafkaInstrumenterFactory factory = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders(CAPTURED_HEADERS) .setCaptureExperimentalSpanAttributes(CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) - .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()) + .setMessagingReceiveInstrumentationEnabled(RECEIVE_TELEMETRY_ENABLED) .setErrorCauseExtractor(SpringKafkaErrorCauseExtractor.INSTANCE); BATCH_PROCESS_INSTRUMENTER = factory.createBatchProcessInstrumenter(); } diff --git a/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java b/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java index fc9c454dcda2..ebd12ae4be8d 100644 --- a/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java +++ b/instrumentation/spring/spring-pulsar-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/pulsar/v1_0/SpringPulsarSingletons.java @@ -7,6 +7,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; @@ -14,7 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.apache.pulsar.client.api.Message; public final class SpringPulsarSingletons { @@ -26,7 +27,13 @@ public final class SpringPulsarSingletons { SpringPulsarMessageAttributesGetter getter = SpringPulsarMessageAttributesGetter.INSTANCE; MessageOperation operation = MessageOperation.PROCESS; boolean messagingReceiveInstrumentationEnabled = - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled(); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false); InstrumenterBuilder, Void> builder = Instrumenter., Void>builder( @@ -35,7 +42,13 @@ public final class SpringPulsarSingletons { MessagingSpanNameExtractor.create(getter, operation)) .addAttributesExtractor( MessagingAttributesExtractor.builder(getter, operation) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .build()); if (messagingReceiveInstrumentationEnabled) { builder.addSpanLinksExtractor( diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java index eae11c3df682..df6ec117bc03 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitSingletons.java @@ -6,11 +6,12 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessageOperation; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.messaging.MessagingSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; import org.springframework.amqp.core.Message; public final class SpringRabbitSingletons { @@ -30,7 +31,13 @@ public final class SpringRabbitSingletons { MessagingSpanNameExtractor.create(getter, operation)) .addAttributesExtractor( MessagingAttributesExtractor.builder(getter, operation) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .build()) .buildConsumerInstrumenter(MessageHeaderGetter.INSTANCE); } diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/server/WebfluxSingletons.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/server/WebfluxSingletons.java index bc57cf8f7f34..2912f68997c6 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/server/WebfluxSingletons.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/server/WebfluxSingletons.java @@ -6,11 +6,11 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.server; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRouteGetter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import org.springframework.web.reactive.HandlerMapping; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.util.pattern.PathPattern; @@ -27,7 +27,14 @@ public final class WebfluxSingletons { INSTRUMENTER = builder - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .addAttributesExtractor( CodeAttributesExtractor.create(new HandlerCodeAttributesGetter())) .buildInstrumenter(); diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/SpringWebMvcInstrumenterFactory.java b/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/SpringWebMvcInstrumenterFactory.java index a072c14a56ed..71ab85f66467 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/SpringWebMvcInstrumenterFactory.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/SpringWebMvcInstrumenterFactory.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.spring.webmvc; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import org.springframework.web.servlet.ModelAndView; public final class SpringWebMvcInstrumenterFactory { @@ -27,7 +27,14 @@ public Instrumenter createHandlerInstrumenter() { instrumentationName, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } @@ -35,7 +42,14 @@ public Instrumenter createModelAndViewInstrumenter() { return Instrumenter.builder( GlobalOpenTelemetry.get(), instrumentationName, new ModelAndViewSpanNameExtractor()) .addAttributesExtractor(new ModelAndViewAttributesExtractor()) - .setEnabled(ExperimentalConfig.get().viewTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "view_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } } 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..683bf5c01a6f 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,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.ws.v2_0; import com.google.auto.service.AutoService; -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; @@ -29,7 +28,9 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled(ConfigProperties config) { // this instrumentation only produces controller telemetry - return super.defaultEnabled(config) && ExperimentalConfig.get().controllerTelemetryEnabled(); + return super.defaultEnabled(config) + && config.getBoolean( + "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); } @Override diff --git a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsSingletons.java b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsSingletons.java index b21b1184675b..32781e2a157c 100644 --- a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsSingletons.java +++ b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/v2_0/SpringWsSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.spring.ws.v2_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public class SpringWsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-ws-2.0"; @@ -25,7 +25,14 @@ public class SpringWsSingletons { INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/struts/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v2_3/StrutsSingletons.java b/instrumentation/struts/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v2_3/StrutsSingletons.java index 913db3c99bc1..03813628d489 100644 --- a/instrumentation/struts/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v2_3/StrutsSingletons.java +++ b/instrumentation/struts/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v2_3/StrutsSingletons.java @@ -7,10 +7,10 @@ import com.opensymphony.xwork2.ActionInvocation; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public class StrutsSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.struts-2.3"; @@ -26,7 +26,14 @@ public class StrutsSingletons { INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/struts/struts-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v7_0/StrutsSingletons.java b/instrumentation/struts/struts-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v7_0/StrutsSingletons.java index b638dd646223..584b648a03be 100644 --- a/instrumentation/struts/struts-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v7_0/StrutsSingletons.java +++ b/instrumentation/struts/struts-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts/v7_0/StrutsSingletons.java @@ -6,10 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.struts.v7_0; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import org.apache.struts2.ActionInvocation; public class StrutsSingletons { @@ -26,7 +26,14 @@ public class StrutsSingletons { INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(codeAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codeAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/tapestry-5.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestrySingletons.java b/instrumentation/tapestry-5.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestrySingletons.java index e3e2e279885e..b3041b06fea1 100644 --- a/instrumentation/tapestry-5.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestrySingletons.java +++ b/instrumentation/tapestry-5.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tapestry/TapestrySingletons.java @@ -6,9 +6,9 @@ package io.opentelemetry.javaagent.instrumentation.tapestry; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; import org.apache.tapestry5.runtime.ComponentEventException; public class TapestrySingletons { @@ -27,7 +27,14 @@ public class TapestrySingletons { } return ErrorCauseExtractor.getDefault().extract(error); }) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled( + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java b/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java index d7e41033dd72..ddc6904c5941 100644 --- a/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java +++ b/instrumentation/vaadin-14.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vaadin/VaadinSingletons.java @@ -8,11 +8,11 @@ import com.vaadin.flow.server.communication.rpc.RpcInvocationHandler; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.ContextKey; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.semconv.util.SpanNames; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; public class VaadinSingletons { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.vaadin-14.2"; @@ -29,6 +29,15 @@ public class VaadinSingletons { private static final VaadinHelper HELPER; static { + boolean controllerTelemetryEnabled = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false); + ClientCallableCodeAttributesGetter clientCallableAttributesGetter = new ClientCallableCodeAttributesGetter(); CLIENT_CALLABLE_INSTRUMENTER = @@ -36,14 +45,14 @@ public class VaadinSingletons { GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(clientCallableAttributesGetter)) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled(controllerTelemetryEnabled) .addAttributesExtractor(CodeAttributesExtractor.create(clientCallableAttributesGetter)) .buildInstrumenter(); REQUEST_HANDLER_INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, VaadinHandlerRequest::getSpanName) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled(controllerTelemetryEnabled) // add context for tracking nested request handler calls .addContextCustomizer( (context, vaadinHandlerRequest, startAttributes) -> @@ -54,14 +63,14 @@ public class VaadinSingletons { RPC_INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, VaadinSingletons::rpcSpanName) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled(controllerTelemetryEnabled) .addAttributesExtractor(CodeAttributesExtractor.create(rpcCodeAttributesGetter)) .buildInstrumenter(); SERVICE_INSTRUMENTER = Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, VaadinServiceRequest::getSpanName) - .setEnabled(ExperimentalConfig.get().controllerTelemetryEnabled()) + .setEnabled(controllerTelemetryEnabled) // add context for tracking whether any request handler handled the request .addContextCustomizer( (context, vaadinServiceRequest, startAttributes) -> diff --git a/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java b/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java index 64f97ecbeace..8f85aa8a2307 100644 --- a/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java +++ b/instrumentation/vertx/vertx-kafka-client-3.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/kafka/v3_6/VertxKafkaSingletons.java @@ -11,7 +11,7 @@ import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaInstrumenterFactory; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaProcessRequest; import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaReceiveRequest; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import java.util.Collections; public final class VertxKafkaSingletons { @@ -23,13 +23,25 @@ public final class VertxKafkaSingletons { static { KafkaInstrumenterFactory factory = new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) - .setCapturedHeaders(ExperimentalConfig.get().getMessagingHeaders()) + .setCapturedHeaders( + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "capture_headers/development") + .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", "kafka", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( - ExperimentalConfig.get().messagingReceiveInstrumentationEnabled()); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "messaging", + "receive_telemetry/development", + "enabled") + .orElse(false)); BATCH_PROCESS_INSTRUMENTER = factory.createBatchProcessInstrumenter(); PROCESS_INSTRUMENTER = factory.createConsumerProcessInstrumenter(); } diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java deleted file mode 100644 index 736229de4ecb..000000000000 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ExperimentalConfig.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.bootstrap.internal; - -import static java.util.Collections.emptyList; - -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import java.util.List; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public final class ExperimentalConfig { - - private static final ExperimentalConfig instance = - new ExperimentalConfig(AgentInstrumentationConfig.get()); - - private final InstrumentationConfig config; - private final List messagingHeaders; - - /** Returns the global agent configuration. */ - public static ExperimentalConfig get() { - return instance; - } - - public ExperimentalConfig(InstrumentationConfig config) { - this.config = config; - messagingHeaders = - config.getList("otel.instrumentation.messaging.experimental.capture-headers", emptyList()); - } - - public boolean controllerTelemetryEnabled() { - return config.getBoolean( - "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); - } - - public boolean viewTelemetryEnabled() { - return config.getBoolean( - "otel.instrumentation.common.experimental.view-telemetry.enabled", false); - } - - public boolean messagingReceiveInstrumentationEnabled() { - return config.getBoolean( - "otel.instrumentation.messaging.experimental.receive-telemetry.enabled", false); - } - - public boolean indyEnabled() { - return config.getBoolean("otel.javaagent.experimental.indy", false); - } - - public List getMessagingHeaders() { - return messagingHeaders; - } -} 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 e6ee634fe5d9..b8cc3f6f2016 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,7 @@ import static java.util.Collections.unmodifiableSet; import static net.bytebuddy.matcher.ElementMatchers.any; -import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig; +import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.Ordered; import java.util.Collections; @@ -156,12 +156,13 @@ public List getAdditionalHelperClassNames() { return Collections.emptyList(); } - // InstrumentationModule is loaded before ExperimentalConfig is initialized + // InstrumentationModule is loaded before GlobalOpenTelemetry is initialized private static class IndyConfigurationHolder { private static final boolean indyEnabled; static { - indyEnabled = ExperimentalConfig.get().indyEnabled(); + indyEnabled = + AgentInstrumentationConfig.get().getBoolean("otel.javaagent.experimental.indy", false); if (indyEnabled) { logger.info("Enabled indy for instrumentation modules"); } From 6317f5bda0971c35a70d80e9db2beeaaa461f3ac Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 14:28:45 -0800 Subject: [PATCH 26/73] more --- ...tiesBackedDeclarativeConfigProperties.java | 15 +++++++++++--- .../ConfiguredResourceAttributesHolder.java | 8 +++++--- .../InstrumentationModule.java | 8 +++++--- ...RegexUrlTemplateCustomizerInitializer.java | 20 ++++++++++++------- .../muzzle/AgentCachingPoolStrategy.java | 16 ++++++++++----- 5 files changed, 46 insertions(+), 21 deletions(-) diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index 5b6fd1214f2a..d034ec1cb48d 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -53,8 +53,6 @@ private static final class StructuredListMapping { static { PROPERTY_MAPPINGS = new HashMap<>(); - // Javaagent-specific property (not under otel.instrumentation prefix) - PROPERTY_MAPPINGS.put("javaagent.indy/development.enabled", "otel.javaagent.experimental.indy"); LIST_MAPPINGS = new HashMap<>(); LIST_MAPPINGS.put( @@ -116,6 +114,9 @@ private String pathWithName(String name) { *

  • Checking explicit mappings first *
  • Falling back to standard conversion: prefix + kebab-case path * + * + *

    Special handling for "javaagent" prefix: paths starting with "javaagent." are mapped to + * "otel.javaagent." instead of "otel.instrumentation.javaagent.". */ private static String toPropertyKey(String fullPath) { // Check explicit mappings first @@ -123,8 +124,16 @@ private static String toPropertyKey(String fullPath) { if (mapped != null) { return mapped; } + + String translatedPath = translatePath(fullPath); + + // Handle javaagent prefix specially: otel.javaagent.* instead of otel.instrumentation.javaagent.* + if (translatedPath.startsWith("javaagent.")) { + return "otel." + translatedPath; + } + // Standard conversion: otel.instrumentation. + kebab-case path - return "otel.instrumentation." + translatePath(fullPath); + return "otel.instrumentation." + translatedPath; } /** diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ConfiguredResourceAttributesHolder.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ConfiguredResourceAttributesHolder.java index ea7c51ff436f..e2509fc469cd 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ConfiguredResourceAttributesHolder.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/ConfiguredResourceAttributesHolder.java @@ -7,7 +7,9 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -28,9 +30,9 @@ public static Map getResourceAttributes() { public static void initialize(Attributes resourceAttribute) { List mdcResourceAttributes = - AgentInstrumentationConfig.get() - .getList( - "otel.instrumentation.common.mdc.resource-attributes", Collections.emptyList()); + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "common", "mdc", "resource_attributes") + .orElse(Collections.emptyList()); for (String key : mdcResourceAttributes) { String value = resourceAttribute.get(stringKey(key)); if (value != null) { 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 b8cc3f6f2016..d20944b7a324 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; @@ -156,13 +157,14 @@ public List getAdditionalHelperClassNames() { return Collections.emptyList(); } - // InstrumentationModule is loaded before GlobalOpenTelemetry is initialized private static class IndyConfigurationHolder { private static final boolean indyEnabled; static { indyEnabled = - AgentInstrumentationConfig.get().getBoolean("otel.javaagent.experimental.indy", false); + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "javaagent", "indy/development") + .orElse(false); if (indyEnabled) { logger.info("Enabled indy for instrumentation modules"); } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java index 7b592c9d0b84..ea287cee1a02 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java @@ -5,14 +5,13 @@ package io.opentelemetry.javaagent.tooling.instrumentation.http; -import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; import static java.util.Collections.emptyList; import static java.util.logging.Level.WARNING; import com.google.auto.service.AutoService; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.tooling.BeforeAgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import java.util.logging.Logger; @@ -26,15 +25,22 @@ public final class RegexUrlTemplateCustomizerInitializer implements BeforeAgentL @Override public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { - InstrumentationConfig config = AgentInstrumentationConfig.get(); // url template is emitted only when http client experimental telemetry is enabled boolean urlTemplateEnabled = - config.getBoolean("otel.instrumentation.http.client.emit-experimental-telemetry", false); - if (!urlTemplateEnabled || !config.isDeclarative()) { + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "http", + "client", + "emit_experimental_telemetry/development") + .orElse(false); + if (!urlTemplateEnabled) { return; } DeclarativeConfigProperties configuration = - config.getDeclarativeConfig("http").getStructured("client", empty()); + DeclarativeConfigUtil.getStructuredConfig( + GlobalOpenTelemetry.get(), "java", "http", "client") + .orElse(DeclarativeConfigProperties.empty()); configuration .getStructuredList("url_template_rules", emptyList()) .forEach( diff --git a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java index 560919a31b6b..056df1c194d1 100644 --- a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java +++ b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java @@ -6,10 +6,11 @@ package io.opentelemetry.javaagent.tooling.muzzle; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.internal.cache.Cache; import io.opentelemetry.javaagent.bootstrap.InstrumentationHolder; import io.opentelemetry.javaagent.bootstrap.field.VirtualFieldAccessorMarker; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import java.lang.instrument.Instrumentation; import java.lang.ref.WeakReference; import java.lang.reflect.Method; @@ -52,9 +53,14 @@ public class AgentCachingPoolStrategy implements AgentBuilder.PoolStrategy { // Many things are package visible for testing purposes -- // others to avoid creation of synthetic accessors - private static final boolean REFLECTION_ENABLED = - AgentInstrumentationConfig.get() - .getBoolean("otel.instrumentation.internal-reflection.enabled", true); + // Lazy initialization holder - REFLECTION_ENABLED is read after GlobalOpenTelemetry is set + private static class ReflectionEnabledHolder { + static final boolean REFLECTION_ENABLED = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "internal_reflection", "enabled") + .orElse(true); + } + private static final Method findLoadedClassMethod = getFindLoadedClassMethod(); static final int TYPE_CAPACITY = 64; @@ -626,7 +632,7 @@ public TypeList.Generic getInterfaces() { for (Class interfaceClass : clazz.getInterfaces()) { // virtual field accessors are removed by internal-reflection instrumentation // we do this extra check for tests run with internal-reflection disabled - if (!REFLECTION_ENABLED + if (!ReflectionEnabledHolder.REFLECTION_ENABLED && VirtualFieldAccessorMarker.class.isAssignableFrom(interfaceClass)) { continue; } From 0d8017c7f5c3eb9333e4bdb809db4b1d2d0b95e2 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 14:32:47 -0800 Subject: [PATCH 27/73] delete --- .../internal/AgentInstrumentationConfig.java | 47 ------ .../internal/EmptyInstrumentationConfig.java | 80 ----------- .../javaagent/tooling/AgentInstaller.java | 5 - .../config/ConfigPropertiesBridge.java | 136 ------------------ 4 files changed, 268 deletions(-) delete mode 100644 javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentInstrumentationConfig.java delete mode 100644 javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/EmptyInstrumentationConfig.java delete mode 100644 javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridge.java diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentInstrumentationConfig.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentInstrumentationConfig.java deleted file mode 100644 index 081050ef76ac..000000000000 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/AgentInstrumentationConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.bootstrap.internal; - -import static java.util.Objects.requireNonNull; - -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import java.util.logging.Logger; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public class AgentInstrumentationConfig { - private AgentInstrumentationConfig() {} - - private static final Logger logger = Logger.getLogger(AgentInstrumentationConfig.class.getName()); - - private static final InstrumentationConfig DEFAULT = new EmptyInstrumentationConfig(); - - // lazy initialized, so that javaagent can set it - private static volatile InstrumentationConfig instance = DEFAULT; - - /** - * Sets the instrumentation configuration singleton. This method is only supposed to be called - * once, during the agent initialization, just before {@link AgentInstrumentationConfig#get()} is - * used for the first time. - * - *

    This method is internal and is hence not for public use. Its API is unstable and can change - * at any time. - */ - public static void internalInitializeConfig(InstrumentationConfig config) { - if (instance != DEFAULT) { - logger.warning("InstrumentationConfig#instance was already set earlier"); - return; - } - instance = requireNonNull(config); - } - - /** Returns the global instrumentation configuration. */ - public static InstrumentationConfig get() { - return instance; - } -} diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/EmptyInstrumentationConfig.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/EmptyInstrumentationConfig.java deleted file mode 100644 index 56cd43580c17..000000000000 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/EmptyInstrumentationConfig.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.bootstrap.internal; - -import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import java.time.Duration; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -final class EmptyInstrumentationConfig implements InstrumentationConfig { - - @Nullable - @Override - public String getString(String name) { - return null; - } - - @Override - public String getString(String name, String defaultValue) { - return defaultValue; - } - - @Override - public boolean getBoolean(String name, boolean defaultValue) { - return defaultValue; - } - - @Override - public int getInt(String name, int defaultValue) { - return defaultValue; - } - - @Override - public long getLong(String name, long defaultValue) { - return defaultValue; - } - - @Override - public double getDouble(String name, double defaultValue) { - return defaultValue; - } - - @Override - public Duration getDuration(String name, Duration defaultValue) { - return defaultValue; - } - - @Override - public List getList(String name, List defaultValue) { - return defaultValue; - } - - @Override - public Map getMap(String name, Map defaultValue) { - return defaultValue; - } - - @Override - public boolean isDeclarative() { - return false; - } - - @Override - public DeclarativeConfigProperties getDeclarativeConfig(String node) { - throw new IllegalStateException( - "Declarative configuration is not supported in the empty instrumentation config"); - } - - @Nullable - @Override - public ConfigProvider getConfigProvider() { - return null; - } -} diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 769908d7f2a8..28ecb981a1c0 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -28,7 +28,6 @@ import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizer; import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder; import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseMutator; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; import io.opentelemetry.javaagent.bootstrap.internal.ConfiguredResourceAttributesHolder; import io.opentelemetry.javaagent.bootstrap.internal.sqlcommenter.SqlCommenterCustomizer; import io.opentelemetry.javaagent.bootstrap.internal.sqlcommenter.SqlCommenterCustomizerHolder; @@ -38,7 +37,6 @@ import io.opentelemetry.javaagent.tooling.asyncannotationsupport.WeakRefAsyncOperationEndStrategies; import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesBuilderImpl; import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesConfigurer; -import io.opentelemetry.javaagent.tooling.config.ConfigPropertiesBridge; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.javaagent.tooling.field.FieldBackedImplementationConfiguration; import io.opentelemetry.javaagent.tooling.field.VirtualFieldImplementationInstaller; @@ -167,9 +165,6 @@ private static void installBytebuddyAgent( installOpenTelemetrySdk(extensionClassLoader, earlyConfig); ConfigProperties sdkConfig = AutoConfigureUtil.getConfig(autoConfiguredSdk); - AgentInstrumentationConfig.internalInitializeConfig( - new ConfigPropertiesBridge( - sdkConfig, AutoConfigureUtil.getConfigProvider(autoConfiguredSdk))); copyNecessaryConfigToSystemProperties(sdkConfig); setBootstrapPackages(sdkConfig, extensionClassLoader); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridge.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridge.java deleted file mode 100644 index 5c7fe70d9f1d..000000000000 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesBridge.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.tooling.config; - -import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; -import static java.util.Objects.requireNonNull; - -import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; -import java.time.Duration; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -public final class ConfigPropertiesBridge implements InstrumentationConfig { - - private final ConfigProperties configProperties; - @Nullable private final ConfigProvider configProvider; - - public ConfigPropertiesBridge( - ConfigProperties configProperties, @Nullable ConfigProvider configProvider) { - this.configProperties = configProperties; - this.configProvider = configProvider; - } - - @Nullable - @Override - public String getString(String name) { - try { - return configProperties.getString(name); - } catch (ConfigurationException ignored) { - return null; - } - } - - @Override - public String getString(String name, String defaultValue) { - try { - return configProperties.getString(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public boolean getBoolean(String name, boolean defaultValue) { - try { - return configProperties.getBoolean(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public int getInt(String name, int defaultValue) { - try { - return configProperties.getInt(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public long getLong(String name, long defaultValue) { - try { - return configProperties.getLong(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public double getDouble(String name, double defaultValue) { - try { - return configProperties.getDouble(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public Duration getDuration(String name, Duration defaultValue) { - try { - return configProperties.getDuration(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public List getList(String name, List defaultValue) { - try { - return configProperties.getList(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public Map getMap(String name, Map defaultValue) { - try { - return configProperties.getMap(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public boolean isDeclarative() { - return configProvider != null; - } - - @Override - public DeclarativeConfigProperties getDeclarativeConfig(String node) { - DeclarativeConfigProperties config = - InstrumentationConfigUtil.javaInstrumentationConfig(requireNonNull(configProvider), node); - if (config == null) { - // there is no declarative config for this node - return empty(); - } - return config; - } - - @Nullable - @Override - public ConfigProvider getConfigProvider() { - return configProvider; - } -} From 323d6e732368f0e333567b3d41c4c9eac2918149 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 15:09:20 -0800 Subject: [PATCH 28/73] up --- ...tiesBackedDeclarativeConfigProperties.java | 5 ++++ .../internal/DeclarativeConfigUtil.java | 27 +++++++++++++++++ .../jmx/JmxMetricInsightInstaller.java | 29 +++++++++++++++---- .../oshi/OshiMetricsInstaller.java | 19 ++++++++---- .../java8/JarAnalyzerInstaller.java | 21 ++++++++++---- .../javaagent/tooling/AgentInstaller.java | 1 + .../tooling/OpenTelemetryInstaller.java | 1 + 7 files changed, 85 insertions(+), 18 deletions(-) diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index d034ec1cb48d..ff14ea78951a 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -132,6 +132,11 @@ private static String toPropertyKey(String fullPath) { return "otel." + translatedPath; } + // Handle jmx prefix specially: otel.jmx.* instead of otel.instrumentation.jmx.* + if (translatedPath.startsWith("jmx.")) { + return "otel." + translatedPath; + } + // Standard conversion: otel.instrumentation. + kebab-case path return "otel.instrumentation." + translatedPath; } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java index 8281ed7b366c..cb6657b2c240 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -11,6 +11,7 @@ import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import java.time.Duration; import java.util.List; import java.util.Optional; import javax.annotation.Nullable; @@ -36,6 +37,32 @@ public static Optional getInt(OpenTelemetry openTelemetry, String... pr return Optional.ofNullable(node != null ? node.getInt(leaf(propertyPath)) : null); } + public static Optional getLong(OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + return Optional.ofNullable(node != null ? node.getLong(leaf(propertyPath)) : null); + } + + public static Optional getDuration(OpenTelemetry openTelemetry, String... propertyPath) { + DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); + if (node == null) { + return Optional.empty(); + } + String leaf = leaf(propertyPath); + + // First try as Long (milliseconds) - typical for YAML config + Long millis = node.getLong(leaf); + if (millis != null) { + return Optional.of(Duration.ofMillis(millis)); + } + + // Fall back to String parsing - typical for system properties like "1m", "10s" + String value = node.getString(leaf); + if (value == null || value.isEmpty()) { + return Optional.empty(); + } + return Optional.of(DurationParser.parseDuration(value)); + } + public static Optional> getList( OpenTelemetry openTelemetry, String... propertyPath) { DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); diff --git a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java index 3a67fc0da0c1..916643c9c93b 100644 --- a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java +++ b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java @@ -7,6 +7,8 @@ import com.google.auto.service.AutoService; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.jmx.JmxTelemetry; import io.opentelemetry.instrumentation.jmx.JmxTelemetryBuilder; import io.opentelemetry.javaagent.extension.AgentListener; @@ -17,6 +19,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; +import java.util.Collections; import java.util.logging.Level; import java.util.logging.Logger; @@ -28,17 +31,28 @@ public class JmxMetricInsightInstaller implements AgentListener { @Override public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { + OpenTelemetry openTelemetry = autoConfiguredSdk.getOpenTelemetrySdk(); ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredSdk); - if (config.getBoolean("otel.jmx.enabled", true)) { + boolean defaultEnabled = + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled") + .orElse(true); + boolean enabled = + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "jmx", "enabled") + .orElse(defaultEnabled); + if (enabled) { JmxTelemetryBuilder jmx = JmxTelemetry.builder(GlobalOpenTelemetry.get()) - .beanDiscoveryDelay(beanDiscoveryDelay(config)); + .beanDiscoveryDelay(beanDiscoveryDelay(openTelemetry, config)); - config.getList("otel.jmx.config").stream() + DeclarativeConfigUtil.getList(openTelemetry, "java", "jmx", "config") + .orElse(Collections.emptyList()) + .stream() .map(Paths::get) .forEach(path -> addFileRules(path, jmx)); - config.getList("otel.jmx.target.system").forEach(target -> addClasspathRules(target, jmx)); + DeclarativeConfigUtil.getList(openTelemetry, "java", "jmx", "target_system") + .orElse(Collections.emptyList()) + .forEach(target -> addClasspathRules(target, jmx)); jmx.build().start(); } @@ -66,8 +80,11 @@ private static void addClasspathRules(String target, JmxTelemetryBuilder builder } } - private static Duration beanDiscoveryDelay(ConfigProperties configProperties) { - Duration discoveryDelay = configProperties.getDuration("otel.jmx.discovery.delay"); + private static Duration beanDiscoveryDelay( + OpenTelemetry openTelemetry, ConfigProperties configProperties) { + Duration discoveryDelay = + DeclarativeConfigUtil.getDuration(openTelemetry, "java", "jmx", "discovery_delay") + .orElse(null); if (discoveryDelay != null) { return discoveryDelay; } diff --git a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java index 5a5b04443d2e..c2fb94d474f7 100644 --- a/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java +++ b/instrumentation/oshi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/oshi/OshiMetricsInstaller.java @@ -6,10 +6,9 @@ package io.opentelemetry.javaagent.instrumentation.oshi; import com.google.auto.service.AutoService; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.AgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.lang.reflect.Method; /** @@ -21,10 +20,18 @@ public class OshiMetricsInstaller implements AgentListener { @Override public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { - ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredSdk); - - boolean defaultEnabled = config.getBoolean("otel.instrumentation.common.default-enabled", true); - if (!config.getBoolean("otel.instrumentation.oshi.enabled", defaultEnabled)) { + boolean enabled = + DeclarativeConfigUtil.getBoolean( + autoConfiguredSdk.getOpenTelemetrySdk(), "java", "oshi", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + autoConfiguredSdk.getOpenTelemetrySdk(), + "java", + "common", + "default_enabled") + .orElse(true)); + if (!enabled) { return; } diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java index 3a064418a590..1ea54855a5fd 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/runtimemetrics/java8/JarAnalyzerInstaller.java @@ -6,11 +6,10 @@ package io.opentelemetry.javaagent.instrumentation.runtimemetrics.java8; import com.google.auto.service.AutoService; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.bootstrap.InstrumentationHolder; import io.opentelemetry.javaagent.tooling.BeforeAgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.lang.instrument.Instrumentation; /** Installs the {@link JarAnalyzer}. */ @@ -19,10 +18,14 @@ public class JarAnalyzerInstaller implements BeforeAgentListener { @Override public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { - ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); - boolean enabled = - config.getBoolean("otel.instrumentation.runtime-telemetry.package-emitter.enabled", false); + DeclarativeConfigUtil.getBoolean( + autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(), + "java", + "runtime_telemetry", + "package_emitter", + "enabled") + .orElse(false); if (!enabled) { return; } @@ -31,7 +34,13 @@ public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemet return; } int jarsPerSecond = - config.getInt("otel.instrumentation.runtime-telemetry.package-emitter.jars-per-second", 10); + DeclarativeConfigUtil.getInt( + autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(), + "java", + "runtime_telemetry", + "package_emitter", + "jars_per_second") + .orElse(10); JarAnalyzer jarAnalyzer = JarAnalyzer.create(autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(), jarsPerSecond); inst.addTransformer(jarAnalyzer); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 28ecb981a1c0..bf474f42a25d 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -165,6 +165,7 @@ private static void installBytebuddyAgent( installOpenTelemetrySdk(extensionClassLoader, earlyConfig); ConfigProperties sdkConfig = AutoConfigureUtil.getConfig(autoConfiguredSdk); + // TODO remove this method when library instrumentation reads it from declarative configuration copyNecessaryConfigToSystemProperties(sdkConfig); setBootstrapPackages(sdkConfig, extensionClassLoader); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 4768ef1c4e3f..8b1dd9069a1a 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -81,6 +81,7 @@ static ConfigProperties getDeclarativeConfigBridgedProperties( EarlyInitAgentConfig earlyConfig, ConfigProvider configProvider) { return new DeclarativeConfigPropertiesBridgeBuilder() .addMapping("otel.javaagent", "agent") + .addMapping("otel.jmx", "otel.instrumentation.jmx") .addOverride("otel.instrumentation.common.default-enabled", defaultEnabled(configProvider)) // these properties are used to initialize the SDK before the configuration file // is loaded for consistency, we pass them to the bridge, so that they can be read From 5dfd803e28a1e45707ff39f82d3e859497c1b4b5 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 15:17:28 -0800 Subject: [PATCH 29/73] up --- ...ConfigPropertiesBackedDeclarativeConfigProperties.java | 8 ++++---- .../WithSpanInstrumentation.java | 2 +- .../extension/instrumentation/InstrumentationModule.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java index ff14ea78951a..1d8301e80893 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java +++ b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesBackedDeclarativeConfigProperties.java @@ -127,12 +127,12 @@ private static String toPropertyKey(String fullPath) { String translatedPath = translatePath(fullPath); - // Handle javaagent prefix specially: otel.javaagent.* instead of otel.instrumentation.javaagent.* - if (translatedPath.startsWith("javaagent.")) { - return "otel." + translatedPath; + // Handle agent prefix specially: java.agent.* → otel.javaagent.* + if (translatedPath.startsWith("agent.")) { + return "otel.java" + translatedPath; } - // Handle jmx prefix specially: otel.jmx.* instead of otel.instrumentation.jmx.* + // Handle jmx prefix specially: java.jmx.* → otel.jmx.* if (translatedPath.startsWith("jmx.")) { return "otel." + translatedPath; } diff --git a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java index a9392ca2ced4..0bcbe80ec370 100644 --- a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java +++ b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/WithSpanInstrumentation.java @@ -60,7 +60,7 @@ class WithSpanInstrumentation implements TypeInstrumentation { .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "javaagent", "debug") // FIXME + GlobalOpenTelemetry.get(), "java", "agent", "debug") // FIXME .orElse(false)); private final ElementMatcher.Junction annotatedMethodMatcher; 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 d20944b7a324..c3008df6762c 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 @@ -163,7 +163,7 @@ private static class IndyConfigurationHolder { static { indyEnabled = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "javaagent", "indy/development") + GlobalOpenTelemetry.get(), "java", "agent", "indy/development") .orElse(false); if (indyEnabled) { logger.info("Enabled indy for instrumentation modules"); From 55963757157a7844f40cda610eec05954c6aad00 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 15:26:44 -0800 Subject: [PATCH 30/73] Phase 1: Migrate EnduserConfig to use OpenTelemetry instead of InstrumentationConfig --- CI-PLAN.md | 64 ++++ docs/CONFIG-PROPERTIES-USAGES.md | 322 ++++++++++++++++++ docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md | 287 ++++++++++++++++ .../config/internal/DurationParser.java | 72 ++++ .../config/internal/EnduserConfig.java | 15 +- 5 files changed, 754 insertions(+), 6 deletions(-) create mode 100644 CI-PLAN.md create mode 100644 docs/CONFIG-PROPERTIES-USAGES.md create mode 100644 docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md create mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DurationParser.java diff --git a/CI-PLAN.md b/CI-PLAN.md new file mode 100644 index 000000000000..7e5522786f71 --- /dev/null +++ b/CI-PLAN.md @@ -0,0 +1,64 @@ +# CI Failure Analysis Plan + +## Failed Jobs Summary +- Job: common / test0 (all Java versions, both indy true/false) +- Job: common / test1 (all Java versions, both indy true/false) +- Job: common / test2 (all Java versions, both indy true/false) +- Job: common / test3 (all Java versions, both indy true/false) +- Job: common / smoke-test (ubuntu-latest, websphere) +- Job: test-latest-deps / testLatestDeps0-3 + +## Unique Failed Gradle Tasks + +- [ ] Task: :instrumentation:jdbc:javaagent:test + - Seen in: test0 jobs, testLatestDeps jobs + - Log files: /tmp/test0-java8-indy-false.log, /tmp/testLatestDeps0.log + - Error: Tests expecting `peer.service` attribute that is missing + +- [ ] Task: :instrumentation:netty:netty-3.8:javaagent:test + - Seen in: test0 jobs + - Log files: /tmp/test0-java8-indy-false.log + - Error: Tests expecting `peer.service` attribute that is missing + +- [ ] Task: :instrumentation:servlet:servlet-3.0:javaagent-testing:test + - Seen in: test0 jobs + - Log files: /tmp/test0-java8-indy-false.log + - Error: Tests expecting HTTP headers to be captured (`captureHttpHeaders` tests failing) + +- [ ] Task: :instrumentation:spring:spring-webflux:spring-webflux-5.0:javaagent:test + - Seen in: test0 jobs, testLatestDeps jobs + - Log files: /tmp/test0-java8-indy-false.log, /tmp/testLatestDeps0.log + - Error: Tests expecting `peer.service` attribute that is missing + +- [ ] Task: :instrumentation:vertx:vertx-redis-client-4.0:javaagent:test + - Seen in: testLatestDeps jobs + - Log files: /tmp/testLatestDeps0.log + - Error: Unknown, need to investigate + +- [ ] Task: :instrumentation:elasticsearch:elasticsearch-api-client-7.16:javaagent:test + - Seen in: testLatestDeps jobs + - Log files: /tmp/testLatestDeps0.log + - Error: Unknown, need to investigate + +- [ ] Task: :smoke-tests:test + - Seen in: smoke-test websphere job + - Log files: /tmp/smoke-test-websphere.log + - Error: Missing `http.request.header.x-test-request` attribute + +## Notes +The common thread is that tests are expecting certain attributes that are not being captured: +1. `peer.service` attribute missing in client spans (netty, jdbc, spring-webflux) +2. HTTP request headers not being captured in smoke tests +3. Some servlet tests also failing on HTTP header capture + +Root cause analysis: +- Commit bc9ba668 introduced declarative config bridge infrastructure +- Commit 016e5a41 changed PeerServiceResolver to use DeclarativeConfigUtil.getStructuredList() +- The configuration mapping is already in place (general.peer.service_mapping → otel.instrumentation.common.peer-service-mapping) +- Tests set -Dotel.instrumentation.common.peer-service-mapping=127.0.0.1=test-peer-service,localhost=test-peer-service +- HTTP headers are set via -Dotel.instrumentation.http.server.capture-request-headers=X-Test-Request in smoke tests + +Need to verify: +1. Are the singleton classes being initialized before GlobalOpenTelemetry is set? +2. Is the ConfigProvider properly returning the mapped values? +3. Are there any timing issues with static initialization? diff --git a/docs/CONFIG-PROPERTIES-USAGES.md b/docs/CONFIG-PROPERTIES-USAGES.md new file mode 100644 index 000000000000..3896385e1288 --- /dev/null +++ b/docs/CONFIG-PROPERTIES-USAGES.md @@ -0,0 +1,322 @@ +# ConfigProperties Usages in OpenTelemetry Java Instrumentation + +This document catalogs all usages of `io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties` +in the codebase to help plan the migration away from `DeclarativeConfigPropertiesBridge`. + +## Overview + +`ConfigProperties` is an interface from the OpenTelemetry SDK autoconfigure module that provides +access to configuration values in a key-value style (like system properties or environment variables). + +The `DeclarativeConfigPropertiesBridge` exists to convert YAML declarative config back to +`ConfigProperties` format so that existing code continues to work with both configuration styles. + +## Category 1: Public SPI Interfaces + +These are **public APIs** that extensions implement. Changing these would be a breaking change. + +### InstrumentationModule.defaultEnabled(ConfigProperties) + +**Location**: `javaagent-extension-api/src/main/java/.../InstrumentationModule.java` + +```java +public boolean defaultEnabled(ConfigProperties config) { + return config.getBoolean("otel.instrumentation.common.default-enabled", true); +} +``` + +**Overridden by ~20+ instrumentation modules**: +- `SpringWsInstrumentationModule` +- `SpringSecurityConfigServletInstrumentationModule` +- `SpringSecurityConfigWebFluxInstrumentationModule` +- `SpringBootActuatorInstrumentationModule` +- `SpringBatchInstrumentationModule` +- `MicrometerInstrumentationModule` +- `MyBatisInstrumentationModule` +- `JwsInstrumentationModule` +- `DataSourceInstrumentationModule` +- `JaxrsAnnotationsInstrumentationModule` (2.0 and 3.0) +- `JaxrsInstrumentationModule` (1.0) +- `LambdaInstrumentationModule` +- `UrlClassLoaderInstrumentationModule` +- `ApplicationLoggingInstrumentationModule` +- `EclipseOsgiInstrumentationModule` +- `ReflectionInstrumentationModule` +- `ClassLoaderInstrumentationModule` +- `DropwizardMetricsInstrumentationModule` +- And more... + +--- + +### IgnoredTypesConfigurer.configure(IgnoredTypesBuilder, ConfigProperties) + +**Location**: `javaagent-extension-api/src/main/java/.../IgnoredTypesConfigurer.java` + +```java +void configure(IgnoredTypesBuilder builder, ConfigProperties config); +``` + +**Implementations**: +- `GlobalIgnoredTypesConfigurer` +- `CommonLibraryIgnoredTypesConfigurer` +- `AdditionalLibraryIgnoredTypesConfigurer` +- `UserExcludedClassesConfigurer` +- `UserExcludedClassLoadersConfigurer` +- `SpringIntegrationIgnoredTypesConfigurer` +- `IgnoredTestTypesConfigurer` (testing) + +--- + +### AgentExtension.extend(AgentBuilder, ConfigProperties) + +**Location**: `javaagent-tooling/src/main/java/.../AgentExtension.java` + +```java +AgentBuilder extend(AgentBuilder agentBuilder, ConfigProperties config); +``` + +**Implementations**: +- `InstrumentationLoader` +- `TestAgentExtension` (testing) + +--- + +### BootstrapPackagesConfigurer.configure(BootstrapPackagesBuilder, ConfigProperties) + +**Location**: `javaagent-tooling/src/main/java/.../BootstrapPackagesConfigurer.java` + +```java +void configure(BootstrapPackagesBuilder builder, ConfigProperties config); +``` + +--- + +## Category 2: Internal Tooling + +These are internal usages within javaagent-tooling that can be migrated more easily. + +### AgentInstaller + +**File**: `javaagent-tooling/src/main/java/.../AgentInstaller.java` + +Uses `ConfigProperties` for: +- `copyNecessaryConfigToSystemProperties(ConfigProperties config)` - copies specific properties to system properties +- `setBootstrapPackages(ConfigProperties config, ...)` - configures bootstrap packages +- `configureIgnoredTypes(ConfigProperties config, ...)` - configures ignored types +- `runAfterAgentListeners(..., ConfigProperties sdkConfigProperties)` - reads `otel.javaagent.internal.force-synchronous-agent-listeners` + +--- + +### AgentTracerProviderConfigurer + +**File**: `javaagent-tooling/src/main/java/.../AgentTracerProviderConfigurer.java` + +```java +public SdkTracerProviderBuilder configure(SdkTracerProviderBuilder builder, ConfigProperties config) { + // Reads: otel.javaagent.enabled, otel.instrumentation.common.experimental.suppress-thread-attributes + // otel.traces.exporter +} +``` + +--- + +### AgentConfig + +**File**: `javaagent-tooling/src/main/java/.../AgentConfig.java` + +```java +public static boolean isInstrumentationEnabled(ConfigProperties config, Iterable names, boolean defaultEnabled) +public static boolean isDebugModeEnabled(ConfigProperties config) +``` + +--- + +### InstrumentationModuleInstaller + +**File**: `javaagent-tooling/src/main/java/.../InstrumentationModuleInstaller.java` + +Uses `ConfigProperties` to check if modules are enabled via `AgentConfig.isInstrumentationEnabled()`. + +--- + +### MuzzleMatcher + +**File**: `javaagent-tooling/src/main/java/.../MuzzleMatcher.java` + +Uses `ConfigProperties` for debug mode check. + +--- + +### UserExcludedClassesConfigurer / UserExcludedClassLoadersConfigurer + +Read from config: +- `otel.javaagent.exclude-classes` +- `otel.javaagent.exclude-class-loaders` + +--- + +### AdditionalLibraryIgnoredTypesConfigurer + +Reads: `otel.instrumentation.common.additional-library-ignores.enabled` + +--- + +### Field injection configuration + +**File**: `FieldBackedImplementationConfiguration.java` + +Reads: `otel.javaagent.experimental.field-injection.enabled` + +--- + +## Category 3: SDK Autoconfigure SPIs + +These are standard OpenTelemetry SDK SPIs that use `ConfigProperties`. + +### ResourceProvider implementations + +- `DistroResourceProvider.createResource(ConfigProperties config)` +- `TestResourceProvider` (testing) + +### TracerProviderConfigurer + +- `AgentTracerProviderConfigurer` + +### AutoConfigurationCustomizerProvider implementations + +Various customizers that receive `ConfigProperties`. + +--- + +## Category 4: Spring Boot Autoconfigure + +### OpenTelemetryAutoConfiguration + +**File**: `spring-boot-autoconfigure/src/main/java/.../OpenTelemetryAutoConfiguration.java` + +Exposes `ConfigProperties` as a Spring bean: +```java +@Bean +public ConfigProperties otelProperties(ConfigProvider configProvider) { + return new DeclarativeConfigPropertiesBridgeBuilder() + .buildFromInstrumentationConfig(configProvider.getInstrumentationConfig()); +} +``` + +### SpringConfigProperties + +**File**: `spring-boot-autoconfigure/src/main/java/.../SpringConfigProperties.java` + +Implements `ConfigProperties` to bridge Spring Boot properties to OTel configuration. + +### ConfigPropertiesBridge + +**File**: `spring-boot-autoconfigure/src/main/java/.../ConfigPropertiesBridge.java` + +Wraps `ConfigProperties` with additional `ConfigProvider` access for Spring Boot. + +--- + +## Category 5: Instrumentation Installers (AgentListener/BeforeAgentListener) + +These use `AutoConfiguredOpenTelemetrySdk` which provides access to both `ConfigProperties` +AND `ConfigProvider`. **Some can be migrated** to use `ConfigProvider` directly. + +### JarAnalyzerInstaller ✅ Migrated + +**File**: `runtime-telemetry-java8/javaagent/src/main/java/.../JarAnalyzerInstaller.java` + +Reads: +- `otel.instrumentation.runtime-telemetry.package-emitter.enabled` → `java.runtime_telemetry.package_emitter.enabled` +- `otel.instrumentation.runtime-telemetry.package-emitter.jars-per-second` → `java.runtime_telemetry.package_emitter.jars_per_second` + +### OshiMetricsInstaller ✅ Migrated + +**File**: `oshi/javaagent/src/main/java/.../OshiMetricsInstaller.java` + +Reads: +- `otel.instrumentation.common.default-enabled` → `java.common.default_enabled` +- `otel.instrumentation.oshi.enabled` → `java.oshi.enabled` + +### JmxMetricInsightInstaller ✅ Migrated + +**File**: `jmx-metrics/javaagent/src/main/java/.../JmxMetricInsightInstaller.java` + +Reads (with mapping `otel.jmx` → `otel.instrumentation.jmx` → `java.jmx`): +- `otel.jmx.enabled` → `java.jmx.enabled` +- `otel.jmx.config` → `java.jmx.config` +- `otel.jmx.target.system` → `java.jmx.target_system` +- `otel.jmx.discovery.delay` → `java.jmx.discovery_delay` + +--- + +## Category 6: Test Infrastructure + +### EmptyConfigProperties + +**File**: `javaagent-tooling/src/main/java/.../EmptyConfigProperties.java` + +Empty implementation used in testing and benchmarks. + +### Test mocks + +Various tests mock `ConfigProperties` for unit testing. + +--- + +## Summary Statistics + +| Category | Count | Migration Difficulty | +|----------|-------|---------------------| +| Public SPI Interfaces | 4 interfaces, ~30+ implementations | **High** - Breaking API change | +| Internal Tooling | ~15 usages | **Medium** - Internal refactoring | +| SDK Autoconfigure SPIs | ~5 usages | **Low** - Standard SDK patterns | +| Spring Boot Autoconfigure | ~5 usages | **Medium** - Spring integration | +| Instrumentation Installers | 3 migrated | **Low** - ✅ All done | +| Test Infrastructure | ~20 usages | **Low** - Test-only changes | + +--- + +## Migration Options + +### Option A: Keep ConfigProperties Forever + +Keep the bridge indefinitely as a compatibility layer. This is the lowest risk approach. + +**Pros**: No breaking changes, minimal effort +**Cons**: Maintains complexity, two config systems + +### Option B: Deprecate and Migrate Public SPIs + +1. Add new SPI methods that take `DeclarativeConfigProperties` or `ConfigProvider` +2. Keep old methods with `@Deprecated` annotation +3. Update all implementations over time +4. Remove deprecated methods in a future major version + +**Pros**: Clean migration path +**Cons**: Long transition period, more code to maintain + +### Option C: Change SPI Parameter Type (Breaking) + +Change all SPIs to use `DeclarativeConfigProperties` directly. + +**Pros**: Clean codebase, single config system +**Cons**: Breaking change for all extensions + +--- + +## Key Properties Read from ConfigProperties + +| Property | Used By | +|----------|---------| +| `otel.instrumentation.common.default-enabled` | InstrumentationModule | +| `otel.javaagent.enabled` | AgentTracerProviderConfigurer | +| `otel.javaagent.debug` | AgentConfig | +| `otel.javaagent.exclude-classes` | UserExcludedClassesConfigurer | +| `otel.javaagent.exclude-class-loaders` | UserExcludedClassLoadersConfigurer | +| `otel.instrumentation.common.additional-library-ignores.enabled` | AdditionalLibraryIgnoredTypesConfigurer | +| `otel.instrumentation.common.experimental.suppress-thread-attributes` | AgentTracerProviderConfigurer | +| `otel.instrumentation.experimental.span-suppression-strategy` | AgentInstaller | +| `otel.javaagent.experimental.field-injection.enabled` | FieldBackedImplementationConfiguration | +| `otel.javaagent.internal.force-synchronous-agent-listeners` | AgentInstaller | +| `otel.traces.exporter` | AgentTracerProviderConfigurer | diff --git a/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md b/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md new file mode 100644 index 000000000000..698652092c5f --- /dev/null +++ b/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md @@ -0,0 +1,287 @@ +# Plan: Remove InstrumentationConfig Interface + +## Overview + +This document outlines the plan to remove the `InstrumentationConfig` interface and consolidate on: +1. **Primary**: `DeclarativeConfigUtil` - for accessing configuration from `OpenTelemetry` instance +2. **Secondary**: `ConfigProperties` - for SDK autoconfigure compatibility (SPI interfaces) + +## Current State + +### InstrumentationConfig Interface +**Location**: `instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java` + +Provides methods: +- `getString(name)`, `getString(name, default)` +- `getBoolean(name, default)` +- `getInt(name, default)`, `getLong(name, default)`, `getDouble(name, default)` +- `getDuration(name, default)` +- `getList(name)`, `getList(name, default)` +- `getMap(name, default)` +- `isDeclarative()` - whether declarative config is in use +- `getDeclarativeConfig(node)` - get declarative config for a node +- `getConfigProvider()` - get the ConfigProvider + +### Implementations +1. **ConfigPropertiesBridge** (`spring-boot-autoconfigure/.../properties/ConfigPropertiesBridge.java`) + - Wraps `ConfigProperties` and optionally `ConfigProvider` + - Used as a Spring bean in autoconfiguration + +### Key Usage Patterns + +1. **Spring Boot Autoconfiguration**: `InstrumentationConfig` is a Spring bean injected into instrumentation configurations +2. **Helper utilities**: `InstrumentationConfigUtil` wraps config access for HTTP client/server builders +3. **Enduser config**: `EnduserConfig` reads properties via `InstrumentationConfig` +4. **Deprecated property warnings**: `DeprecatedConfigProperties` reads via `InstrumentationConfig` + +--- + +## Migration Plan + +### Phase 1: Migrate instrumentation-api-incubator Internal Uses + +#### 1.1 EnduserConfig +**File**: `instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java` + +**Current**: +```java +EnduserConfig(InstrumentationConfig instrumentationConfig) { + this.idEnabled = instrumentationConfig.getBoolean("otel.instrumentation.common.enduser.id.enabled", false); + // ... +} +``` + +**Target**: Change constructor to accept `OpenTelemetry` and use `DeclarativeConfigUtil`: +```java +EnduserConfig(OpenTelemetry openTelemetry) { + this.idEnabled = DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "id_enabled") + .orElse(false); + // ... +} +``` + +**Note**: Need to define the declarative config schema mapping for enduser settings. + +--- + +### Phase 2: Migrate Spring Boot Autoconfigure + +#### 2.1 Remove InstrumentationConfig Bean +**Files**: +- `OpenTelemetryAutoConfiguration.java` + +**Current**: Creates `InstrumentationConfig` beans in multiple configurations: +```java +@Bean +public InstrumentationConfig instrumentationConfig(ConfigProperties properties, ConfigProvider configProvider) { + return new ConfigPropertiesBridge(properties, configProvider); +} +``` + +**Target**: Remove `InstrumentationConfig` bean creation. Consumers should use `OpenTelemetry` directly. + +#### 2.2 InstrumentationConfigUtil +**File**: `spring-boot-autoconfigure/.../properties/InstrumentationConfigUtil.java` + +**Current**: +```java +public static T configureClientBuilder( + OpenTelemetry openTelemetry, + InstrumentationConfig config, + T builder, + Function> getBuilder) { + getBuilder.apply(builder).configure(openTelemetry); + return builder; +} + +public static boolean isStatementSanitizationEnabled(InstrumentationConfig config, String key) { + return config.getBoolean(key, config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true)); +} +``` + +**Target**: Remove `InstrumentationConfig` parameter (already not used in configure methods): +```java +public static T configureClientBuilder( + OpenTelemetry openTelemetry, + T builder, + Function> getBuilder) { + getBuilder.apply(builder).configure(openTelemetry); + return builder; +} + +public static boolean isStatementSanitizationEnabled(OpenTelemetry openTelemetry, String key) { + // Use DeclarativeConfigUtil for key, fall back to common setting + return DeclarativeConfigUtil.getBoolean(openTelemetry, /* path for key */) + .or(() -> DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "db_statement_sanitizer", "enabled")) + .orElse(true); +} +``` + +#### 2.3 Instrumentation Auto-Configurations + +Update all auto-configuration classes that inject `InstrumentationConfig`: + +| File | Change | +|------|--------| +| `SpringWebfluxInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | +| `SpringWebMvc5InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | +| `SpringWebMvc6InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | +| `RestClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | +| `RestClientBeanPostProcessor.java` | Remove `InstrumentationConfig` field | +| `WebClientBeanPostProcessor.java` | Remove `InstrumentationConfig` parameter | +| `JdbcInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` parameter | +| `MongoClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | +| `MongoClientInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` parameter | +| `DataSourcePostProcessor.java` | Remove `InstrumentationConfig` field | +| `R2dbcInstrumentingPostProcessor.java` | Remove `InstrumentationConfig` field | +| `SchedulingInstrumentationAspectTest.java` | Update test to not use `InstrumentationConfig` | + +--- + +### Phase 3: Migrate Javaagent Extension API + +#### 3.1 DeprecatedConfigProperties +**File**: `javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/DeprecatedConfigProperties.java` + +**Current**: +```java +public static boolean getBoolean( + InstrumentationConfig config, String deprecatedPropertyName, String newPropertyName, boolean defaultValue) { + warnIfUsed(config, deprecatedPropertyName, newPropertyName); + boolean value = config.getBoolean(deprecatedPropertyName, defaultValue); + return config.getBoolean(newPropertyName, value); +} +``` + +**Target**: Change to use `ConfigProperties`: +```java +public static boolean getBoolean( + ConfigProperties config, String deprecatedPropertyName, String newPropertyName, boolean defaultValue) { + warnIfUsed(config, deprecatedPropertyName, newPropertyName); + boolean value = config.getBoolean(deprecatedPropertyName, defaultValue); + return config.getBoolean(newPropertyName, value); +} +``` + +--- + +### Phase 4: Update Tests + +Update all test files that reference `InstrumentationConfig`: + +| File | Change | +|------|--------| +| `AbstractJdbcInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `AbstractR2DbcInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `AbstractSpringWebInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `AbstractKafkaInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `DeclarativeConfigTest.java` | Update assertions | +| `SpringWebMvcInstrumentation5AutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `SpringWebMvcInstrumentation6AutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `RestClientInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `SchedulingInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `SpringWebfluxInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | +| `WebClientBeanPostProcessorTest.java` | Update to not use `InstrumentationConfig` | + +--- + +### Phase 5: Delete InstrumentationConfig + +#### 5.1 Delete Files +- `instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java` +- `spring-boot-autoconfigure/.../properties/ConfigPropertiesBridge.java` + +--- + +## Decision Points / Open Questions + +### 1. Declarative Config Schema for Properties + +Currently, `InstrumentationConfig` uses flat property names like `otel.instrumentation.common.enduser.id.enabled`. + +For `DeclarativeConfigUtil`, we need to define the hierarchical path in declarative config YAML: +```yaml +instrumentation: + java: + common: + enduser: + id_enabled: true +``` + +**Decision needed**: Confirm the schema structure for all properties currently accessed via `InstrumentationConfig`. + +### 2. ConfigProperties for SPI Interfaces + +Several SPI interfaces in `javaagent-extension-api` use `ConfigProperties`: +- `InstrumentationModule.defaultEnabled(ConfigProperties)` +- `IgnoredTypesConfigurer.configure(..., ConfigProperties)` +- `AgentExtension.extend(..., ConfigProperties)` +- `BootstrapPackagesConfigurer.configure(..., ConfigProperties)` + +These are **external APIs** and cannot be easily changed. They will continue to use `ConfigProperties`. + +**Decision**: Leave SPI interfaces using `ConfigProperties`. Only migrate internal code to `DeclarativeConfigUtil`. + +### 3. Spring Boot ConfigProperties Bean + +Spring Boot autoconfigure exposes a `ConfigProperties` bean. This should remain for: +- Backward compatibility with user customizations +- SPI interfaces that need `ConfigProperties` + +--- + +## Migration Order + +1. **Phase 1**: `EnduserConfig` (internal, limited blast radius) +2. **Phase 2**: Spring Boot auto-configurations (bulk of changes) +3. **Phase 3**: Javaagent extension API (`DeprecatedConfigProperties`) +4. **Phase 4**: Tests +5. **Phase 5**: Delete `InstrumentationConfig` interface and `ConfigPropertiesBridge` + +--- + +## Files Summary + +### Files to Modify + +| Module | File | Change Type | +|--------|------|-------------| +| instrumentation-api-incubator | `EnduserConfig.java` | Change constructor signature | +| spring-boot-autoconfigure | `OpenTelemetryAutoConfiguration.java` | Remove `InstrumentationConfig` beans | +| spring-boot-autoconfigure | `InstrumentationConfigUtil.java` | Remove `InstrumentationConfig` param | +| spring-boot-autoconfigure | `SpringWebfluxInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure | `WebClientBeanPostProcessor.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure | `SpringWebMvc5InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure (Spring3) | `SpringWebMvc6InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure (Spring3) | `RestClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure (Spring3) | `RestClientBeanPostProcessor.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure (Spring4) | `JdbcInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure | `MongoClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure (Spring4) | `MongoClientInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure | `DataSourcePostProcessor.java` | Remove `InstrumentationConfig` | +| spring-boot-autoconfigure | `R2dbcInstrumentingPostProcessor.java` | Remove `InstrumentationConfig` | +| javaagent-extension-api | `DeprecatedConfigProperties.java` | Change to `ConfigProperties` | + +### Files to Delete + +| Module | File | +|--------|------| +| instrumentation-api-incubator | `InstrumentationConfig.java` | +| spring-boot-autoconfigure | `ConfigPropertiesBridge.java` | + +### Test Files to Update + +| Module | File | +|--------|------| +| spring-boot-autoconfigure/testing | `AbstractJdbcInstrumentationAutoConfigurationTest.java` | +| spring-boot-autoconfigure/testing | `AbstractR2DbcInstrumentationAutoConfigurationTest.java` | +| spring-boot-autoconfigure/testing | `AbstractSpringWebInstrumentationAutoConfigurationTest.java` | +| spring-boot-autoconfigure/testing | `AbstractKafkaInstrumentationAutoConfigurationTest.java` | +| spring-boot-autoconfigure/testDeclarativeConfig | `DeclarativeConfigTest.java` | +| spring-boot-autoconfigure/test | `SpringWebMvcInstrumentation5AutoConfigurationTest.java` | +| spring-boot-autoconfigure/testSpring3 | `SpringWebMvcInstrumentation6AutoConfigurationTest.java` | +| spring-boot-autoconfigure/testSpring3 | `RestClientInstrumentationAutoConfigurationTest.java` | +| spring-boot-autoconfigure/test | `SchedulingInstrumentationAutoConfigurationTest.java` | +| spring-boot-autoconfigure/test | `SchedulingInstrumentationAspectTest.java` | +| spring-boot-autoconfigure/test | `SpringWebfluxInstrumentationAutoConfigurationTest.java` | +| spring-boot-autoconfigure/test | `WebClientBeanPostProcessorTest.java` | diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DurationParser.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DurationParser.java new file mode 100644 index 000000000000..8ebf97c1dd18 --- /dev/null +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DurationParser.java @@ -0,0 +1,72 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.incubator.config.internal; + +import java.time.Duration; +import java.util.concurrent.TimeUnit; + +/** + * Duration parsing copied from + * https://github.com/open-telemetry/opentelemetry-java/blob/b9f98a87941dcbd578ef518685d5fe699f2f8c8f/sdk-extensions/autoconfigure-spi/src/main/java/io/opentelemetry/sdk/autoconfigure/spi/internal/DefaultConfigProperties.java + * + *

    This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. + */ +final class DurationParser { + + static Duration parseDuration(String value) { + String unitString = getUnitString(value); + // TODO: Environment variables have unknown encoding. `trim()` may cut codepoints oddly + // but likely we'll fail for malformed unit string either way. + String numberString = value.substring(0, value.length() - unitString.length()); + long rawNumber = Long.parseLong(numberString.trim()); + TimeUnit unit = getDurationUnit(unitString.trim()); + return Duration.ofNanos(TimeUnit.NANOSECONDS.convert(rawNumber, unit)); + } + + /** Returns the TimeUnit associated with a unit string. Defaults to milliseconds. */ + private static TimeUnit getDurationUnit(String unitString) { + switch (unitString) { + case "us": + return TimeUnit.MICROSECONDS; + case "ns": + return TimeUnit.NANOSECONDS; + case "": // Fallthrough expected + case "ms": + return TimeUnit.MILLISECONDS; + case "s": + return TimeUnit.SECONDS; + case "m": + return TimeUnit.MINUTES; + case "h": + return TimeUnit.HOURS; + case "d": + return TimeUnit.DAYS; + default: + throw new IllegalArgumentException("Invalid duration string, found: " + unitString); + } + } + + /** + * Fragments the 'units' portion of a config value from the 'value' portion. + * + *

    E.g. "1ms" would return the string "ms". + */ + private static String getUnitString(String rawValue) { + int lastDigitIndex = rawValue.length() - 1; + while (lastDigitIndex >= 0) { + char c = rawValue.charAt(lastDigitIndex); + if (Character.isDigit(c)) { + break; + } + lastDigitIndex -= 1; + } + // Pull everything after the last digit. + return rawValue.substring(lastDigitIndex + 1); + } + + private DurationParser() {} +} diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java index b44057c75f90..d068dc567664 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.api.incubator.config.internal; +import io.opentelemetry.api.OpenTelemetry; import java.util.Objects; /** @@ -39,8 +40,8 @@ public class EnduserConfig { private final boolean roleEnabled; private final boolean scopeEnabled; - EnduserConfig(InstrumentationConfig instrumentationConfig) { - Objects.requireNonNull(instrumentationConfig, "instrumentationConfig must not be null"); + EnduserConfig(OpenTelemetry openTelemetry) { + Objects.requireNonNull(openTelemetry, "openTelemetry must not be null"); /* * Capturing enduser.* attributes is disabled by default, because of this requirement in the specification: @@ -50,12 +51,14 @@ public class EnduserConfig { * https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/attributes.md#general-identity-attributes */ this.idEnabled = - instrumentationConfig.getBoolean("otel.instrumentation.common.enduser.id.enabled", false); + DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "id_enabled") + .orElse(false); this.roleEnabled = - instrumentationConfig.getBoolean("otel.instrumentation.common.enduser.role.enabled", false); + DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "role_enabled") + .orElse(false); this.scopeEnabled = - instrumentationConfig.getBoolean( - "otel.instrumentation.common.enduser.scope.enabled", false); + DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "scope_enabled") + .orElse(false); } /** From b57d91b66c1d2dcf30f4face8130de0c2fca3c6e Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 15:28:09 -0800 Subject: [PATCH 31/73] Phase 2.1: Remove InstrumentationConfig beans from OpenTelemetryAutoConfiguration --- .../OpenTelemetryAutoConfiguration.java | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index d54c25f5a8c2..a909c6e81b45 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -11,7 +11,6 @@ import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.common.ComponentLoader; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; import io.opentelemetry.instrumentation.config.bridge.ConfigPropertiesBackedConfigProvider; import io.opentelemetry.instrumentation.config.bridge.DeclarativeConfigPropertiesBridgeBuilder; @@ -20,7 +19,6 @@ import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelDisabled; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelEnabled; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelMapConverter; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelResourceProperties; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtelSpringProperties; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.OtlpExporterProperties; @@ -141,12 +139,6 @@ public ConfigProvider configProvider(ConfigProperties properties) { return ConfigPropertiesBackedConfigProvider.create(properties); } - @Bean - public InstrumentationConfig instrumentationConfig( - ConfigProperties properties, ConfigProvider configProvider) { - return new ConfigPropertiesBridge(properties, configProvider); - } - /** * Expose the {@link ConfigProperties} bean for use in other auto-configurations. * @@ -200,12 +192,6 @@ public ConfigProperties otelProperties(ConfigProvider configProvider) { .buildFromInstrumentationConfig(configProvider.getInstrumentationConfig()); } - @Bean - public InstrumentationConfig instrumentationConfig( - ConfigProperties properties, ConfigProvider configProvider) { - return new ConfigPropertiesBridge(properties, configProvider); - } - @Bean public DeclarativeConfigurationCustomizerProvider distroConfigurationCustomizerProvider() { return new ResourceCustomizerProvider(); @@ -242,11 +228,6 @@ public ConfigProperties otelProperties() { return DefaultConfigProperties.createFromMap(Collections.emptyMap()); } - @Bean - public InstrumentationConfig instrumentationConfig(ConfigProperties properties) { - return new ConfigPropertiesBridge(properties, null); - } - @Configuration @Conditional(DeclarativeConfigDisabled.class) static class PropertiesConfig { @@ -274,16 +255,6 @@ public ConfigProperties otelProperties(ApplicationContext applicationContext) { } } - @Configuration - @ConditionalOnBean(OpenTelemetry.class) - @ConditionalOnMissingBean({InstrumentationConfig.class}) - static class FallbackInstrumentationConfig { - @Bean - public InstrumentationConfig instrumentationConfig(ConfigProperties properties) { - return new ConfigPropertiesBridge(properties, null); - } - } - /** * The {@link ComponentLoader} is used by the SDK autoconfiguration to load all components, e.g. * Date: Fri, 12 Dec 2025 15:31:11 -0800 Subject: [PATCH 32/73] Remove unused EnduserConfig class --- docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md | 47 ++------ .../config/internal/EnduserConfig.java | 100 ------------------ .../properties/InstrumentationConfigUtil.java | 6 +- 3 files changed, 11 insertions(+), 142 deletions(-) delete mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java diff --git a/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md b/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md index 698652092c5f..3f0e29a51854 100644 --- a/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md +++ b/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md @@ -31,40 +31,13 @@ Provides methods: 1. **Spring Boot Autoconfiguration**: `InstrumentationConfig` is a Spring bean injected into instrumentation configurations 2. **Helper utilities**: `InstrumentationConfigUtil` wraps config access for HTTP client/server builders -3. **Enduser config**: `EnduserConfig` reads properties via `InstrumentationConfig` -4. **Deprecated property warnings**: `DeprecatedConfigProperties` reads via `InstrumentationConfig` +3. **Deprecated property warnings**: `DeprecatedConfigProperties` reads via `InstrumentationConfig` --- ## Migration Plan -### Phase 1: Migrate instrumentation-api-incubator Internal Uses - -#### 1.1 EnduserConfig -**File**: `instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java` - -**Current**: -```java -EnduserConfig(InstrumentationConfig instrumentationConfig) { - this.idEnabled = instrumentationConfig.getBoolean("otel.instrumentation.common.enduser.id.enabled", false); - // ... -} -``` - -**Target**: Change constructor to accept `OpenTelemetry` and use `DeclarativeConfigUtil`: -```java -EnduserConfig(OpenTelemetry openTelemetry) { - this.idEnabled = DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "id_enabled") - .orElse(false); - // ... -} -``` - -**Note**: Need to define the declarative config schema mapping for enduser settings. - ---- - -### Phase 2: Migrate Spring Boot Autoconfigure +### Phase 1: Migrate Spring Boot Autoconfigure #### 2.1 Remove InstrumentationConfig Bean **Files**: @@ -138,7 +111,7 @@ Update all auto-configuration classes that inject `InstrumentationConfig`: --- -### Phase 3: Migrate Javaagent Extension API +### Phase 2: Migrate Javaagent Extension API #### 3.1 DeprecatedConfigProperties **File**: `javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/DeprecatedConfigProperties.java` @@ -165,7 +138,7 @@ public static boolean getBoolean( --- -### Phase 4: Update Tests +### Phase 3: Update Tests Update all test files that reference `InstrumentationConfig`: @@ -185,7 +158,7 @@ Update all test files that reference `InstrumentationConfig`: --- -### Phase 5: Delete InstrumentationConfig +### Phase 4: Delete InstrumentationConfig #### 5.1 Delete Files - `instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java` @@ -232,11 +205,10 @@ Spring Boot autoconfigure exposes a `ConfigProperties` bean. This should remain ## Migration Order -1. **Phase 1**: `EnduserConfig` (internal, limited blast radius) -2. **Phase 2**: Spring Boot auto-configurations (bulk of changes) -3. **Phase 3**: Javaagent extension API (`DeprecatedConfigProperties`) -4. **Phase 4**: Tests -5. **Phase 5**: Delete `InstrumentationConfig` interface and `ConfigPropertiesBridge` +1. **Phase 1**: Spring Boot auto-configurations (bulk of changes) +2. **Phase 2**: Javaagent extension API (`DeprecatedConfigProperties`) +3. **Phase 3**: Tests +4. **Phase 4**: Delete `InstrumentationConfig` interface and `ConfigPropertiesBridge` --- @@ -246,7 +218,6 @@ Spring Boot autoconfigure exposes a `ConfigProperties` bean. This should remain | Module | File | Change Type | |--------|------|-------------| -| instrumentation-api-incubator | `EnduserConfig.java` | Change constructor signature | | spring-boot-autoconfigure | `OpenTelemetryAutoConfiguration.java` | Remove `InstrumentationConfig` beans | | spring-boot-autoconfigure | `InstrumentationConfigUtil.java` | Remove `InstrumentationConfig` param | | spring-boot-autoconfigure | `SpringWebfluxInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java deleted file mode 100644 index d068dc567664..000000000000 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/EnduserConfig.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.api.incubator.config.internal; - -import io.opentelemetry.api.OpenTelemetry; -import java.util.Objects; - -/** - * Configuration that controls capturing the {@code enduser.*} semantic attributes. - * - *

    The {@code enduser.*} semantic attributes are not captured by default, due to this text in the - * specification: - * - *

    - * - * Given the sensitive nature of this information, SDKs and exporters SHOULD drop these attributes - * by default and then provide a configuration parameter to turn on retention for use cases where - * the information is required and would not violate any policies or regulations. - * - *
    - * - *

    Capturing of the {@code enduser.*} semantic attributes can be individually enabled by - * configured the following properties: - * - *

    - * otel.instrumentation.common.enduser.id.enabled=true
    - * otel.instrumentation.common.enduser.role.enabled=true
    - * otel.instrumentation.common.enduser.scope.enabled=true
    - * 
    - * - *

    This class is internal and is hence not for public use. Its APIs are unstable and can change - * at any time. - */ -public class EnduserConfig { - - private final boolean idEnabled; - private final boolean roleEnabled; - private final boolean scopeEnabled; - - EnduserConfig(OpenTelemetry openTelemetry) { - Objects.requireNonNull(openTelemetry, "openTelemetry must not be null"); - - /* - * Capturing enduser.* attributes is disabled by default, because of this requirement in the specification: - * - * Given the sensitive nature of this information, SDKs and exporters SHOULD drop these attributes by default and then provide a configuration parameter to turn on retention for use cases where the information is required and would not violate any policies or regulations. - * - * https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/attributes.md#general-identity-attributes - */ - this.idEnabled = - DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "id_enabled") - .orElse(false); - this.roleEnabled = - DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "role_enabled") - .orElse(false); - this.scopeEnabled = - DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "enduser", "scope_enabled") - .orElse(false); - } - - /** - * Returns true if capturing of any {@code enduser.*} semantic attribute is enabled. - * - *

    This flag can be used by capturing instrumentations to bypass all {@code enduser.*} - * attribute capturing. - */ - public boolean isAnyEnabled() { - return this.idEnabled || this.roleEnabled || this.scopeEnabled; - } - - /** - * Returns true if capturing the {@code enduser.id} semantic attribute is enabled. - * - * @return true if capturing the {@code enduser.id} semantic attribute is enabled. - */ - public boolean isIdEnabled() { - return this.idEnabled; - } - - /** - * Returns true if capturing the {@code enduser.role} semantic attribute is enabled. - * - * @return true if capturing the {@code enduser.role} semantic attribute is enabled. - */ - public boolean isRoleEnabled() { - return this.roleEnabled; - } - - /** - * Returns true if capturing the {@code enduser.scope} semantic attribute is enabled. - * - * @return true if capturing the {@code enduser.scope} semantic attribute is enabled. - */ - public boolean isScopeEnabled() { - return this.scopeEnabled; - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java index e6ad42498344..64e534d1fc0c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java @@ -9,7 +9,7 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.function.Function; /** @@ -22,7 +22,6 @@ private InstrumentationConfigUtil() {} @CanIgnoreReturnValue public static T configureClientBuilder( OpenTelemetry openTelemetry, - InstrumentationConfig config, T builder, Function> getBuilder) { getBuilder.apply(builder).configure(openTelemetry); @@ -32,14 +31,13 @@ public static T configureClientBuilder( @CanIgnoreReturnValue public static T configureServerBuilder( OpenTelemetry openTelemetry, - InstrumentationConfig config, T builder, Function> getBuilder) { getBuilder.apply(builder).configure(openTelemetry); return builder; } - public static boolean isStatementSanitizationEnabled(InstrumentationConfig config, String key) { + public static boolean isStatementSanitizationEnabled(ConfigProperties config, String key) { return config.getBoolean( key, config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true)); } From adae2825df22e3dfd37992e1799645a6030d1113 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 15:44:51 -0800 Subject: [PATCH 33/73] InstrumentationConfig --- .../jdbc/DataSourcePostProcessor.java | 31 +++++++++---------- .../JdbcInstrumentationAutoConfiguration.java | 6 ++-- ...KafkaInstrumentationAutoConfiguration.java | 29 ++++++++--------- ...lientInstrumentationAutoConfiguration.java | 6 ++-- ...R2dbcInstrumentationAutoConfiguration.java | 6 ++-- .../R2dbcInstrumentingPostProcessor.java | 14 +++------ ...SpringSchedulingInstrumentationAspect.java | 10 +++--- ...ulingInstrumentationAutoConfiguration.java | 5 ++- .../web/RestTemplateBeanPostProcessor.java | 10 ++---- .../web/RestTemplateInstrumentation.java | 5 +-- ...ngWebInstrumentationAutoConfiguration.java | 11 +++---- ...bfluxInstrumentationAutoConfiguration.java | 10 +++--- .../webflux/WebClientBeanPostProcessor.java | 17 +++------- ...bMvc5InstrumentationAutoConfiguration.java | 4 +-- .../properties/InstrumentationConfigUtil.java | 23 +++++++++++--- .../web/RestClientBeanPostProcessor.java | 18 +++-------- ...lientInstrumentationAutoConfiguration.java | 12 +++---- ...bMvc6InstrumentationAutoConfiguration.java | 4 +-- ...mentationSpringBoot4AutoConfiguration.java | 6 ++-- ...mentationSpringBoot4AutoConfiguration.java | 6 ++-- ...mentationSpringBoot4AutoConfiguration.java | 11 +++---- 21 files changed, 99 insertions(+), 145 deletions(-) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java index 41e8b6809492..3660e1808c00 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java @@ -7,7 +7,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetry; import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetryBuilder; import io.opentelemetry.instrumentation.jdbc.datasource.internal.Experimental; @@ -31,13 +31,9 @@ final class DataSourcePostProcessor implements BeanPostProcessor, Ordered { @Nullable private static final Class ROUTING_DATA_SOURCE_CLASS = getRoutingDataSourceClass(); private final ObjectProvider openTelemetryProvider; - private final ObjectProvider configProvider; - DataSourcePostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + DataSourcePostProcessor(ObjectProvider openTelemetryProvider) { this.openTelemetryProvider = openTelemetryProvider; - this.configProvider = configProvider; } @Nullable @@ -61,24 +57,25 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { && !isRoutingDatasource(bean) && !ScopedProxyUtils.isScopedTarget(beanName)) { DataSource dataSource = (DataSource) bean; - InstrumentationConfig config = configProvider.getObject(); + OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); JdbcTelemetryBuilder builder = - JdbcTelemetry.builder(openTelemetryProvider.getObject()) + JdbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - InstrumentationConfigUtil.isStatementSanitizationEnabled( - config, "otel.instrumentation.jdbc.statement-sanitizer.enabled")) + InstrumentationConfigUtil.isStatementSanitizationEnabled(openTelemetry, "jdbc")) .setCaptureQueryParameters( - config.getBoolean( - "otel.instrumentation.jdbc.experimental.capture-query-parameters", false)) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "jdbc", "capture_query_parameters") + .orElse(false)) .setTransactionInstrumenterEnabled( - config.getBoolean( - "otel.instrumentation.jdbc.experimental.transaction.enabled", false)) + DeclarativeConfigUtil.getBoolean(openTelemetry, "jdbc", "transaction", "enabled") + .orElse(false)) .setDataSourceInstrumenterEnabled( - config.getBoolean( - "otel.instrumentation.jdbc.experimental.datasource.enabled", false)); + DeclarativeConfigUtil.getBoolean(openTelemetry, "jdbc", "datasource", "enabled") + .orElse(false)); Experimental.setEnableSqlCommenter( builder, - config.getBoolean("otel.instrumentation.jdbc.experimental.sqlcommenter.enabled", false)); + DeclarativeConfigUtil.getBoolean(openTelemetry, "jdbc", "sqlcommenter", "enabled") + .orElse(false)); DataSource otelDataSource = builder.build().wrap(dataSource); // wrap instrumented data source into a proxy that unwraps to the original data source diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java index 70ecf92407e6..5df6ef082593 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.jdbc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import javax.sql.DataSource; import org.springframework.beans.factory.ObjectProvider; @@ -34,8 +33,7 @@ public JdbcInstrumentationAutoConfiguration() {} @Bean // static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning static DataSourcePostProcessor dataSourcePostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - return new DataSourcePostProcessor(openTelemetryProvider, configProvider); + ObjectProvider openTelemetryProvider) { + return new DataSourcePostProcessor(openTelemetryProvider); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java index f1204f314cf4..9765c413106d 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java @@ -8,7 +8,7 @@ import static java.util.Collections.emptyList; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.instrumentation.spring.kafka.v2_7.SpringKafkaTelemetry; import org.springframework.beans.factory.ObjectProvider; @@ -34,19 +34,21 @@ public class KafkaInstrumentationAutoConfiguration { public KafkaInstrumentationAutoConfiguration() {} @Bean - static SpringKafkaTelemetry getTelemetry( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - InstrumentationConfig config = configProvider.getObject(); - return SpringKafkaTelemetry.builder(openTelemetryProvider.getObject()) + static SpringKafkaTelemetry getTelemetry(ObjectProvider openTelemetryProvider) { + OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); + return SpringKafkaTelemetry.builder(openTelemetry) .setCaptureExperimentalSpanAttributes( - config.getBoolean("otel.instrumentation.kafka.experimental-span-attributes", false)) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "kafka", "experimental_span_attributes") + .orElse(false)) .setMessagingReceiveInstrumentationEnabled( - config.getBoolean( - "otel.instrumentation.messaging.experimental.receive-telemetry.enabled", false)) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "messaging", "experimental", "receive_telemetry", "enabled") + .orElse(false)) .setCapturedHeaders( - config.getList( - "otel.instrumentation.messaging.experimental.capture-headers", emptyList())) + DeclarativeConfigUtil.getList( + openTelemetry, "messaging", "experimental", "capture_headers") + .orElse(emptyList())) .build(); } @@ -58,9 +60,8 @@ static SpringKafkaTelemetry getTelemetry( matchIfMissing = true) static ConcurrentKafkaListenerContainerFactoryPostProcessor otelKafkaListenerContainerFactoryBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + ObjectProvider openTelemetryProvider) { return new ConcurrentKafkaListenerContainerFactoryPostProcessor( - () -> getTelemetry(openTelemetryProvider, configProvider)); + () -> getTelemetry(openTelemetryProvider)); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java index af47b2371991..72972cf5e62e 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java @@ -7,7 +7,6 @@ import com.mongodb.MongoClientSettings; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.mongo.v3_1.MongoTelemetry; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; @@ -29,14 +28,13 @@ public class MongoClientInstrumentationAutoConfiguration { @Bean - MongoClientSettingsBuilderCustomizer customizer( - OpenTelemetry openTelemetry, InstrumentationConfig config) { + MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { return builder -> builder.addCommandListener( MongoTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( InstrumentationConfigUtil.isStatementSanitizationEnabled( - config, "otel.instrumentation.mongo.statement-sanitizer.enabled")) + openTelemetry, "mongo")) .build() .newCommandListener()); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java index 4dcddb592aca..12232ef953ed 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.r2dbc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import io.r2dbc.spi.ConnectionFactory; import org.springframework.beans.factory.ObjectProvider; @@ -28,8 +27,7 @@ public R2dbcInstrumentationAutoConfiguration() {} @Bean // static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning static R2dbcInstrumentingPostProcessor r2dbcInstrumentingPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - return new R2dbcInstrumentingPostProcessor(openTelemetryProvider, configProvider); + ObjectProvider openTelemetryProvider) { + return new R2dbcInstrumentingPostProcessor(openTelemetryProvider); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java index 09849deef13b..068304e7be74 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.r2dbc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetry; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.r2dbc.spi.ConnectionFactory; @@ -19,24 +18,19 @@ class R2dbcInstrumentingPostProcessor implements BeanPostProcessor { private final ObjectProvider openTelemetryProvider; - private final ObjectProvider configProvider; - R2dbcInstrumentingPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + R2dbcInstrumentingPostProcessor(ObjectProvider openTelemetryProvider) { this.openTelemetryProvider = openTelemetryProvider; - this.configProvider = configProvider; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) { if (bean instanceof ConnectionFactory && !ScopedProxyUtils.isScopedTarget(beanName)) { ConnectionFactory connectionFactory = (ConnectionFactory) bean; - return R2dbcTelemetry.builder(openTelemetryProvider.getObject()) + OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); + return R2dbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - InstrumentationConfigUtil.isStatementSanitizationEnabled( - configProvider.getObject(), - "otel.instrumentation.r2dbc.statement-sanitizer.enabled")) + InstrumentationConfigUtil.isStatementSanitizationEnabled(openTelemetry, "r2dbc")) .build() .wrapConnectionFactory(connectionFactory, getConnectionFactoryOptions(connectionFactory)); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java index 6d84cde77985..3599bd6bddb2 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java @@ -9,7 +9,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; @@ -42,8 +42,7 @@ final class SpringSchedulingInstrumentationAspect { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-boot-autoconfigure"; private final Instrumenter instrumenter; - public SpringSchedulingInstrumentationAspect( - OpenTelemetry openTelemetry, InstrumentationConfig config) { + public SpringSchedulingInstrumentationAspect(OpenTelemetry openTelemetry) { CodeAttributesGetter codedAttributesGetter = ClassAndMethod.codeAttributesGetter(); InstrumenterBuilder builder = @@ -52,8 +51,9 @@ public SpringSchedulingInstrumentationAspect( INSTRUMENTATION_NAME, CodeSpanNameExtractor.create(codedAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codedAttributesGetter)); - if (config.getBoolean( - "otel.instrumentation.spring-scheduling.experimental-span-attributes", false)) { + if (DeclarativeConfigUtil.getBoolean( + openTelemetry, "spring_scheduling", "experimental_span_attributes") + .orElse(false)) { builder.addAttributesExtractor( AttributesExtractor.constant(AttributeKey.stringKey("job.system"), "spring_scheduling")); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAutoConfiguration.java index 85a54625e455..cfeae0637929 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.scheduling; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import org.aspectj.lang.annotation.Aspect; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -26,7 +25,7 @@ class SpringSchedulingInstrumentationAutoConfiguration { @Bean SpringSchedulingInstrumentationAspect springSchedulingInstrumentationAspect( - OpenTelemetry openTelemetry, InstrumentationConfig config) { - return new SpringSchedulingInstrumentationAspect(openTelemetry, config); + OpenTelemetry openTelemetry) { + return new SpringSchedulingInstrumentationAspect(openTelemetry); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateBeanPostProcessor.java index 8ffe8f0c9b5a..d9b54aa22b40 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateBeanPostProcessor.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.web.client.RestTemplate; @@ -19,13 +18,8 @@ public final class RestTemplateBeanPostProcessor implements BeanPostProcessor { private final ObjectProvider openTelemetryProvider; - private final ObjectProvider configProvider; - - RestTemplateBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + RestTemplateBeanPostProcessor(ObjectProvider openTelemetryProvider) { this.openTelemetryProvider = openTelemetryProvider; - this.configProvider = configProvider; } @Override @@ -35,6 +29,6 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { } return RestTemplateInstrumentation.addIfNotPresent( - (RestTemplate) bean, openTelemetryProvider.getObject(), configProvider.getObject()); + (RestTemplate) bean, openTelemetryProvider.getObject()); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java index 9af545d9d6ce..e3ece205090c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java @@ -7,7 +7,6 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry; import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil; @@ -20,13 +19,11 @@ class RestTemplateInstrumentation { private RestTemplateInstrumentation() {} @CanIgnoreReturnValue - static RestTemplate addIfNotPresent( - RestTemplate restTemplate, OpenTelemetry openTelemetry, InstrumentationConfig config) { + static RestTemplate addIfNotPresent(RestTemplate restTemplate, OpenTelemetry openTelemetry) { ClientHttpRequestInterceptor instrumentationInterceptor = InstrumentationConfigUtil.configureClientBuilder( openTelemetry, - config, SpringWebTelemetry.builder(openTelemetry), WebTelemetryUtil.getBuilderExtractor()) .build() diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java index 97d5bd9b52d5..10e9178c2e12 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -33,17 +32,15 @@ public SpringWebInstrumentationAutoConfiguration() {} // static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning @Bean static RestTemplateBeanPostProcessor otelRestTemplateBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - return new RestTemplateBeanPostProcessor(openTelemetryProvider, configProvider); + ObjectProvider openTelemetryProvider) { + return new RestTemplateBeanPostProcessor(openTelemetryProvider); } @Bean RestTemplateCustomizer otelRestTemplateCustomizer( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + ObjectProvider openTelemetryProvider) { return restTemplate -> RestTemplateInstrumentation.addIfNotPresent( - restTemplate, openTelemetryProvider.getObject(), configProvider.getObject()); + restTemplate, openTelemetryProvider.getObject()); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java index 79bacde3ccc2..93e9a1fde417 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webflux; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -33,14 +32,13 @@ public SpringWebfluxInstrumentationAutoConfiguration() {} // static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning @Bean static WebClientBeanPostProcessor otelWebClientBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - return new WebClientBeanPostProcessor(openTelemetryProvider, configProvider); + ObjectProvider openTelemetryProvider) { + return new WebClientBeanPostProcessor(openTelemetryProvider); } @Bean - WebFilter telemetryFilter(OpenTelemetry openTelemetry, InstrumentationConfig config) { - return WebClientBeanPostProcessor.getWebfluxServerTelemetry(openTelemetry, config) + WebFilter telemetryFilter(OpenTelemetry openTelemetry) { + return WebClientBeanPostProcessor.getWebfluxServerTelemetry(openTelemetry) .createWebFilterAndRegisterReactorHook(); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java index 9ad8b3529fcd..355bf8ea2450 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webflux; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetry; import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxServerTelemetry; @@ -23,30 +22,22 @@ final class WebClientBeanPostProcessor implements BeanPostProcessor { private final ObjectProvider openTelemetryProvider; - private final ObjectProvider configProvider; - WebClientBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + WebClientBeanPostProcessor(ObjectProvider openTelemetryProvider) { this.openTelemetryProvider = openTelemetryProvider; - this.configProvider = configProvider; } - static SpringWebfluxClientTelemetry getWebfluxClientTelemetry( - OpenTelemetry openTelemetry, InstrumentationConfig config) { + static SpringWebfluxClientTelemetry getWebfluxClientTelemetry(OpenTelemetry openTelemetry) { return InstrumentationConfigUtil.configureClientBuilder( openTelemetry, - config, SpringWebfluxClientTelemetry.builder(openTelemetry), SpringWebfluxBuilderUtil.getClientBuilderExtractor()) .build(); } - static SpringWebfluxServerTelemetry getWebfluxServerTelemetry( - OpenTelemetry openTelemetry, InstrumentationConfig config) { + static SpringWebfluxServerTelemetry getWebfluxServerTelemetry(OpenTelemetry openTelemetry) { return InstrumentationConfigUtil.configureServerBuilder( openTelemetry, - config, SpringWebfluxServerTelemetry.builder(openTelemetry), SpringWebfluxBuilderUtil.getServerBuilderExtractor()) .build(); @@ -66,7 +57,7 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { private WebClient.Builder wrapBuilder(WebClient.Builder webClientBuilder) { SpringWebfluxClientTelemetry instrumentation = - getWebfluxClientTelemetry(openTelemetryProvider.getObject(), configProvider.getObject()); + getWebfluxClientTelemetry(openTelemetryProvider.getObject()); return webClientBuilder.filters(instrumentation::addFilter); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java index f85cfd618084..8e47a741b7f8 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webmvc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry; @@ -28,10 +27,9 @@ public class SpringWebMvc5InstrumentationAutoConfiguration { @Bean - Filter otelWebMvcFilter(OpenTelemetry openTelemetry, InstrumentationConfig config) { + Filter otelWebMvcFilter(OpenTelemetry openTelemetry) { return InstrumentationConfigUtil.configureServerBuilder( openTelemetry, - config, SpringWebMvcTelemetry.builder(openTelemetry), SpringMvcBuilderUtil.getBuilderExtractor()) .build() diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java index 64e534d1fc0c..739633f8edd5 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java @@ -9,7 +9,7 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.util.function.Function; /** @@ -37,8 +37,23 @@ public static T configureServerBuilder( return builder; } - public static boolean isStatementSanitizationEnabled(ConfigProperties config, String key) { - return config.getBoolean( - key, config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true)); + /** + * Check if statement sanitization is enabled for a specific instrumentation. + * + * @param openTelemetry the OpenTelemetry instance + * @param instrumentationName the name of the instrumentation (e.g., "jdbc", "r2dbc", "mongo") + * @return true if statement sanitization is enabled + */ + public static boolean isStatementSanitizationEnabled( + OpenTelemetry openTelemetry, String instrumentationName) { + // Check instrumentation-specific setting first + return DeclarativeConfigUtil.getBoolean( + openTelemetry, instrumentationName, "statement_sanitizer", "enabled") + // Fall back to common setting + .or( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, "common", "db_statement_sanitizer", "enabled")) + .orElse(true); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java index a8fbe8ed9e03..b229273b9c1c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry; import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil; @@ -18,27 +17,22 @@ final class RestClientBeanPostProcessor implements BeanPostProcessor { private final ObjectProvider openTelemetryProvider; - private final ObjectProvider configProvider; - public RestClientBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + public RestClientBeanPostProcessor(ObjectProvider openTelemetryProvider) { this.openTelemetryProvider = openTelemetryProvider; - this.configProvider = configProvider; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) { if (bean instanceof RestClient restClient) { - return addRestClientInterceptorIfNotPresent( - restClient, openTelemetryProvider.getObject(), configProvider.getObject()); + return addRestClientInterceptorIfNotPresent(restClient, openTelemetryProvider.getObject()); } return bean; } private static RestClient addRestClientInterceptorIfNotPresent( - RestClient restClient, OpenTelemetry openTelemetry, InstrumentationConfig config) { - ClientHttpRequestInterceptor instrumentationInterceptor = getInterceptor(openTelemetry, config); + RestClient restClient, OpenTelemetry openTelemetry) { + ClientHttpRequestInterceptor instrumentationInterceptor = getInterceptor(openTelemetry); return restClient .mutate() @@ -54,11 +48,9 @@ private static RestClient addRestClientInterceptorIfNotPresent( .build(); } - static ClientHttpRequestInterceptor getInterceptor( - OpenTelemetry openTelemetry, InstrumentationConfig config) { + static ClientHttpRequestInterceptor getInterceptor(OpenTelemetry openTelemetry) { return InstrumentationConfigUtil.configureClientBuilder( openTelemetry, - config, SpringWebTelemetry.builder(openTelemetry), WebTelemetryUtil.getBuilderExtractor()) .build() diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfiguration.java index 72c83ef5d5ad..3501b65e1b67 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; @@ -33,18 +32,15 @@ public class RestClientInstrumentationAutoConfiguration { @Bean static RestClientBeanPostProcessor otelRestClientBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - return new RestClientBeanPostProcessor(openTelemetryProvider, configProvider); + ObjectProvider openTelemetryProvider) { + return new RestClientBeanPostProcessor(openTelemetryProvider); } @Bean RestClientCustomizer otelRestClientCustomizer( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + ObjectProvider openTelemetryProvider) { return builder -> builder.requestInterceptor( - RestClientBeanPostProcessor.getInterceptor( - openTelemetryProvider.getObject(), configProvider.getObject())); + RestClientBeanPostProcessor.getInterceptor(openTelemetryProvider.getObject())); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java index debe1c62cfe4..84e553dfeb6b 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webmvc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry; @@ -28,10 +27,9 @@ public class SpringWebMvc6InstrumentationAutoConfiguration { @Bean - Filter otelWebMvcFilter(OpenTelemetry openTelemetry, InstrumentationConfig config) { + Filter otelWebMvcFilter(OpenTelemetry openTelemetry) { return InstrumentationConfigUtil.configureServerBuilder( openTelemetry, - config, SpringWebMvcTelemetry.builder(openTelemetry), SpringMvcBuilderUtil.getBuilderExtractor()) .build() diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationSpringBoot4AutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationSpringBoot4AutoConfiguration.java index ab8ad9cdf99f..78c732a8e190 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationSpringBoot4AutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/JdbcInstrumentationSpringBoot4AutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.jdbc; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import javax.sql.DataSource; import org.springframework.beans.factory.ObjectProvider; @@ -34,8 +33,7 @@ public JdbcInstrumentationSpringBoot4AutoConfiguration() {} @Bean // static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning static DataSourcePostProcessor dataSourcePostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - return new DataSourcePostProcessor(openTelemetryProvider, configProvider); + ObjectProvider openTelemetryProvider) { + return new DataSourcePostProcessor(openTelemetryProvider); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java index 09dcf88b3480..0a02e7af6f6e 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java @@ -7,7 +7,6 @@ import com.mongodb.MongoClientSettings; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.mongo.v3_1.MongoTelemetry; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; @@ -26,14 +25,13 @@ public class MongoClientInstrumentationSpringBoot4AutoConfiguration { @Bean - MongoClientSettingsBuilderCustomizer customizer( - OpenTelemetry openTelemetry, InstrumentationConfig config) { + MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { return builder -> builder.addCommandListener( MongoTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( InstrumentationConfigUtil.isStatementSanitizationEnabled( - config, "otel.instrumentation.mongo.statement-sanitizer.enabled")) + openTelemetry, "mongo")) .build() .newCommandListener()); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationSpringBoot4AutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationSpringBoot4AutoConfiguration.java index 04bd21413678..77b15036c6b1 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationSpringBoot4AutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/SpringWebInstrumentationSpringBoot4AutoConfiguration.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -33,17 +32,15 @@ public SpringWebInstrumentationSpringBoot4AutoConfiguration() {} // static to avoid "is not eligible for getting processed by all BeanPostProcessors" warning @Bean static RestTemplateBeanPostProcessor otelRestTemplateBeanPostProcessor( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { - return new RestTemplateBeanPostProcessor(openTelemetryProvider, configProvider); + ObjectProvider openTelemetryProvider) { + return new RestTemplateBeanPostProcessor(openTelemetryProvider); } @Bean RestTemplateCustomizer otelRestTemplateCustomizer( - ObjectProvider openTelemetryProvider, - ObjectProvider configProvider) { + ObjectProvider openTelemetryProvider) { return restTemplate -> RestTemplateInstrumentation.addIfNotPresent( - restTemplate, openTelemetryProvider.getObject(), configProvider.getObject()); + restTemplate, openTelemetryProvider.getObject()); } } From 4101a3f115faedb05f736d5a15e36ee79f4a1b3c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 15:50:37 -0800 Subject: [PATCH 34/73] more --- .../jdbc/DataSourcePostProcessor.java | 9 ++- ...lientInstrumentationAutoConfiguration.java | 11 +++- .../R2dbcInstrumentingPostProcessor.java | 10 +++- .../web/RestTemplateInstrumentation.java | 13 ++-- .../webflux/WebClientBeanPostProcessor.java | 21 ++++--- ...bMvc5InstrumentationAutoConfiguration.java | 11 ++-- .../properties/InstrumentationConfigUtil.java | 59 ------------------- .../web/RestClientBeanPostProcessor.java | 11 ++-- ...bMvc6InstrumentationAutoConfiguration.java | 11 ++-- ...mentationSpringBoot4AutoConfiguration.java | 11 +++- 10 files changed, 57 insertions(+), 110 deletions(-) delete mode 100644 instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java index 3660e1808c00..825b59a0d484 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java @@ -11,7 +11,6 @@ import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetry; import io.opentelemetry.instrumentation.jdbc.datasource.JdbcTelemetryBuilder; import io.opentelemetry.instrumentation.jdbc.datasource.internal.Experimental; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; @@ -61,7 +60,13 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { JdbcTelemetryBuilder builder = JdbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - InstrumentationConfigUtil.isStatementSanitizationEnabled(openTelemetry, "jdbc")) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "jdbc", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, "common", "db_statement_sanitizer", "enabled") + .orElse(true))) .setCaptureQueryParameters( DeclarativeConfigUtil.getBoolean( openTelemetry, "jdbc", "capture_query_parameters") diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java index 72972cf5e62e..7629142339ef 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java @@ -7,9 +7,9 @@ import com.mongodb.MongoClientSettings; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.mongo.v3_1.MongoTelemetry; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer; import org.springframework.context.annotation.Bean; @@ -33,8 +33,13 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { builder.addCommandListener( MongoTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - InstrumentationConfigUtil.isStatementSanitizationEnabled( - openTelemetry, "mongo")) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "mongo", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, "common", "db_statement_sanitizer", "enabled") + .orElse(true))) .build() .newCommandListener()); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java index 068304e7be74..857acc409175 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java @@ -6,8 +6,8 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.r2dbc; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.shaded.R2dbcTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.r2dbc.spi.ConnectionFactory; import io.r2dbc.spi.ConnectionFactoryOptions; import org.springframework.aop.scope.ScopedProxyUtils; @@ -30,7 +30,13 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); return R2dbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - InstrumentationConfigUtil.isStatementSanitizationEnabled(openTelemetry, "r2dbc")) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "r2dbc", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, "common", "db_statement_sanitizer", "enabled") + .orElse(true))) .build() .wrapConnectionFactory(connectionFactory, getConnectionFactoryOptions(connectionFactory)); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java index e3ece205090c..eb3c8ee15623 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestTemplateInstrumentation.java @@ -7,8 +7,8 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry; +import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetryBuilder; import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil; import java.util.List; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -20,14 +20,9 @@ private RestTemplateInstrumentation() {} @CanIgnoreReturnValue static RestTemplate addIfNotPresent(RestTemplate restTemplate, OpenTelemetry openTelemetry) { - - ClientHttpRequestInterceptor instrumentationInterceptor = - InstrumentationConfigUtil.configureClientBuilder( - openTelemetry, - SpringWebTelemetry.builder(openTelemetry), - WebTelemetryUtil.getBuilderExtractor()) - .build() - .newInterceptor(); + SpringWebTelemetryBuilder builder = SpringWebTelemetry.builder(openTelemetry); + WebTelemetryUtil.getBuilderExtractor().apply(builder).configure(openTelemetry); + ClientHttpRequestInterceptor instrumentationInterceptor = builder.build().newInterceptor(); List restTemplateInterceptors = restTemplate.getInterceptors(); if (restTemplateInterceptors.stream() diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java index 355bf8ea2450..ec2bafee919e 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessor.java @@ -6,9 +6,10 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.webflux; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetry; +import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxClientTelemetryBuilder; import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxServerTelemetry; +import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxServerTelemetryBuilder; import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.SpringWebfluxBuilderUtil; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.BeanPostProcessor; @@ -28,19 +29,17 @@ final class WebClientBeanPostProcessor implements BeanPostProcessor { } static SpringWebfluxClientTelemetry getWebfluxClientTelemetry(OpenTelemetry openTelemetry) { - return InstrumentationConfigUtil.configureClientBuilder( - openTelemetry, - SpringWebfluxClientTelemetry.builder(openTelemetry), - SpringWebfluxBuilderUtil.getClientBuilderExtractor()) - .build(); + SpringWebfluxClientTelemetryBuilder builder = + SpringWebfluxClientTelemetry.builder(openTelemetry); + SpringWebfluxBuilderUtil.getClientBuilderExtractor().apply(builder).configure(openTelemetry); + return builder.build(); } static SpringWebfluxServerTelemetry getWebfluxServerTelemetry(OpenTelemetry openTelemetry) { - return InstrumentationConfigUtil.configureServerBuilder( - openTelemetry, - SpringWebfluxServerTelemetry.builder(openTelemetry), - SpringWebfluxBuilderUtil.getServerBuilderExtractor()) - .build(); + SpringWebfluxServerTelemetryBuilder builder = + SpringWebfluxServerTelemetry.builder(openTelemetry); + SpringWebfluxBuilderUtil.getServerBuilderExtractor().apply(builder).configure(openTelemetry); + return builder.build(); } @Override diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java index 8e47a741b7f8..de866093b76a 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc5InstrumentationAutoConfiguration.java @@ -7,8 +7,8 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetry; +import io.opentelemetry.instrumentation.spring.webmvc.v5_3.SpringWebMvcTelemetryBuilder; import io.opentelemetry.instrumentation.spring.webmvc.v5_3.internal.SpringMvcBuilderUtil; import javax.servlet.Filter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -28,11 +28,8 @@ public class SpringWebMvc5InstrumentationAutoConfiguration { @Bean Filter otelWebMvcFilter(OpenTelemetry openTelemetry) { - return InstrumentationConfigUtil.configureServerBuilder( - openTelemetry, - SpringWebMvcTelemetry.builder(openTelemetry), - SpringMvcBuilderUtil.getBuilderExtractor()) - .build() - .createServletFilter(); + SpringWebMvcTelemetryBuilder builder = SpringWebMvcTelemetry.builder(openTelemetry); + SpringMvcBuilderUtil.getBuilderExtractor().apply(builder).configure(openTelemetry); + return builder.build().createServletFilter(); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java deleted file mode 100644 index 739633f8edd5..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/InstrumentationConfigUtil.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; - -import com.google.errorprone.annotations.CanIgnoreReturnValue; -import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; -import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpServerInstrumenterBuilder; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import java.util.function.Function; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public final class InstrumentationConfigUtil { - private InstrumentationConfigUtil() {} - - @CanIgnoreReturnValue - public static T configureClientBuilder( - OpenTelemetry openTelemetry, - T builder, - Function> getBuilder) { - getBuilder.apply(builder).configure(openTelemetry); - return builder; - } - - @CanIgnoreReturnValue - public static T configureServerBuilder( - OpenTelemetry openTelemetry, - T builder, - Function> getBuilder) { - getBuilder.apply(builder).configure(openTelemetry); - return builder; - } - - /** - * Check if statement sanitization is enabled for a specific instrumentation. - * - * @param openTelemetry the OpenTelemetry instance - * @param instrumentationName the name of the instrumentation (e.g., "jdbc", "r2dbc", "mongo") - * @return true if statement sanitization is enabled - */ - public static boolean isStatementSanitizationEnabled( - OpenTelemetry openTelemetry, String instrumentationName) { - // Check instrumentation-specific setting first - return DeclarativeConfigUtil.getBoolean( - openTelemetry, instrumentationName, "statement_sanitizer", "enabled") - // Fall back to common setting - .or( - () -> - DeclarativeConfigUtil.getBoolean( - openTelemetry, "common", "db_statement_sanitizer", "enabled")) - .orElse(true); - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java index b229273b9c1c..6599d0ae92ad 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientBeanPostProcessor.java @@ -6,8 +6,8 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetry; +import io.opentelemetry.instrumentation.spring.web.v3_1.SpringWebTelemetryBuilder; import io.opentelemetry.instrumentation.spring.web.v3_1.internal.WebTelemetryUtil; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.config.BeanPostProcessor; @@ -49,11 +49,8 @@ private static RestClient addRestClientInterceptorIfNotPresent( } static ClientHttpRequestInterceptor getInterceptor(OpenTelemetry openTelemetry) { - return InstrumentationConfigUtil.configureClientBuilder( - openTelemetry, - SpringWebTelemetry.builder(openTelemetry), - WebTelemetryUtil.getBuilderExtractor()) - .build() - .newInterceptor(); + SpringWebTelemetryBuilder builder = SpringWebTelemetry.builder(openTelemetry); + WebTelemetryUtil.getBuilderExtractor().apply(builder).configure(openTelemetry); + return builder.build().newInterceptor(); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java index 84e553dfeb6b..71396ffdf34c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring3/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvc6InstrumentationAutoConfiguration.java @@ -7,8 +7,8 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetry; +import io.opentelemetry.instrumentation.spring.webmvc.v6_0.SpringWebMvcTelemetryBuilder; import io.opentelemetry.instrumentation.spring.webmvc.v6_0.internal.SpringMvcBuilderUtil; import jakarta.servlet.Filter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -28,11 +28,8 @@ public class SpringWebMvc6InstrumentationAutoConfiguration { @Bean Filter otelWebMvcFilter(OpenTelemetry openTelemetry) { - return InstrumentationConfigUtil.configureServerBuilder( - openTelemetry, - SpringWebMvcTelemetry.builder(openTelemetry), - SpringMvcBuilderUtil.getBuilderExtractor()) - .build() - .createServletFilter(); + SpringWebMvcTelemetryBuilder builder = SpringWebMvcTelemetry.builder(openTelemetry); + SpringMvcBuilderUtil.getBuilderExtractor().apply(builder).configure(openTelemetry); + return builder.build().createServletFilter(); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java index 0a02e7af6f6e..994b1d30ede2 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java @@ -7,9 +7,9 @@ import com.mongodb.MongoClientSettings; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.mongo.v3_1.MongoTelemetry; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.InstrumentationConfigUtil; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.mongodb.autoconfigure.MongoClientSettingsBuilderCustomizer; import org.springframework.context.annotation.Bean; @@ -30,8 +30,13 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { builder.addCommandListener( MongoTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - InstrumentationConfigUtil.isStatementSanitizationEnabled( - openTelemetry, "mongo")) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "mongo", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, "common", "db_statement_sanitizer", "enabled") + .orElse(true))) .build() .newCommandListener()); } From fbb8ea0f7ba30e4edec2b17b808683e483d4b7d1 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 16:01:02 -0800 Subject: [PATCH 35/73] Remove InstrumentationConfig interface - Delete InstrumentationConfig interface from instrumentation-api-incubator - Delete ConfigPropertiesBridge that implemented InstrumentationConfig - Delete unused DeprecatedConfigProperties from javaagent-extension-api - Update all test files to remove InstrumentationConfig bean registrations - Delete migration plan document All usages have been migrated to DeclarativeConfigUtil (primary) and ConfigProperties (secondary) in previous commits. --- docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md | 258 ------------------ .../internal/InstrumentationConfig.java | 139 ---------- .../properties/ConfigPropertiesBridge.java | 146 ---------- .../SchedulingInstrumentationAspectTest.java | 15 +- ...gInstrumentationAutoConfigurationTest.java | 9 - ...xInstrumentationAutoConfigurationTest.java | 9 - .../WebClientBeanPostProcessorTest.java | 27 +- ...Instrumentation5AutoConfigurationTest.java | 9 - .../autoconfigure/DeclarativeConfigTest.java | 22 +- ...tInstrumentationAutoConfigurationTest.java | 9 - ...Instrumentation6AutoConfigurationTest.java | 9 - ...cInstrumentationAutoConfigurationTest.java | 7 - ...aInstrumentationAutoConfigurationTest.java | 7 - ...cInstrumentationAutoConfigurationTest.java | 9 - ...bInstrumentationAutoConfigurationTest.java | 9 - .../internal/DeprecatedConfigProperties.java | 52 ---- 16 files changed, 15 insertions(+), 721 deletions(-) delete mode 100644 docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md delete mode 100644 instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java delete mode 100644 instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java delete mode 100644 javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/DeprecatedConfigProperties.java diff --git a/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md b/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md deleted file mode 100644 index 3f0e29a51854..000000000000 --- a/docs/REMOVE-INSTRUMENTATION-CONFIG-PLAN.md +++ /dev/null @@ -1,258 +0,0 @@ -# Plan: Remove InstrumentationConfig Interface - -## Overview - -This document outlines the plan to remove the `InstrumentationConfig` interface and consolidate on: -1. **Primary**: `DeclarativeConfigUtil` - for accessing configuration from `OpenTelemetry` instance -2. **Secondary**: `ConfigProperties` - for SDK autoconfigure compatibility (SPI interfaces) - -## Current State - -### InstrumentationConfig Interface -**Location**: `instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java` - -Provides methods: -- `getString(name)`, `getString(name, default)` -- `getBoolean(name, default)` -- `getInt(name, default)`, `getLong(name, default)`, `getDouble(name, default)` -- `getDuration(name, default)` -- `getList(name)`, `getList(name, default)` -- `getMap(name, default)` -- `isDeclarative()` - whether declarative config is in use -- `getDeclarativeConfig(node)` - get declarative config for a node -- `getConfigProvider()` - get the ConfigProvider - -### Implementations -1. **ConfigPropertiesBridge** (`spring-boot-autoconfigure/.../properties/ConfigPropertiesBridge.java`) - - Wraps `ConfigProperties` and optionally `ConfigProvider` - - Used as a Spring bean in autoconfiguration - -### Key Usage Patterns - -1. **Spring Boot Autoconfiguration**: `InstrumentationConfig` is a Spring bean injected into instrumentation configurations -2. **Helper utilities**: `InstrumentationConfigUtil` wraps config access for HTTP client/server builders -3. **Deprecated property warnings**: `DeprecatedConfigProperties` reads via `InstrumentationConfig` - ---- - -## Migration Plan - -### Phase 1: Migrate Spring Boot Autoconfigure - -#### 2.1 Remove InstrumentationConfig Bean -**Files**: -- `OpenTelemetryAutoConfiguration.java` - -**Current**: Creates `InstrumentationConfig` beans in multiple configurations: -```java -@Bean -public InstrumentationConfig instrumentationConfig(ConfigProperties properties, ConfigProvider configProvider) { - return new ConfigPropertiesBridge(properties, configProvider); -} -``` - -**Target**: Remove `InstrumentationConfig` bean creation. Consumers should use `OpenTelemetry` directly. - -#### 2.2 InstrumentationConfigUtil -**File**: `spring-boot-autoconfigure/.../properties/InstrumentationConfigUtil.java` - -**Current**: -```java -public static T configureClientBuilder( - OpenTelemetry openTelemetry, - InstrumentationConfig config, - T builder, - Function> getBuilder) { - getBuilder.apply(builder).configure(openTelemetry); - return builder; -} - -public static boolean isStatementSanitizationEnabled(InstrumentationConfig config, String key) { - return config.getBoolean(key, config.getBoolean("otel.instrumentation.common.db-statement-sanitizer.enabled", true)); -} -``` - -**Target**: Remove `InstrumentationConfig` parameter (already not used in configure methods): -```java -public static T configureClientBuilder( - OpenTelemetry openTelemetry, - T builder, - Function> getBuilder) { - getBuilder.apply(builder).configure(openTelemetry); - return builder; -} - -public static boolean isStatementSanitizationEnabled(OpenTelemetry openTelemetry, String key) { - // Use DeclarativeConfigUtil for key, fall back to common setting - return DeclarativeConfigUtil.getBoolean(openTelemetry, /* path for key */) - .or(() -> DeclarativeConfigUtil.getBoolean(openTelemetry, "common", "db_statement_sanitizer", "enabled")) - .orElse(true); -} -``` - -#### 2.3 Instrumentation Auto-Configurations - -Update all auto-configuration classes that inject `InstrumentationConfig`: - -| File | Change | -|------|--------| -| `SpringWebfluxInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | -| `SpringWebMvc5InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | -| `SpringWebMvc6InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | -| `RestClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | -| `RestClientBeanPostProcessor.java` | Remove `InstrumentationConfig` field | -| `WebClientBeanPostProcessor.java` | Remove `InstrumentationConfig` parameter | -| `JdbcInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` parameter | -| `MongoClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` parameter | -| `MongoClientInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` parameter | -| `DataSourcePostProcessor.java` | Remove `InstrumentationConfig` field | -| `R2dbcInstrumentingPostProcessor.java` | Remove `InstrumentationConfig` field | -| `SchedulingInstrumentationAspectTest.java` | Update test to not use `InstrumentationConfig` | - ---- - -### Phase 2: Migrate Javaagent Extension API - -#### 3.1 DeprecatedConfigProperties -**File**: `javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/DeprecatedConfigProperties.java` - -**Current**: -```java -public static boolean getBoolean( - InstrumentationConfig config, String deprecatedPropertyName, String newPropertyName, boolean defaultValue) { - warnIfUsed(config, deprecatedPropertyName, newPropertyName); - boolean value = config.getBoolean(deprecatedPropertyName, defaultValue); - return config.getBoolean(newPropertyName, value); -} -``` - -**Target**: Change to use `ConfigProperties`: -```java -public static boolean getBoolean( - ConfigProperties config, String deprecatedPropertyName, String newPropertyName, boolean defaultValue) { - warnIfUsed(config, deprecatedPropertyName, newPropertyName); - boolean value = config.getBoolean(deprecatedPropertyName, defaultValue); - return config.getBoolean(newPropertyName, value); -} -``` - ---- - -### Phase 3: Update Tests - -Update all test files that reference `InstrumentationConfig`: - -| File | Change | -|------|--------| -| `AbstractJdbcInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `AbstractR2DbcInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `AbstractSpringWebInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `AbstractKafkaInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `DeclarativeConfigTest.java` | Update assertions | -| `SpringWebMvcInstrumentation5AutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `SpringWebMvcInstrumentation6AutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `RestClientInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `SchedulingInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `SpringWebfluxInstrumentationAutoConfigurationTest.java` | Remove `InstrumentationConfig.class` from context | -| `WebClientBeanPostProcessorTest.java` | Update to not use `InstrumentationConfig` | - ---- - -### Phase 4: Delete InstrumentationConfig - -#### 5.1 Delete Files -- `instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java` -- `spring-boot-autoconfigure/.../properties/ConfigPropertiesBridge.java` - ---- - -## Decision Points / Open Questions - -### 1. Declarative Config Schema for Properties - -Currently, `InstrumentationConfig` uses flat property names like `otel.instrumentation.common.enduser.id.enabled`. - -For `DeclarativeConfigUtil`, we need to define the hierarchical path in declarative config YAML: -```yaml -instrumentation: - java: - common: - enduser: - id_enabled: true -``` - -**Decision needed**: Confirm the schema structure for all properties currently accessed via `InstrumentationConfig`. - -### 2. ConfigProperties for SPI Interfaces - -Several SPI interfaces in `javaagent-extension-api` use `ConfigProperties`: -- `InstrumentationModule.defaultEnabled(ConfigProperties)` -- `IgnoredTypesConfigurer.configure(..., ConfigProperties)` -- `AgentExtension.extend(..., ConfigProperties)` -- `BootstrapPackagesConfigurer.configure(..., ConfigProperties)` - -These are **external APIs** and cannot be easily changed. They will continue to use `ConfigProperties`. - -**Decision**: Leave SPI interfaces using `ConfigProperties`. Only migrate internal code to `DeclarativeConfigUtil`. - -### 3. Spring Boot ConfigProperties Bean - -Spring Boot autoconfigure exposes a `ConfigProperties` bean. This should remain for: -- Backward compatibility with user customizations -- SPI interfaces that need `ConfigProperties` - ---- - -## Migration Order - -1. **Phase 1**: Spring Boot auto-configurations (bulk of changes) -2. **Phase 2**: Javaagent extension API (`DeprecatedConfigProperties`) -3. **Phase 3**: Tests -4. **Phase 4**: Delete `InstrumentationConfig` interface and `ConfigPropertiesBridge` - ---- - -## Files Summary - -### Files to Modify - -| Module | File | Change Type | -|--------|------|-------------| -| spring-boot-autoconfigure | `OpenTelemetryAutoConfiguration.java` | Remove `InstrumentationConfig` beans | -| spring-boot-autoconfigure | `InstrumentationConfigUtil.java` | Remove `InstrumentationConfig` param | -| spring-boot-autoconfigure | `SpringWebfluxInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure | `WebClientBeanPostProcessor.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure | `SpringWebMvc5InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure (Spring3) | `SpringWebMvc6InstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure (Spring3) | `RestClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure (Spring3) | `RestClientBeanPostProcessor.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure (Spring4) | `JdbcInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure | `MongoClientInstrumentationAutoConfiguration.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure (Spring4) | `MongoClientInstrumentationSpringBoot4AutoConfiguration.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure | `DataSourcePostProcessor.java` | Remove `InstrumentationConfig` | -| spring-boot-autoconfigure | `R2dbcInstrumentingPostProcessor.java` | Remove `InstrumentationConfig` | -| javaagent-extension-api | `DeprecatedConfigProperties.java` | Change to `ConfigProperties` | - -### Files to Delete - -| Module | File | -|--------|------| -| instrumentation-api-incubator | `InstrumentationConfig.java` | -| spring-boot-autoconfigure | `ConfigPropertiesBridge.java` | - -### Test Files to Update - -| Module | File | -|--------|------| -| spring-boot-autoconfigure/testing | `AbstractJdbcInstrumentationAutoConfigurationTest.java` | -| spring-boot-autoconfigure/testing | `AbstractR2DbcInstrumentationAutoConfigurationTest.java` | -| spring-boot-autoconfigure/testing | `AbstractSpringWebInstrumentationAutoConfigurationTest.java` | -| spring-boot-autoconfigure/testing | `AbstractKafkaInstrumentationAutoConfigurationTest.java` | -| spring-boot-autoconfigure/testDeclarativeConfig | `DeclarativeConfigTest.java` | -| spring-boot-autoconfigure/test | `SpringWebMvcInstrumentation5AutoConfigurationTest.java` | -| spring-boot-autoconfigure/testSpring3 | `SpringWebMvcInstrumentation6AutoConfigurationTest.java` | -| spring-boot-autoconfigure/testSpring3 | `RestClientInstrumentationAutoConfigurationTest.java` | -| spring-boot-autoconfigure/test | `SchedulingInstrumentationAutoConfigurationTest.java` | -| spring-boot-autoconfigure/test | `SchedulingInstrumentationAspectTest.java` | -| spring-boot-autoconfigure/test | `SpringWebfluxInstrumentationAutoConfigurationTest.java` | -| spring-boot-autoconfigure/test | `WebClientBeanPostProcessorTest.java` | diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java deleted file mode 100644 index ab1bb761aa22..000000000000 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/InstrumentationConfig.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.api.incubator.config.internal; - -import static java.util.Collections.emptyList; - -import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import java.time.Duration; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Represents the global instrumentation configuration consisting of system properties, environment - * variables, contents of the agent configuration file and properties defined by the {@code - * ConfigPropertySource} SPI implementations. - * - *

    In case any {@code get*()} method variant gets called for the same property more than once - * (e.g. each time an advice class executes) it is suggested to cache the result instead of - * repeatedly calling {@link InstrumentationConfig}. Instrumentation configuration does not change - * during the runtime so retrieving the property once and storing its result in a static final field - * allows JIT to do its magic and remove some code branches. - * - *

    This class is internal and is hence not for public use. Its APIs are unstable and can change - * at any time. - */ -public interface InstrumentationConfig { - - /** - * Returns a string-valued configuration property or {@code null} if a property with name {@code - * name} has not been configured. - */ - @Nullable - String getString(String name); - - /** - * Returns a string-valued configuration property or {@code defaultValue} if a property with name - * {@code name} has not been configured. - */ - String getString(String name, String defaultValue); - - /** - * Returns a boolean-valued configuration property or {@code defaultValue} if a property with name - * {@code name} has not been configured. - */ - boolean getBoolean(String name, boolean defaultValue); - - /** - * Returns an integer-valued configuration property or {@code defaultValue} if a property with - * name {@code name} has not been configured or when parsing has failed. - */ - int getInt(String name, int defaultValue); - - /** - * Returns a long-valued configuration property or {@code defaultValue} if a property with name - * {@code name} has not been configured or when parsing has failed. - */ - long getLong(String name, long defaultValue); - - /** - * Returns a double-valued configuration property or {@code defaultValue} if a property with name - * {@code name} has not been configured or when parsing has failed. - */ - double getDouble(String name, double defaultValue); - - /** - * Returns a duration-valued configuration property or {@code defaultValue} if a property with - * name {@code name} has not been configured or when parsing has failed. - * - *

    Durations can be of the form "{number}{unit}", where unit is one of: - * - *

      - *
    • ms - *
    • s - *
    • m - *
    • h - *
    • d - *
    - * - *

    If no unit is specified, milliseconds is the assumed duration unit. - * - *

    Examples: 10s, 20ms, 5000 - */ - Duration getDuration(String name, Duration defaultValue); - - /** - * This is the same as calling {@code getList(String, List)} with the defaultValue equal to the - * emptyList()/ - */ - default List getList(String name) { - return getList(name, emptyList()); - } - - /** - * Returns a list-valued configuration property or {@code defaultValue} if a property with name - * {@code name} has not been configured. The format of the original value must be comma-separated, - * e.g. {@code one,two,three}. The returned list is unmodifiable. - */ - List getList(String name, List defaultValue); - - /** - * Returns a map-valued configuration property or {@code defaultValue} if a property with name - * {@code name} has not been configured or when parsing has failed. The format of the original - * value must be comma-separated for each key, with an '=' separating the key and value, e.g. - * {@code key=value,anotherKey=anotherValue}. The returned map is unmodifiable. - */ - Map getMap(String name, Map defaultValue); - - /** Returns {@code true} if declarative configuration is used in this configuration. */ - boolean isDeclarative(); - - /** - * Returns a {@link DeclarativeConfigProperties} for the given node name, which is usually an - * instrumentation name - * - *

    Call {@link #isDeclarative()} first to check if declarative configuration is used. - * - *

    Declarative configuration is used to configure instrumentation properties in a declarative - * way, such as through YAML or JSON files. - * - * @param node the name of the instrumentation (e.g. "log4j"), the vendor name (e.g. "google"), or - * "common" for common Java settings that don't apply to other languages. - * @return the declarative configuration properties for the given node name - * @throws IllegalStateException if {@link #isDeclarative()} returns {@code false} - */ - DeclarativeConfigProperties getDeclarativeConfig(String node); - - /** - * Returns the {@link ConfigProvider} if declarative configuration is used. - * - * @return the {@link ConfigProvider} or {@code null} if no provider is available - */ - @Nullable - ConfigProvider getConfigProvider(); -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java deleted file mode 100644 index dbabca731486..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/properties/ConfigPropertiesBridge.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties; - -import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; -import static java.util.Objects.requireNonNull; - -import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.api.incubator.config.InstrumentationConfigUtil; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; -import java.time.Duration; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Support for {@link ConfigProperties} in {@link InstrumentationConfig}. - * - *

    This class is internal and is hence not for public use. Its APIs are unstable and can change - * at any time. - */ -public final class ConfigPropertiesBridge implements InstrumentationConfig { - - private final ConfigProperties configProperties; - @Nullable private final ConfigProvider configProvider; - - public ConfigPropertiesBridge(ConfigProperties configProperties) { - this(configProperties, null); - } - - public ConfigPropertiesBridge( - ConfigProperties configProperties, @Nullable ConfigProvider configProvider) { - this.configProperties = configProperties; - this.configProvider = configProvider; - } - - @Nullable - @Override - public String getString(String name) { - try { - return configProperties.getString(name); - } catch (ConfigurationException ignored) { - return null; - } - } - - @Override - public String getString(String name, String defaultValue) { - try { - return configProperties.getString(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public boolean getBoolean(String name, boolean defaultValue) { - try { - return configProperties.getBoolean(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public int getInt(String name, int defaultValue) { - try { - return configProperties.getInt(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public long getLong(String name, long defaultValue) { - try { - return configProperties.getLong(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public double getDouble(String name, double defaultValue) { - try { - return configProperties.getDouble(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public Duration getDuration(String name, Duration defaultValue) { - try { - return configProperties.getDuration(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public List getList(String name, List defaultValue) { - try { - return configProperties.getList(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public Map getMap(String name, Map defaultValue) { - try { - return configProperties.getMap(name, defaultValue); - } catch (ConfigurationException ignored) { - return defaultValue; - } - } - - @Override - public boolean isDeclarative() { - return configProvider != null; - } - - @Override - public DeclarativeConfigProperties getDeclarativeConfig(String node) { - DeclarativeConfigProperties config = - InstrumentationConfigUtil.javaInstrumentationConfig(requireNonNull(configProvider), node); - if (config == null) { - // there is no declarative config for this node - return empty(); - } - return config; - } - - @Nullable - @Override - public ConfigProvider getConfigProvider() { - return configProvider; - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAspectTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAspectTest.java index 3306b280869c..6e66cfa96d7c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAspectTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAspectTest.java @@ -13,14 +13,10 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.code.SemconvCodeStabilityUtil; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import io.opentelemetry.sdk.testing.assertj.AttributeAssertion; import io.opentelemetry.sdk.trace.data.StatusData; -import java.util.Collections; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -39,9 +35,8 @@ class SchedulingInstrumentationAspectTest { private String unproxiedTesterSimpleClassName; private String unproxiedTesterClassName; - SpringSchedulingInstrumentationAspect newAspect( - OpenTelemetry openTelemetry, InstrumentationConfig config) { - return new SpringSchedulingInstrumentationAspect(openTelemetry, config); + SpringSchedulingInstrumentationAspect newAspect(OpenTelemetry openTelemetry) { + return new SpringSchedulingInstrumentationAspect(openTelemetry); } @BeforeEach @@ -54,11 +49,7 @@ void setup() { AspectJProxyFactory factory = new AspectJProxyFactory(); factory.setTarget(unproxiedTester); - SpringSchedulingInstrumentationAspect aspect = - newAspect( - testing.getOpenTelemetry(), - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))); + SpringSchedulingInstrumentationAspect aspect = newAspect(testing.getOpenTelemetry()); factory.addAspect(aspect); schedulingTester = factory.getProxy(); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAutoConfigurationTest.java index 5b631daf1434..2115ea9b8642 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SchedulingInstrumentationAutoConfigurationTest.java @@ -8,10 +8,6 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -20,11 +16,6 @@ class SchedulingInstrumentationAutoConfigurationTest { private final ApplicationContextRunner runner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) - .withBean( - InstrumentationConfig.class, - () -> - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))) .withConfiguration( AutoConfigurations.of(SpringSchedulingInstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java index df6273d4686c..6eb3dbd29fe7 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/SpringWebfluxInstrumentationAutoConfigurationTest.java @@ -8,10 +8,6 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -21,11 +17,6 @@ class SpringWebfluxInstrumentationAutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) - .withBean( - InstrumentationConfig.class, - () -> - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))) .withConfiguration( AutoConfigurations.of(SpringWebfluxInstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessorTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessorTest.java index 4c25da12a112..3152bb8e1717 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessorTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webflux/WebClientBeanPostProcessorTest.java @@ -8,10 +8,6 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import java.util.Collections; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanPostProcessor; @@ -24,9 +20,6 @@ class WebClientBeanPostProcessorTest { static { beanFactory.registerSingleton("openTelemetry", OpenTelemetry.noop()); - beanFactory.registerSingleton( - "configProperties", - new ConfigPropertiesBridge(DefaultConfigProperties.createFromMap(Collections.emptyMap()))); } @Test @@ -34,9 +27,7 @@ class WebClientBeanPostProcessorTest { "when processed bean is NOT of type WebClient or WebClientBuilder should return Object") void returnsObject() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor( - beanFactory.getBeanProvider(OpenTelemetry.class), - beanFactory.getBeanProvider(InstrumentationConfig.class)); + new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); assertThat(underTest.postProcessAfterInitialization(new Object(), "testObject")) .isExactlyInstanceOf(Object.class); @@ -46,9 +37,7 @@ void returnsObject() { @DisplayName("when processed bean is of type WebClient should return WebClient") void returnsWebClient() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor( - beanFactory.getBeanProvider(OpenTelemetry.class), - beanFactory.getBeanProvider(InstrumentationConfig.class)); + new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); assertThat(underTest.postProcessAfterInitialization(WebClient.create(), "testWebClient")) .isInstanceOf(WebClient.class); @@ -58,9 +47,7 @@ void returnsWebClient() { @DisplayName("when processed bean is of type WebClientBuilder should return WebClientBuilder") void returnsWebClientBuilder() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor( - beanFactory.getBeanProvider(OpenTelemetry.class), - beanFactory.getBeanProvider(InstrumentationConfig.class)); + new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); assertThat( underTest.postProcessAfterInitialization(WebClient.builder(), "testWebClientBuilder")) @@ -71,9 +58,7 @@ void returnsWebClientBuilder() { @DisplayName("when processed bean is of type WebClient should add exchange filter to WebClient") void addsExchangeFilterWebClient() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor( - beanFactory.getBeanProvider(OpenTelemetry.class), - beanFactory.getBeanProvider(InstrumentationConfig.class)); + new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); WebClient webClient = WebClient.create(); Object processedWebClient = @@ -96,9 +81,7 @@ void addsExchangeFilterWebClient() { "when processed bean is of type WebClientBuilder should add ONE exchange filter to WebClientBuilder") void addsExchangeFilterWebClientBuilder() { BeanPostProcessor underTest = - new WebClientBeanPostProcessor( - beanFactory.getBeanProvider(OpenTelemetry.class), - beanFactory.getBeanProvider(InstrumentationConfig.class)); + new WebClientBeanPostProcessor(beanFactory.getBeanProvider(OpenTelemetry.class)); WebClient.Builder webClientBuilder = WebClient.builder(); underTest.postProcessAfterInitialization(webClientBuilder, "testWebClientBuilder"); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java index 3c90a46fdfdc..a1d6583808d6 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation5AutoConfigurationTest.java @@ -9,10 +9,6 @@ import static org.junit.jupiter.api.Assumptions.assumeFalse; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import java.util.Collections; import javax.servlet.Filter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -24,11 +20,6 @@ class SpringWebMvcInstrumentation5AutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) - .withBean( - InstrumentationConfig.class, - () -> - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))) .withConfiguration( AutoConfigurations.of(SpringWebMvc5InstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java index 7bb5b53f5832..323329f06e89 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java @@ -8,7 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web.SpringWebInstrumentationAutoConfiguration; import io.opentelemetry.sdk.OpenTelemetrySdk; import org.junit.jupiter.api.DisplayName; @@ -55,20 +55,12 @@ void customOpenTelemetry() { "when Application Context DOES NOT contain OpenTelemetry bean should initialize openTelemetry") void initializeProvidersAndOpenTelemetry() { this.contextRunner.run( - context -> - assertThat(context) - .hasBean("openTelemetry") - .hasBean("otelProperties") - .getBean(InstrumentationConfig.class) - .isNotNull() - .satisfies( - c -> - assertThat(c.getDeclarativeConfig("foo")) - .isNotNull() - .satisfies( - instrumentationConfig -> - assertThat(instrumentationConfig.getString("bar")) - .isEqualTo("baz")))); + context -> { + assertThat(context).hasBean("openTelemetry").hasBean("otelProperties"); + OpenTelemetry openTelemetry = context.getBean(OpenTelemetry.class); + assertThat(DeclarativeConfigUtil.getString(openTelemetry, "foo", "bar")) + .hasValue("baz"); + }); } @Test diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java index 3e16f15b23ef..25a13c2e956c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/web/RestClientInstrumentationAutoConfigurationTest.java @@ -8,10 +8,6 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -22,11 +18,6 @@ class RestClientInstrumentationAutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) - .withBean( - InstrumentationConfig.class, - () -> - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))) .withBean(RestClient.class, RestClient::create) .withConfiguration( AutoConfigurations.of(RestClientInstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java index a96d6abc2f4e..9b358e513e30 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testSpring3/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/webmvc/SpringWebMvcInstrumentation6AutoConfigurationTest.java @@ -9,11 +9,7 @@ import static org.junit.jupiter.api.Assumptions.assumeTrue; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import jakarta.servlet.Filter; -import java.util.Collections; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; @@ -24,11 +20,6 @@ class SpringWebMvcInstrumentation6AutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) - .withBean( - InstrumentationConfig.class, - () -> - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))) .withConfiguration( AutoConfigurations.of(SpringWebMvc6InstrumentationAutoConfiguration.class)); diff --git a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractJdbcInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractJdbcInstrumentationAutoConfigurationTest.java index 8c7b05f14e96..82d6b124891b 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractJdbcInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractJdbcInstrumentationAutoConfigurationTest.java @@ -7,14 +7,10 @@ import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; -import static java.util.Collections.emptyMap; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import java.sql.Connection; import java.sql.Statement; import javax.sql.DataSource; @@ -32,9 +28,6 @@ public abstract class AbstractJdbcInstrumentationAutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withBean( - InstrumentationConfig.class, - () -> new ConfigPropertiesBridge(DefaultConfigProperties.createFromMap(emptyMap()))) .withConfiguration(autoConfigurations()) .withBean("openTelemetry", OpenTelemetry.class, testing()::getOpenTelemetry); diff --git a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractKafkaInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractKafkaInstrumentationAutoConfigurationTest.java index c4e0b40a127c..92995512a544 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractKafkaInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractKafkaInstrumentationAutoConfigurationTest.java @@ -5,13 +5,9 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal; -import static java.util.Collections.emptyMap; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; @@ -25,9 +21,6 @@ public abstract class AbstractKafkaInstrumentationAutoConfigurationTest { protected final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withBean( - InstrumentationConfig.class, - () -> new ConfigPropertiesBridge(DefaultConfigProperties.createFromMap(emptyMap()))) .withConfiguration(autoConfigurations()) .withBean("openTelemetry", OpenTelemetry.class, OpenTelemetry::noop); diff --git a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractR2DbcInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractR2DbcInstrumentationAutoConfigurationTest.java index a556d7e1f68c..dff18c213b44 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractR2DbcInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractR2DbcInstrumentationAutoConfigurationTest.java @@ -9,11 +9,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -27,11 +23,6 @@ public abstract class AbstractR2DbcInstrumentationAutoConfigurationTest { protected final ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withBean( - InstrumentationConfig.class, - () -> - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))) .withConfiguration(autoConfigurations()) .withBean("openTelemetry", OpenTelemetry.class, testing()::getOpenTelemetry); diff --git a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractSpringWebInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractSpringWebInstrumentationAutoConfigurationTest.java index 4b9a339d38b7..6b96ce5ec1d0 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractSpringWebInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/testing/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/AbstractSpringWebInstrumentationAutoConfigurationTest.java @@ -8,11 +8,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.web.RestTemplateBeanPostProcessor; -import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge; -import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; -import java.util.Collections; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -25,11 +21,6 @@ public abstract class AbstractSpringWebInstrumentationAutoConfigurationTest { protected final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withBean(OpenTelemetry.class, OpenTelemetry::noop) - .withBean( - InstrumentationConfig.class, - () -> - new ConfigPropertiesBridge( - DefaultConfigProperties.createFromMap(Collections.emptyMap()))) .withBean(RestTemplate.class, RestTemplate::new) .withConfiguration(autoConfigurations()); diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/DeprecatedConfigProperties.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/DeprecatedConfigProperties.java deleted file mode 100644 index d81ccbb96116..000000000000 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/bootstrap/internal/DeprecatedConfigProperties.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.bootstrap.internal; - -import static java.util.Collections.emptyList; -import static java.util.logging.Level.WARNING; - -import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig; -import java.util.List; -import java.util.logging.Logger; - -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -@SuppressWarnings("unused") // keep around for next time even if not currently used -public final class DeprecatedConfigProperties { - - private static final Logger logger = Logger.getLogger(DeprecatedConfigProperties.class.getName()); - - public static boolean getBoolean( - InstrumentationConfig config, - String deprecatedPropertyName, - String newPropertyName, - boolean defaultValue) { - warnIfUsed(config, deprecatedPropertyName, newPropertyName); - boolean value = config.getBoolean(deprecatedPropertyName, defaultValue); - return config.getBoolean(newPropertyName, value); - } - - public static List getList( - InstrumentationConfig config, String deprecatedPropertyName, String newPropertyName) { - warnIfUsed(config, deprecatedPropertyName, newPropertyName); - List value = config.getList(deprecatedPropertyName, emptyList()); - return config.getList(newPropertyName, value); - } - - private static void warnIfUsed( - InstrumentationConfig config, String deprecatedPropertyName, String newPropertyName) { - if (config.getString(deprecatedPropertyName) != null) { - logger.log( - WARNING, - "Deprecated property \"{0}\" was used; use the \"{1}\" property instead", - new Object[] {deprecatedPropertyName, newPropertyName}); - } - } - - private DeprecatedConfigProperties() {} -} From 40c90e2be3a8da93f750f1beb0688c030574cf53 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 16:40:30 -0800 Subject: [PATCH 36/73] move --- declarative-config-bridge/README.md | 86 +---- declarative-config-bridge/build.gradle.kts | 4 - .../config/bridge/ConfigPropertiesUtil.java | 23 -- .../bridge/ConfigPropertiesUtilTest.java | 19 -- docs/CONFIG-PROPERTIES-USAGES.md | 322 ------------------ .../OpenTelemetryAutoConfiguration.java | 13 - .../DeclarativeConfigPropertiesBridge.java | 2 +- ...larativeConfigPropertiesBridgeBuilder.java | 17 +- .../tooling/OpenTelemetryInstaller.java | 1 - ...tiveConfigPropertiesBridgeBuilderTest.java | 2 +- ...DeclarativeConfigPropertiesBridgeTest.java | 2 +- .../src/test/resources/config.yaml | 0 12 files changed, 16 insertions(+), 475 deletions(-) delete mode 100644 declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtil.java delete mode 100644 declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtilTest.java delete mode 100644 docs/CONFIG-PROPERTIES-USAGES.md rename {declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge => javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling}/DeclarativeConfigPropertiesBridge.java (99%) rename {declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge => javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling}/DeclarativeConfigPropertiesBridgeBuilder.java (85%) rename {declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge => javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling}/DeclarativeConfigPropertiesBridgeBuilderTest.java (98%) rename {declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge => javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling}/DeclarativeConfigPropertiesBridgeTest.java (99%) rename {declarative-config-bridge => javaagent-tooling}/src/test/resources/config.yaml (100%) diff --git a/declarative-config-bridge/README.md b/declarative-config-bridge/README.md index f54964e1605a..2d78ba324dd5 100644 --- a/declarative-config-bridge/README.md +++ b/declarative-config-bridge/README.md @@ -1,84 +1,8 @@ # Declarative Config Bridge -Declarative Config Bridge allows instrumentation authors to access configuration in a uniform way, -regardless of the configuration source. +This module provides utilities for bridging between declarative configuration (YAML-based) and +the traditional `ConfigProperties` interface. -The bridge allows you to read configuration using the system property style when dealing with -declarative configuration. - -## Example - -As an example, let's look at the inferred spans configuration. -First, there is a configuration method that reads the properties and is unaware of the source of the -configuration: - -```java -class InferredSpansConfig { - static SpanProcessor create(ConfigProperties properties) { - // read properties here - boolean backupDiagnosticFiles = - properties.getBoolean("otel.inferred.spans.backup.diagnostic.files", false); - } -} -``` - -The auto configuration **without declarative config** passes the provided properties directly: - -```java - -@AutoService(AutoConfigurationCustomizerProvider.class) -public class InferredSpansAutoConfig implements AutoConfigurationCustomizerProvider { - - @Override - public void customize(AutoConfigurationCustomizer config) { - config.addTracerProviderCustomizer( - (providerBuilder, properties) -> { - providerBuilder.addSpanProcessor(InferredSpansConfig.create(properties)); - return providerBuilder; - }); - } -} -``` - -The auto configuration **with declarative config** uses the Declarative Config Bridge to be able to -use common configuration method: - -Let's first look at the yaml file that is used to configure the inferred spans processor: - -```yaml -file_format: 1.0-rc.1 -tracer_provider: - processors: - - inferred_spans: - backup: - diagnostic: - files: true -``` - -And now the component provider that uses the Declarative Config Bridge: - -```java - -@AutoService(ComponentProvider.class) -public class InferredSpansComponentProvider implements ComponentProvider { - - @Override - public String getName() { - return "inferred_spans"; - } - - @Override - public SpanProcessor create(DeclarativeConfigProperties config) { - return InferredSpansConfig.create( - new DeclarativeConfigPropertiesBridgeBuilder() - // crop the prefix, because the properties are under the "inferred_spans" processor - .addMapping("otel.inferred.spans.", "") - .build(config)); - } - - @Override - public Class getType() { - return SpanProcessor.class; - } -} -``` +The main classes are: +- `ConfigPropertiesBackedConfigProvider`: Creates a `ConfigProvider` backed by `ConfigProperties` +- `ConfigPropertiesBackedDeclarativeConfigProperties`: Adapts `ConfigProperties` to `DeclarativeConfigProperties` diff --git a/declarative-config-bridge/build.gradle.kts b/declarative-config-bridge/build.gradle.kts index b5ac9ec9c1c3..c23668de1e4d 100644 --- a/declarative-config-bridge/build.gradle.kts +++ b/declarative-config-bridge/build.gradle.kts @@ -7,13 +7,9 @@ plugins { group = "io.opentelemetry.instrumentation" dependencies { - compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") implementation("io.opentelemetry:opentelemetry-api-incubator") - testImplementation("io.opentelemetry:opentelemetry-sdk-extension-incubator") - testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") - compileOnly("com.google.code.findbugs:annotations") testCompileOnly("com.google.code.findbugs:annotations") } diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtil.java b/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtil.java deleted file mode 100644 index cc7fb351ea3c..000000000000 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtil.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.config.bridge; - -public final class ConfigPropertiesUtil { - private ConfigPropertiesUtil() {} - - public static String propertyYamlPath(String propertyName) { - return yamlPath(propertyName); - } - - static String yamlPath(String property) { - String[] segments = DeclarativeConfigPropertiesBridge.getSegments(property); - if (segments.length == 0) { - throw new IllegalArgumentException("Invalid property: " + property); - } - - return "'instrumentation/development' / 'java' / '" + String.join("' / '", segments) + "'"; - } -} diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtilTest.java b/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtilTest.java deleted file mode 100644 index db62912fd572..000000000000 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/ConfigPropertiesUtilTest.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.config.bridge; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.jupiter.api.Test; - -class ConfigPropertiesUtilTest { - @Test - void propertyYamlPath() { - assertThat(ConfigPropertiesUtil.propertyYamlPath("google.otel.auth.target.signals")) - .isEqualTo( - "'instrumentation/development' / 'java' / 'google' / 'otel' / 'auth' / 'target' / 'signals'"); - } -} diff --git a/docs/CONFIG-PROPERTIES-USAGES.md b/docs/CONFIG-PROPERTIES-USAGES.md deleted file mode 100644 index 3896385e1288..000000000000 --- a/docs/CONFIG-PROPERTIES-USAGES.md +++ /dev/null @@ -1,322 +0,0 @@ -# ConfigProperties Usages in OpenTelemetry Java Instrumentation - -This document catalogs all usages of `io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties` -in the codebase to help plan the migration away from `DeclarativeConfigPropertiesBridge`. - -## Overview - -`ConfigProperties` is an interface from the OpenTelemetry SDK autoconfigure module that provides -access to configuration values in a key-value style (like system properties or environment variables). - -The `DeclarativeConfigPropertiesBridge` exists to convert YAML declarative config back to -`ConfigProperties` format so that existing code continues to work with both configuration styles. - -## Category 1: Public SPI Interfaces - -These are **public APIs** that extensions implement. Changing these would be a breaking change. - -### InstrumentationModule.defaultEnabled(ConfigProperties) - -**Location**: `javaagent-extension-api/src/main/java/.../InstrumentationModule.java` - -```java -public boolean defaultEnabled(ConfigProperties config) { - return config.getBoolean("otel.instrumentation.common.default-enabled", true); -} -``` - -**Overridden by ~20+ instrumentation modules**: -- `SpringWsInstrumentationModule` -- `SpringSecurityConfigServletInstrumentationModule` -- `SpringSecurityConfigWebFluxInstrumentationModule` -- `SpringBootActuatorInstrumentationModule` -- `SpringBatchInstrumentationModule` -- `MicrometerInstrumentationModule` -- `MyBatisInstrumentationModule` -- `JwsInstrumentationModule` -- `DataSourceInstrumentationModule` -- `JaxrsAnnotationsInstrumentationModule` (2.0 and 3.0) -- `JaxrsInstrumentationModule` (1.0) -- `LambdaInstrumentationModule` -- `UrlClassLoaderInstrumentationModule` -- `ApplicationLoggingInstrumentationModule` -- `EclipseOsgiInstrumentationModule` -- `ReflectionInstrumentationModule` -- `ClassLoaderInstrumentationModule` -- `DropwizardMetricsInstrumentationModule` -- And more... - ---- - -### IgnoredTypesConfigurer.configure(IgnoredTypesBuilder, ConfigProperties) - -**Location**: `javaagent-extension-api/src/main/java/.../IgnoredTypesConfigurer.java` - -```java -void configure(IgnoredTypesBuilder builder, ConfigProperties config); -``` - -**Implementations**: -- `GlobalIgnoredTypesConfigurer` -- `CommonLibraryIgnoredTypesConfigurer` -- `AdditionalLibraryIgnoredTypesConfigurer` -- `UserExcludedClassesConfigurer` -- `UserExcludedClassLoadersConfigurer` -- `SpringIntegrationIgnoredTypesConfigurer` -- `IgnoredTestTypesConfigurer` (testing) - ---- - -### AgentExtension.extend(AgentBuilder, ConfigProperties) - -**Location**: `javaagent-tooling/src/main/java/.../AgentExtension.java` - -```java -AgentBuilder extend(AgentBuilder agentBuilder, ConfigProperties config); -``` - -**Implementations**: -- `InstrumentationLoader` -- `TestAgentExtension` (testing) - ---- - -### BootstrapPackagesConfigurer.configure(BootstrapPackagesBuilder, ConfigProperties) - -**Location**: `javaagent-tooling/src/main/java/.../BootstrapPackagesConfigurer.java` - -```java -void configure(BootstrapPackagesBuilder builder, ConfigProperties config); -``` - ---- - -## Category 2: Internal Tooling - -These are internal usages within javaagent-tooling that can be migrated more easily. - -### AgentInstaller - -**File**: `javaagent-tooling/src/main/java/.../AgentInstaller.java` - -Uses `ConfigProperties` for: -- `copyNecessaryConfigToSystemProperties(ConfigProperties config)` - copies specific properties to system properties -- `setBootstrapPackages(ConfigProperties config, ...)` - configures bootstrap packages -- `configureIgnoredTypes(ConfigProperties config, ...)` - configures ignored types -- `runAfterAgentListeners(..., ConfigProperties sdkConfigProperties)` - reads `otel.javaagent.internal.force-synchronous-agent-listeners` - ---- - -### AgentTracerProviderConfigurer - -**File**: `javaagent-tooling/src/main/java/.../AgentTracerProviderConfigurer.java` - -```java -public SdkTracerProviderBuilder configure(SdkTracerProviderBuilder builder, ConfigProperties config) { - // Reads: otel.javaagent.enabled, otel.instrumentation.common.experimental.suppress-thread-attributes - // otel.traces.exporter -} -``` - ---- - -### AgentConfig - -**File**: `javaagent-tooling/src/main/java/.../AgentConfig.java` - -```java -public static boolean isInstrumentationEnabled(ConfigProperties config, Iterable names, boolean defaultEnabled) -public static boolean isDebugModeEnabled(ConfigProperties config) -``` - ---- - -### InstrumentationModuleInstaller - -**File**: `javaagent-tooling/src/main/java/.../InstrumentationModuleInstaller.java` - -Uses `ConfigProperties` to check if modules are enabled via `AgentConfig.isInstrumentationEnabled()`. - ---- - -### MuzzleMatcher - -**File**: `javaagent-tooling/src/main/java/.../MuzzleMatcher.java` - -Uses `ConfigProperties` for debug mode check. - ---- - -### UserExcludedClassesConfigurer / UserExcludedClassLoadersConfigurer - -Read from config: -- `otel.javaagent.exclude-classes` -- `otel.javaagent.exclude-class-loaders` - ---- - -### AdditionalLibraryIgnoredTypesConfigurer - -Reads: `otel.instrumentation.common.additional-library-ignores.enabled` - ---- - -### Field injection configuration - -**File**: `FieldBackedImplementationConfiguration.java` - -Reads: `otel.javaagent.experimental.field-injection.enabled` - ---- - -## Category 3: SDK Autoconfigure SPIs - -These are standard OpenTelemetry SDK SPIs that use `ConfigProperties`. - -### ResourceProvider implementations - -- `DistroResourceProvider.createResource(ConfigProperties config)` -- `TestResourceProvider` (testing) - -### TracerProviderConfigurer - -- `AgentTracerProviderConfigurer` - -### AutoConfigurationCustomizerProvider implementations - -Various customizers that receive `ConfigProperties`. - ---- - -## Category 4: Spring Boot Autoconfigure - -### OpenTelemetryAutoConfiguration - -**File**: `spring-boot-autoconfigure/src/main/java/.../OpenTelemetryAutoConfiguration.java` - -Exposes `ConfigProperties` as a Spring bean: -```java -@Bean -public ConfigProperties otelProperties(ConfigProvider configProvider) { - return new DeclarativeConfigPropertiesBridgeBuilder() - .buildFromInstrumentationConfig(configProvider.getInstrumentationConfig()); -} -``` - -### SpringConfigProperties - -**File**: `spring-boot-autoconfigure/src/main/java/.../SpringConfigProperties.java` - -Implements `ConfigProperties` to bridge Spring Boot properties to OTel configuration. - -### ConfigPropertiesBridge - -**File**: `spring-boot-autoconfigure/src/main/java/.../ConfigPropertiesBridge.java` - -Wraps `ConfigProperties` with additional `ConfigProvider` access for Spring Boot. - ---- - -## Category 5: Instrumentation Installers (AgentListener/BeforeAgentListener) - -These use `AutoConfiguredOpenTelemetrySdk` which provides access to both `ConfigProperties` -AND `ConfigProvider`. **Some can be migrated** to use `ConfigProvider` directly. - -### JarAnalyzerInstaller ✅ Migrated - -**File**: `runtime-telemetry-java8/javaagent/src/main/java/.../JarAnalyzerInstaller.java` - -Reads: -- `otel.instrumentation.runtime-telemetry.package-emitter.enabled` → `java.runtime_telemetry.package_emitter.enabled` -- `otel.instrumentation.runtime-telemetry.package-emitter.jars-per-second` → `java.runtime_telemetry.package_emitter.jars_per_second` - -### OshiMetricsInstaller ✅ Migrated - -**File**: `oshi/javaagent/src/main/java/.../OshiMetricsInstaller.java` - -Reads: -- `otel.instrumentation.common.default-enabled` → `java.common.default_enabled` -- `otel.instrumentation.oshi.enabled` → `java.oshi.enabled` - -### JmxMetricInsightInstaller ✅ Migrated - -**File**: `jmx-metrics/javaagent/src/main/java/.../JmxMetricInsightInstaller.java` - -Reads (with mapping `otel.jmx` → `otel.instrumentation.jmx` → `java.jmx`): -- `otel.jmx.enabled` → `java.jmx.enabled` -- `otel.jmx.config` → `java.jmx.config` -- `otel.jmx.target.system` → `java.jmx.target_system` -- `otel.jmx.discovery.delay` → `java.jmx.discovery_delay` - ---- - -## Category 6: Test Infrastructure - -### EmptyConfigProperties - -**File**: `javaagent-tooling/src/main/java/.../EmptyConfigProperties.java` - -Empty implementation used in testing and benchmarks. - -### Test mocks - -Various tests mock `ConfigProperties` for unit testing. - ---- - -## Summary Statistics - -| Category | Count | Migration Difficulty | -|----------|-------|---------------------| -| Public SPI Interfaces | 4 interfaces, ~30+ implementations | **High** - Breaking API change | -| Internal Tooling | ~15 usages | **Medium** - Internal refactoring | -| SDK Autoconfigure SPIs | ~5 usages | **Low** - Standard SDK patterns | -| Spring Boot Autoconfigure | ~5 usages | **Medium** - Spring integration | -| Instrumentation Installers | 3 migrated | **Low** - ✅ All done | -| Test Infrastructure | ~20 usages | **Low** - Test-only changes | - ---- - -## Migration Options - -### Option A: Keep ConfigProperties Forever - -Keep the bridge indefinitely as a compatibility layer. This is the lowest risk approach. - -**Pros**: No breaking changes, minimal effort -**Cons**: Maintains complexity, two config systems - -### Option B: Deprecate and Migrate Public SPIs - -1. Add new SPI methods that take `DeclarativeConfigProperties` or `ConfigProvider` -2. Keep old methods with `@Deprecated` annotation -3. Update all implementations over time -4. Remove deprecated methods in a future major version - -**Pros**: Clean migration path -**Cons**: Long transition period, more code to maintain - -### Option C: Change SPI Parameter Type (Breaking) - -Change all SPIs to use `DeclarativeConfigProperties` directly. - -**Pros**: Clean codebase, single config system -**Cons**: Breaking change for all extensions - ---- - -## Key Properties Read from ConfigProperties - -| Property | Used By | -|----------|---------| -| `otel.instrumentation.common.default-enabled` | InstrumentationModule | -| `otel.javaagent.enabled` | AgentTracerProviderConfigurer | -| `otel.javaagent.debug` | AgentConfig | -| `otel.javaagent.exclude-classes` | UserExcludedClassesConfigurer | -| `otel.javaagent.exclude-class-loaders` | UserExcludedClassLoadersConfigurer | -| `otel.instrumentation.common.additional-library-ignores.enabled` | AdditionalLibraryIgnoredTypesConfigurer | -| `otel.instrumentation.common.experimental.suppress-thread-attributes` | AgentTracerProviderConfigurer | -| `otel.instrumentation.experimental.span-suppression-strategy` | AgentInstaller | -| `otel.javaagent.experimental.field-injection.enabled` | FieldBackedImplementationConfiguration | -| `otel.javaagent.internal.force-synchronous-agent-listeners` | AgentInstaller | -| `otel.traces.exporter` | AgentTracerProviderConfigurer | diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index a909c6e81b45..c89364fa12af 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -13,7 +13,6 @@ import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; import io.opentelemetry.instrumentation.config.bridge.ConfigPropertiesBackedConfigProvider; -import io.opentelemetry.instrumentation.config.bridge.DeclarativeConfigPropertiesBridgeBuilder; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.DeclarativeConfigDisabled; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.DeclarativeConfigEnabled; import io.opentelemetry.instrumentation.spring.autoconfigure.internal.OtelDisabled; @@ -180,18 +179,6 @@ public ConfigProvider configProvider(OpenTelemetryConfigurationModel model) { return SpringConfigProvider.create(model); } - /** - * Expose the {@link ConfigProperties} bean for use in other auto-configurations. - * - *

    Not using spring boot properties directly, because declarative configuration does not - * integrate with spring boot properties. - */ - @Bean - public ConfigProperties otelProperties(ConfigProvider configProvider) { - return new DeclarativeConfigPropertiesBridgeBuilder() - .buildFromInstrumentationConfig(configProvider.getInstrumentationConfig()); - } - @Bean public DeclarativeConfigurationCustomizerProvider distroConfigurationCustomizerProvider() { return new ResourceCustomizerProvider(); diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridge.java similarity index 99% rename from declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java rename to javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridge.java index 0421148323e6..b0779c04ab7b 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridge.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridge.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.config.bridge; +package io.opentelemetry.javaagent.tooling; import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; diff --git a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilder.java similarity index 85% rename from declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java rename to javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilder.java index 3c70dc8b6100..8dea3abed2a7 100644 --- a/declarative-config-bridge/src/main/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilder.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilder.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.config.bridge; +package io.opentelemetry.javaagent.tooling; import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; @@ -22,7 +22,7 @@ * A builder for {@link DeclarativeConfigPropertiesBridge} that allows adding translations and fixed * values for properties. */ -public class DeclarativeConfigPropertiesBridgeBuilder { +class DeclarativeConfigPropertiesBridgeBuilder { /** * order is important here, so we use LinkedHashMap - see {@link #addMapping(String, String)} for * more details @@ -31,7 +31,7 @@ public class DeclarativeConfigPropertiesBridgeBuilder { private final Map overrideValues = new HashMap<>(); - public DeclarativeConfigPropertiesBridgeBuilder() {} + DeclarativeConfigPropertiesBridgeBuilder() {} /** * Adds a mapping from a property prefix to a YAML path. @@ -44,8 +44,7 @@ public DeclarativeConfigPropertiesBridgeBuilder() {} * @param yamlPath the YAML path to resolve the property against */ @CanIgnoreReturnValue - public DeclarativeConfigPropertiesBridgeBuilder addMapping( - String propertyPrefix, String yamlPath) { + DeclarativeConfigPropertiesBridgeBuilder addMapping(String propertyPrefix, String yamlPath) { mappings.put(propertyPrefix, yamlPath); return this; } @@ -57,13 +56,13 @@ public DeclarativeConfigPropertiesBridgeBuilder addMapping( * @param value the value to return when the property is requested */ @CanIgnoreReturnValue - public DeclarativeConfigPropertiesBridgeBuilder addOverride(String propertyName, Object value) { + DeclarativeConfigPropertiesBridgeBuilder addOverride(String propertyName, Object value) { overrideValues.put(propertyName, value); return this; } /** Build {@link ConfigProperties} from the {@code autoConfiguredOpenTelemetrySdk}. */ - public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { + ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { ConfigProperties sdkConfigProperties = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); if (sdkConfigProperties != null) { @@ -85,7 +84,7 @@ public ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenT * @param node the declarative config properties to build from * @return a new instance of {@link ConfigProperties} */ - public ConfigProperties build(@Nullable DeclarativeConfigProperties node) { + ConfigProperties build(@Nullable DeclarativeConfigProperties node) { return new DeclarativeConfigPropertiesBridge( node == null ? empty() : node, mappings, overrideValues); } @@ -100,7 +99,7 @@ public ConfigProperties build(@Nullable DeclarativeConfigProperties node) { * @param instrumentationConfig the instrumentation configuration to build from * @return a new instance of {@link ConfigProperties} */ - public ConfigProperties buildFromInstrumentationConfig( + ConfigProperties buildFromInstrumentationConfig( @Nullable DeclarativeConfigProperties instrumentationConfig) { return build( instrumentationConfig == null ? null : instrumentationConfig.getStructured("java")); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 8b1dd9069a1a..56b705e90d60 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -11,7 +11,6 @@ import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.config.bridge.ConfigPropertiesBackedConfigProvider; -import io.opentelemetry.instrumentation.config.bridge.DeclarativeConfigPropertiesBridgeBuilder; import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import io.opentelemetry.sdk.OpenTelemetrySdk; diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java similarity index 98% rename from declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java rename to javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java index d3058e0b888f..7677a6220546 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeBuilderTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.config.bridge; +package io.opentelemetry.javaagent.tooling; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.eq; diff --git a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeTest.java similarity index 99% rename from declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java rename to javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeTest.java index 29f9d424cd9d..d75b6b512d84 100644 --- a/declarative-config-bridge/src/test/java/io/opentelemetry/instrumentation/config/bridge/DeclarativeConfigPropertiesBridgeTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.config.bridge; +package io.opentelemetry.javaagent.tooling; import static org.assertj.core.api.Assertions.assertThat; diff --git a/declarative-config-bridge/src/test/resources/config.yaml b/javaagent-tooling/src/test/resources/config.yaml similarity index 100% rename from declarative-config-bridge/src/test/resources/config.yaml rename to javaagent-tooling/src/test/resources/config.yaml From c4225614025878becceb25c301518fb0ceb9034a Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 17:12:45 -0800 Subject: [PATCH 37/73] more --- .../jmx/JmxMetricInsightInstaller.java | 19 ++----- .../OpenTelemetryAutoConfiguration.java | 14 ----- .../javaagent/tooling/AgentInstaller.java | 51 +++++++++++-------- ...larativeConfigPropertiesBridgeBuilder.java | 37 ++------------ .../tooling/OpenTelemetryInstaller.java | 22 ++++---- 5 files changed, 47 insertions(+), 96 deletions(-) diff --git a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java index 916643c9c93b..1a82fa59e11a 100644 --- a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java +++ b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java @@ -13,8 +13,6 @@ import io.opentelemetry.instrumentation.jmx.JmxTelemetryBuilder; import io.opentelemetry.javaagent.extension.AgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; @@ -32,7 +30,6 @@ public class JmxMetricInsightInstaller implements AgentListener { @Override public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { OpenTelemetry openTelemetry = autoConfiguredSdk.getOpenTelemetrySdk(); - ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredSdk); boolean defaultEnabled = DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled") @@ -43,7 +40,7 @@ public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { if (enabled) { JmxTelemetryBuilder jmx = JmxTelemetry.builder(GlobalOpenTelemetry.get()) - .beanDiscoveryDelay(beanDiscoveryDelay(openTelemetry, config)); + .beanDiscoveryDelay(beanDiscoveryDelay(openTelemetry)); DeclarativeConfigUtil.getList(openTelemetry, "java", "jmx", "config") .orElse(Collections.emptyList()) @@ -81,16 +78,8 @@ private static void addClasspathRules(String target, JmxTelemetryBuilder builder } private static Duration beanDiscoveryDelay( - OpenTelemetry openTelemetry, ConfigProperties configProperties) { - Duration discoveryDelay = - DeclarativeConfigUtil.getDuration(openTelemetry, "java", "jmx", "discovery_delay") - .orElse(null); - if (discoveryDelay != null) { - return discoveryDelay; - } - - // If discovery delay has not been configured, have a peek at the metric export interval. - // It makes sense for both of these values to be similar. - return configProperties.getDuration("otel.metric.export.interval", Duration.ofMinutes(1)); + OpenTelemetry openTelemetry) { + return DeclarativeConfigUtil.getDuration(openTelemetry, "java", "jmx", "discovery_delay") + .orElse(Duration.ofMinutes(1)); } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index c89364fa12af..6504c0082f4d 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -137,20 +137,6 @@ public OpenTelemetrySdk openTelemetry( public ConfigProvider configProvider(ConfigProperties properties) { return ConfigPropertiesBackedConfigProvider.create(properties); } - - /** - * Expose the {@link ConfigProperties} bean for use in other auto-configurations. - * - *

    Not using spring boot properties directly in order to support {@link - * io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer#addPropertiesCustomizer(Function)} - * and {@link - * io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer#addPropertiesSupplier(Supplier)}. - */ - @Bean - public ConfigProperties otelProperties( - AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { - return requireNonNull(AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk)); - } } @Configuration diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index bf474f42a25d..dbcea04d063b 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -15,9 +15,11 @@ import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.none; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; import io.opentelemetry.context.ContextStorage; import io.opentelemetry.context.Scope; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties; import io.opentelemetry.javaagent.bootstrap.AgentClassLoader; import io.opentelemetry.javaagent.bootstrap.BootstrapPackagePrefixesHolder; @@ -38,6 +40,7 @@ import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesBuilderImpl; import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesConfigurer; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; +import io.opentelemetry.javaagent.tooling.config.RuntimeConfigProperties; import io.opentelemetry.javaagent.tooling.field.FieldBackedImplementationConfiguration; import io.opentelemetry.javaagent.tooling.field.VirtualFieldImplementationInstaller; import io.opentelemetry.javaagent.tooling.field.VirtualFieldImplementationInstallerFactory; @@ -164,11 +167,10 @@ private static void installBytebuddyAgent( AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = installOpenTelemetrySdk(extensionClassLoader, earlyConfig); - ConfigProperties sdkConfig = AutoConfigureUtil.getConfig(autoConfiguredSdk); // TODO remove this method when library instrumentation reads it from declarative configuration - copyNecessaryConfigToSystemProperties(sdkConfig); + copyNecessaryConfigToSystemProperties(); - setBootstrapPackages(sdkConfig, extensionClassLoader); + setBootstrapPackages(extensionClassLoader); ConfiguredResourceAttributesHolder.initialize( SdkAutoconfigureAccess.getResource(autoConfiguredSdk).getAttributes()); @@ -178,7 +180,7 @@ private static void installBytebuddyAgent( } agentBuilder = agentBuilder.with(new ClassLoadListener()); - agentBuilder = configureIgnoredTypes(sdkConfig, extensionClassLoader, agentBuilder); + agentBuilder = configureIgnoredTypes(extensionClassLoader, agentBuilder); int numberOfLoadedExtensions = 0; for (AgentExtension agentExtension : loadOrdered(AgentExtension.class, extensionClassLoader)) { @@ -189,7 +191,7 @@ private static void installBytebuddyAgent( new Object[] {agentExtension.extensionName(), agentExtension.getClass().getName()}); } try { - agentBuilder = agentExtension.extend(agentBuilder, sdkConfig); + agentBuilder = agentExtension.extend(agentBuilder, RuntimeConfigProperties.get()); numberOfLoadedExtensions++; } catch (Exception | LinkageError e) { logger.log( @@ -221,7 +223,7 @@ private static void installBytebuddyAgent( addHttpServerResponseCustomizers(extensionClassLoader); addSqlCommenterCustomizers(extensionClassLoader); - runAfterAgentListeners(agentListeners, autoConfiguredSdk, sdkConfig); + runAfterAgentListeners(agentListeners, autoConfiguredSdk); } private static AgentBuilder newAgentBuilder(ByteBuddy byteBuddy) { @@ -279,21 +281,24 @@ private static void installEarlyInstrumentation( agentBuilder.installOn(instrumentation); } - private static void copyNecessaryConfigToSystemProperties(ConfigProperties config) { - for (String property : asList("otel.instrumentation.experimental.span-suppression-strategy")) { - String value = config.getString(property); - if (value != null) { - System.setProperty(property, value); - } - } + // TODO remove this method when library instrumentation reads it from declarative configuration + private static void copyNecessaryConfigToSystemProperties() { + DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), + "java", + // TODO add "common" here + "span_suppression_strategy/experimental") + .ifPresent( + value -> + System.setProperty( + "otel.instrumentation.experimental.span-suppression-strategy", value)); } - private static void setBootstrapPackages( - ConfigProperties config, ClassLoader extensionClassLoader) { + private static void setBootstrapPackages(ClassLoader extensionClassLoader) { BootstrapPackagesBuilderImpl builder = new BootstrapPackagesBuilderImpl(); for (BootstrapPackagesConfigurer configurer : load(BootstrapPackagesConfigurer.class, extensionClassLoader)) { - configurer.configure(builder, config); + configurer.configure(builder, RuntimeConfigProperties.get()); } BootstrapPackagePrefixesHolder.setBoostrapPackagePrefixes(builder.build()); } @@ -303,11 +308,11 @@ private static void setDefineClassHandler() { } private static AgentBuilder configureIgnoredTypes( - ConfigProperties config, ClassLoader extensionClassLoader, AgentBuilder agentBuilder) { + ClassLoader extensionClassLoader, AgentBuilder agentBuilder) { IgnoredTypesBuilderImpl builder = new IgnoredTypesBuilderImpl(); for (IgnoredTypesConfigurer configurer : loadOrdered(IgnoredTypesConfigurer.class, extensionClassLoader)) { - configurer.configure(builder, config); + configurer.configure(builder, RuntimeConfigProperties.get()); } Trie ignoredTasksTrie = builder.buildIgnoredTasksTrie(); @@ -353,8 +358,7 @@ private static void addSqlCommenterCustomizers(ClassLoader extensionClassLoader) private static void runAfterAgentListeners( Iterable agentListeners, - AutoConfiguredOpenTelemetrySdk autoConfiguredSdk, - ConfigProperties sdkConfigProperties) { + AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { // java.util.logging.LogManager maintains a final static LogManager, which is created during // class initialization. Some AgentListener implementations may use JRE bootstrap classes // which touch this class (e.g. JFR classes or some MBeans). @@ -372,7 +376,12 @@ private static void runAfterAgentListeners( // the application is already setting the global LogManager and AgentListener won't be able // to touch it due to class loader locking. boolean shouldForceSynchronousAgentListenersCalls = - sdkConfigProperties.getBoolean(FORCE_SYNCHRONOUS_AGENT_LISTENERS_CONFIG, false); + DeclarativeConfigUtil.getBoolean( + autoConfiguredSdk.getOpenTelemetrySdk(), + "java", + "agent", + "force_synchronous_agent_listeners/experimental") + .orElse(false); boolean javaBefore9 = isJavaBefore9(); if (!shouldForceSynchronousAgentListenersCalls && javaBefore9 && isAppUsingCustomLogManager()) { logger.fine("Custom JUL LogManager detected: delaying AgentListener#afterAgent() calls"); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilder.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilder.java index 8dea3abed2a7..b320fc595ee9 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilder.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilder.java @@ -8,10 +8,7 @@ import static io.opentelemetry.api.incubator.config.DeclarativeConfigProperties.empty; import com.google.errorprone.annotations.CanIgnoreReturnValue; -import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.HashMap; import java.util.LinkedHashMap; @@ -61,34 +58,6 @@ DeclarativeConfigPropertiesBridgeBuilder addOverride(String propertyName, Object return this; } - /** Build {@link ConfigProperties} from the {@code autoConfiguredOpenTelemetrySdk}. */ - ConfigProperties build(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { - ConfigProperties sdkConfigProperties = - AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); - if (sdkConfigProperties != null) { - return sdkConfigProperties; - } - ConfigProvider configProvider = - AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk); - if (configProvider != null) { - return buildFromInstrumentationConfig(configProvider.getInstrumentationConfig()); - } - // Should never happen - throw new IllegalStateException( - "AutoConfiguredOpenTelemetrySdk does not have ConfigProperties or DeclarativeConfigProperties. This is likely a programming error in opentelemetry-java"); - } - - /** - * Build {@link ConfigProperties} from the provided {@link DeclarativeConfigProperties} node. - * - * @param node the declarative config properties to build from - * @return a new instance of {@link ConfigProperties} - */ - ConfigProperties build(@Nullable DeclarativeConfigProperties node) { - return new DeclarativeConfigPropertiesBridge( - node == null ? empty() : node, mappings, overrideValues); - } - /** * Build {@link ConfigProperties} from the {@link DeclarativeConfigProperties} provided by the * instrumentation configuration. @@ -101,7 +70,9 @@ ConfigProperties build(@Nullable DeclarativeConfigProperties node) { */ ConfigProperties buildFromInstrumentationConfig( @Nullable DeclarativeConfigProperties instrumentationConfig) { - return build( - instrumentationConfig == null ? null : instrumentationConfig.getStructured("java")); + DeclarativeConfigProperties javaConfig = + instrumentationConfig == null ? null : instrumentationConfig.getStructured("java"); + return new DeclarativeConfigPropertiesBridge( + javaConfig == null ? empty() : javaConfig, mappings, overrideValues); } } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 56b705e90d60..3e673cfc8425 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.config.bridge.ConfigPropertiesBackedConfigProvider; import io.opentelemetry.javaagent.bootstrap.OpenTelemetrySdkAccess; import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; +import io.opentelemetry.javaagent.tooling.config.RuntimeConfigProperties; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.SdkAutoconfigureAccess; @@ -41,29 +42,24 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( ConfigProvider configProvider = AutoConfigureUtil.getConfigProvider(autoConfiguredSdk); OpenTelemetrySdk sdk = autoConfiguredSdk.getOpenTelemetrySdk(); ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredSdk); + if (configProperties == null) { + configProperties = getDeclarativeConfigBridgedProperties(earlyConfig, configProvider); + } + RuntimeConfigProperties.set(configProperties); setForceFlush(sdk); if (configProvider != null) { - // YAML was used - the SDK already implements ExtendedOpenTelemetry with ConfigProvider + // Declarative configuration was used GlobalOpenTelemetry.set(sdk); - // We create a new instance of AutoConfiguredOpenTelemetrySdk, - // which has a ConfigProperties instance bridged from the declarative config. - // This allows most instrumentations to be unaware of which configuration style is used. - return SdkAutoconfigureAccess.create( - sdk, - SdkAutoconfigureAccess.getResource(autoConfiguredSdk), - getDeclarativeConfigBridgedProperties(earlyConfig, configProvider), - configProvider); + return autoConfiguredSdk; } - // System properties/env vars were used - create a ConfigProvider backed by ConfigProperties. - // This ensures GlobalOpenTelemetry.get() returns an ExtendedOpenTelemetry with - // a working getConfigProvider(), allowing instrumentations to use a single API. + // Declarative configuration was not used, so we provide fake declarative configuration + // based on config properties ConfigProvider generatedConfigProvider = ConfigPropertiesBackedConfigProvider.create(configProperties); - // Wrap the SDK so it implements ExtendedOpenTelemetry with our generated ConfigProvider ExtendedOpenTelemetrySdkWrapper wrappedSdk = new ExtendedOpenTelemetrySdkWrapper(sdk, generatedConfigProvider); GlobalOpenTelemetry.set(wrappedSdk); From bec56b270e04bfafdc35c254ea6299fcd53b886b Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 19:00:27 -0800 Subject: [PATCH 38/73] check --- .../javaagent/tooling/AgentInstaller.java | 10 ----- .../ExtendedOpenTelemetrySdkWrapper.java | 41 ++++--------------- .../tooling/OpenTelemetryInstaller.java | 32 +++++++-------- ...tiveConfigPropertiesBridgeBuilderTest.java | 21 ++-------- .../ConfigurationPropertiesSupplierTest.java | 35 ++++++++++++++-- .../OtlpProtocolPropertiesSupplierTest.java | 13 +++--- 6 files changed, 63 insertions(+), 89 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index dbcea04d063b..7bd86ab9174d 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -9,7 +9,6 @@ import static io.opentelemetry.javaagent.tooling.SafeServiceLoader.load; import static io.opentelemetry.javaagent.tooling.SafeServiceLoader.loadOrdered; import static io.opentelemetry.javaagent.tooling.Utils.getResourceName; -import static java.util.Arrays.asList; import static java.util.logging.Level.FINE; import static java.util.logging.Level.SEVERE; import static net.bytebuddy.matcher.ElementMatchers.any; @@ -51,8 +50,6 @@ import io.opentelemetry.javaagent.tooling.util.Trie; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.SdkAutoconfigureAccess; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.Instrumentation; import java.util.ArrayList; @@ -84,13 +81,6 @@ public class AgentInstaller { static final String JAVAAGENT_ENABLED_CONFIG = "otel.javaagent.enabled"; - // This property may be set to force synchronous AgentListener#afterAgent() execution: the - // condition for delaying the AgentListener initialization is pretty broad and in case it covers - // too much javaagent users can file a bug, force sync execution by setting this property to true - // and continue using the javaagent - private static final String FORCE_SYNCHRONOUS_AGENT_LISTENERS_CONFIG = - "otel.javaagent.experimental.force-synchronous-agent-listeners"; - private static final String STRICT_CONTEXT_STRESSOR_MILLIS = "otel.javaagent.testing.strict-context-stressor-millis"; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java index fbc4e22fd3db..d9d2b7f15bce 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java @@ -5,35 +5,32 @@ package io.opentelemetry.javaagent.tooling; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.logs.LoggerProvider; import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.api.trace.TracerProvider; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.sdk.OpenTelemetrySdk; /** - * Wrapper around {@link OpenTelemetry} that implements {@link ExtendedOpenTelemetry} and provides a + * Wrapper around {@link OpenTelemetrySdk} that implements {@link ExtendedOpenTelemetry} and provides a * {@link ConfigProvider} even when the underlying SDK doesn't have one. * *

    This is used when the user configured with system properties (not YAML), so we create a * ConfigProvider backed by the final ConfigProperties. This allows instrumentations to always use * {@code ExtendedOpenTelemetry.getConfigProvider()} regardless of how the SDK was configured. */ -public final class ExtendedOpenTelemetrySdkWrapper implements ExtendedOpenTelemetry { +public final class ExtendedOpenTelemetrySdkWrapper extends OpenTelemetrySdk implements ExtendedOpenTelemetry { - private final OpenTelemetry delegate; private final ConfigProvider configProvider; - /** - * Creates a new wrapper. - * - * @param delegate the OpenTelemetry instance to wrap - * @param configProvider the ConfigProvider to return from getConfigProvider() - */ - public ExtendedOpenTelemetrySdkWrapper(OpenTelemetry delegate, ConfigProvider configProvider) { - this.delegate = delegate; + public ExtendedOpenTelemetrySdkWrapper(OpenTelemetrySdk delegate, ConfigProvider configProvider) { + super( + delegate.getSdkTracerProvider(), + delegate.getSdkMeterProvider(), + delegate.getSdkLoggerProvider(), + delegate.getPropagators()); this.configProvider = configProvider; } @@ -41,24 +38,4 @@ public ExtendedOpenTelemetrySdkWrapper(OpenTelemetry delegate, ConfigProvider co public ConfigProvider getConfigProvider() { return configProvider; } - - @Override - public TracerProvider getTracerProvider() { - return delegate.getTracerProvider(); - } - - @Override - public MeterProvider getMeterProvider() { - return delegate.getMeterProvider(); - } - - @Override - public LoggerProvider getLogsBridge() { - return delegate.getLogsBridge(); - } - - @Override - public ContextPropagators getPropagators() { - return delegate.getPropagators(); - } } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 3e673cfc8425..3ceff208ccef 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -42,33 +42,29 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( ConfigProvider configProvider = AutoConfigureUtil.getConfigProvider(autoConfiguredSdk); OpenTelemetrySdk sdk = autoConfiguredSdk.getOpenTelemetrySdk(); ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredSdk); - if (configProperties == null) { + if (configProvider == null && configProperties != null) { + // Provide a fake declarative configuration based on config properties + // so that declarative configuration APIs can be used everywhere + configProvider = ConfigPropertiesBackedConfigProvider.create(configProperties); + sdk = new ExtendedOpenTelemetrySdkWrapper(sdk, configProvider); + } else if (configProperties == null && configProvider != null) { + // Declarative configuration was used, but we still need a ConfigProperties + // instance for some existing java agent extension APIs configProperties = getDeclarativeConfigBridgedProperties(earlyConfig, configProvider); + } else { + throw new IllegalStateException("Exactly one of configProvider or configProperties must be non-null"); } - RuntimeConfigProperties.set(configProperties); setForceFlush(sdk); - - if (configProvider != null) { - // Declarative configuration was used - GlobalOpenTelemetry.set(sdk); - return autoConfiguredSdk; - } - - // Declarative configuration was not used, so we provide fake declarative configuration - // based on config properties - ConfigProvider generatedConfigProvider = - ConfigPropertiesBackedConfigProvider.create(configProperties); - - ExtendedOpenTelemetrySdkWrapper wrappedSdk = - new ExtendedOpenTelemetrySdkWrapper(sdk, generatedConfigProvider); - GlobalOpenTelemetry.set(wrappedSdk); + GlobalOpenTelemetry.set(sdk); + // we still need a ConfigProperties instance for some existing agent extension APIs + RuntimeConfigProperties.set(configProperties); return SdkAutoconfigureAccess.create( sdk, SdkAutoconfigureAccess.getResource(autoConfiguredSdk), configProperties, - generatedConfigProvider); + configProvider); } // Visible for testing diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java index 7677a6220546..5082e537b357 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java @@ -21,22 +21,6 @@ @SuppressWarnings("DoNotMockAutoValue") class DeclarativeConfigPropertiesBridgeBuilderTest { - @Test - void shouldUseConfigPropertiesForAutoConfiguration() { - ConfigProperties configPropertiesMock = mock(ConfigProperties.class); - AutoConfiguredOpenTelemetrySdk sdkMock = mock(AutoConfiguredOpenTelemetrySdk.class); - try (MockedStatic autoConfigureUtilMock = - Mockito.mockStatic(AutoConfigureUtil.class)) { - autoConfigureUtilMock - .when(() -> AutoConfigureUtil.getConfig(sdkMock)) - .thenReturn(configPropertiesMock); - - ConfigProperties configProperties = - new DeclarativeConfigPropertiesBridgeBuilder().build(sdkMock); - - assertThat(configProperties).isSameAs(configPropertiesMock); - } - } @Test void shouldUseConfigProviderForDeclarativeConfiguration() { @@ -61,7 +45,8 @@ void shouldUseConfigProviderForDeclarativeConfiguration() { .thenReturn(configProviderMock); ConfigProperties configProperties = - new DeclarativeConfigPropertiesBridgeBuilder().build(sdkMock); + new DeclarativeConfigPropertiesBridgeBuilder() + .buildFromInstrumentationConfig(instrumentationConfigMock); assertThat(configProperties.getString(propertyName)).isEqualTo(expectedValue); } @@ -81,7 +66,7 @@ void shouldUseConfigProviderForDeclarativeConfiguration_noInstrumentationConfig( .thenReturn(configProviderMock); ConfigProperties configProperties = - new DeclarativeConfigPropertiesBridgeBuilder().build(sdkMock); + new DeclarativeConfigPropertiesBridgeBuilder().buildFromInstrumentationConfig(null); assertThat(configProperties.getString("testProperty")).isNull(); } 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..37983cc0e2f3 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,9 +10,10 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import java.io.IOException; @@ -41,7 +42,7 @@ void setUp() { void fileConfigOverwritesUserPropertiesSupplier(@TempDir Path tempDir) throws IOException { // given Path configFile = tempDir.resolve("test-config.properties"); - Files.write(configFile, singleton("custom.key = 42")); + Files.write(configFile, singleton("otel.instrumentation.custom.key = 42")); System.setProperty(ConfigurationFile.CONFIGURATION_FILE_PROPERTY, configFile.toString()); // when @@ -50,7 +51,32 @@ void fileConfigOverwritesUserPropertiesSupplier(@TempDir Path tempDir) throws IO this.getClass().getClassLoader(), EarlyInitAgentConfig.create()); // then - assertThat(AutoConfigureUtil.getConfig(autoConfiguredSdk).getString("custom.key")) + assertThat( + ((ExtendedOpenTelemetry) autoConfiguredSdk.getOpenTelemetrySdk()) + .getConfigProvider() + .getInstrumentationConfig() + .getStructured("custom", DeclarativeConfigProperties.empty()) + .getString("key")) + .isEqualTo("42"); + } + + // baseline for the test above to make sure UserCustomPropertiesSupplier + // is actually working + @SetSystemProperty(key = "otel.sdk.disabled", value = "true") // don't setup the SDK + @Test + void userPropertiesSupplier(@TempDir Path tempDir) throws IOException { + // when + AutoConfiguredOpenTelemetrySdk autoConfiguredSdk = + OpenTelemetryInstaller.installOpenTelemetrySdk( + this.getClass().getClassLoader(), EarlyInitAgentConfig.create()); + + // then + assertThat( + ((ExtendedOpenTelemetry) autoConfiguredSdk.getOpenTelemetrySdk()) + .getConfigProvider() + .getInstrumentationConfig() + .getStructured("custom", DeclarativeConfigProperties.empty()) + .getString("key")) .isEqualTo("42"); } @@ -59,7 +85,8 @@ public static class UserCustomPropertiesSupplier implements AutoConfigurationCus @Override public void customize(AutoConfigurationCustomizer autoConfiguration) { - autoConfiguration.addPropertiesSupplier(() -> singletonMap("custom.key", "123")); + autoConfiguration.addPropertiesSupplier( + () -> singletonMap("otel.instrumentation.custom.key", "123")); } } } diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java index cbca89d51548..b037894a9a37 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/OtlpProtocolPropertiesSupplierTest.java @@ -10,7 +10,6 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -35,9 +34,9 @@ void keepUserOtlpProtocolConfiguration() { this.getClass().getClassLoader(), EarlyInitAgentConfig.create()); // then - assertThat( - AutoConfigureUtil.getConfig(autoConfiguredSdk).getString("otel.exporter.otlp.protocol")) - .isEqualTo("grpc"); + assertThat(autoConfiguredSdk.getOpenTelemetrySdk().toString()) + .contains("OtlpGrpc") + .doesNotContain("OtlpHttp"); } @Test @@ -48,8 +47,8 @@ void defaultHttpProtobufOtlpProtocolConfiguration() { this.getClass().getClassLoader(), EarlyInitAgentConfig.create()); // then - assertThat( - AutoConfigureUtil.getConfig(autoConfiguredSdk).getString("otel.exporter.otlp.protocol")) - .isEqualTo("http/protobuf"); + assertThat(autoConfiguredSdk.getOpenTelemetrySdk().toString()) + .contains("OtlpHttp") + .doesNotContain("OtlpGrpc"); } } From 5897db9b321a1ada93985abd066f0214c7b8229a Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 19:01:35 -0800 Subject: [PATCH 39/73] more --- .../internal/DeclarativeConfigUtil.java | 3 ++- .../awssdk/v1_11/TracingRequestHandler.java | 5 +--- .../awssdk/v2_2/AwsSdkSingletons.java | 6 +++-- .../finatra/FinatraSingletons.java | 2 +- .../axis2/Axis2Singletons.java | 6 ++++- .../instrumentation/cxf/CxfSingletons.java | 6 ++++- .../metro/MetroSingletons.java | 6 ++++- .../jfinal/v3_2/JFinalSingletons.java | 2 +- .../jmx/JmxMetricInsightInstaller.java | 5 ++-- .../kafkastreams/KafkaStreamsSingletons.java | 5 +--- .../rabbitmq/RabbitSingletons.java | 5 +--- .../kafka/v1_0/ReactorKafkaSingletons.java | 5 +--- .../v4_8/RocketMqClientHooks.java | 5 +--- .../internal/RuntimeMetricsConfigUtil.java | 3 ++- .../internal/RuntimeMetricsConfigUtil.java | 6 ++--- .../OpenTelemetryAutoConfiguration.java | 4 --- ...KafkaInstrumentationAutoConfiguration.java | 3 +-- ...lientInstrumentationAutoConfiguration.java | 5 +++- ...mentationSpringBoot4AutoConfiguration.java | 5 +++- .../autoconfigure/DeclarativeConfigTest.java | 3 +-- .../v4_1/SpringIntegrationSingletons.java | 5 +--- .../javaagent/tooling/AgentInstaller.java | 3 +-- .../ExtendedOpenTelemetrySdkWrapper.java | 11 +++----- .../tooling/OpenTelemetryInstaller.java | 3 ++- .../config/RuntimeConfigProperties.java | 26 +++++++++++++++++++ .../ConfigurationPropertiesSupplierTest.java | 2 +- 26 files changed, 80 insertions(+), 60 deletions(-) create mode 100644 javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java index cb6657b2c240..e992e64b78da 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/config/internal/DeclarativeConfigUtil.java @@ -42,7 +42,8 @@ public static Optional getLong(OpenTelemetry openTelemetry, String... prop return Optional.ofNullable(node != null ? node.getLong(leaf(propertyPath)) : null); } - public static Optional getDuration(OpenTelemetry openTelemetry, String... propertyPath) { + public static Optional getDuration( + OpenTelemetry openTelemetry, String... propertyPath) { DeclarativeConfigProperties node = getDeclarativeConfigNode(openTelemetry, propertyPath); if (node == null) { return Optional.empty(); diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java index 6bab37e8f48b..66fef5c93688 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/TracingRequestHandler.java @@ -49,10 +49,7 @@ public class TracingRequestHandler extends RequestHandler2 { .orElse(false)) .setCapturedHeaders( DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), - "java", - "messaging", - "capture_headers/development") + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") .orElse(Collections.emptyList())) .build() .newRequestHandler(); 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 d2b16d51937a..f4970ead7075 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 @@ -43,8 +43,10 @@ protected boolean messagingReceiveInstrumentationEnabled() { @Override protected boolean getBoolean(String name, boolean defaultValue) { // Convert otel.instrumentation.xxx.yyy to java/xxx/yyy format - // e.g. otel.instrumentation.aws-sdk.experimental-span-attributes -> java/aws_sdk/experimental_span_attributes - String[] parts = name.replace("otel.instrumentation.", "java.").replace("-", "_").split("\\."); + // e.g. otel.instrumentation.aws-sdk.experimental-span-attributes -> + // java/aws_sdk/experimental_span_attributes + String[] parts = + name.replace("otel.instrumentation.", "java.").replace("-", "_").split("\\."); return DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), parts) .orElse(defaultValue); } diff --git a/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java b/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java index daa6821f7bb8..938ecd735859 100644 --- a/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java +++ b/instrumentation/finatra-2.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/finatra/FinatraSingletons.java @@ -10,8 +10,8 @@ import com.twitter.finatra.http.internal.routing.Route; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.ClassNames; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; diff --git a/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java b/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java index cddd314c00e4..a59dbd3045f9 100644 --- a/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java +++ b/instrumentation/jaxws/jaxws-2.0-axis2-1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/axis2/Axis2Singletons.java @@ -20,7 +20,11 @@ public class Axis2Singletons { GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, Axis2Request::spanName) .setEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "controller_telemetry/development", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java b/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java index b82328a21a92..9f206a43b692 100644 --- a/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java +++ b/instrumentation/jaxws/jaxws-cxf-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/cxf/CxfSingletons.java @@ -20,7 +20,11 @@ public class CxfSingletons { GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, CxfRequest::spanName) .setEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "controller_telemetry/development", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java b/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java index 0cef5415b992..3f58cd07958d 100644 --- a/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java +++ b/instrumentation/jaxws/jaxws-metro-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/metro/MetroSingletons.java @@ -20,7 +20,11 @@ public class MetroSingletons { GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, MetroRequest::spanName) .setEnabled( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "common", "controller_telemetry/development", "enabled") + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") .orElse(false)) .buildInstrumenter(); } diff --git a/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java b/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java index 8c5db9e961cf..fcf3f37f26b6 100644 --- a/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java +++ b/instrumentation/jfinal-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jfinal/v3_2/JFinalSingletons.java @@ -9,10 +9,10 @@ import com.jfinal.render.JsonRender; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttributesGetter; import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeSpanNameExtractor; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.incubator.semconv.util.ClassAndMethod; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute; diff --git a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java index 1a82fa59e11a..62d272cbc690 100644 --- a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java +++ b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java @@ -77,9 +77,8 @@ private static void addClasspathRules(String target, JmxTelemetryBuilder builder } } - private static Duration beanDiscoveryDelay( - OpenTelemetry openTelemetry) { + private static Duration beanDiscoveryDelay(OpenTelemetry openTelemetry) { return DeclarativeConfigUtil.getDuration(openTelemetry, "java", "jmx", "discovery_delay") - .orElse(Duration.ofMinutes(1)); + .orElse(Duration.ofMinutes(1)); } } diff --git a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java index 5e18c4b3ed9d..99b0de613181 100644 --- a/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java +++ b/instrumentation/kafka/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsSingletons.java @@ -20,10 +20,7 @@ public final class KafkaStreamsSingletons { new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) .setCapturedHeaders( DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), - "java", - "messaging", - "capture_headers/development") + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java index 8ef1e7840897..5a94eb5957c8 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitSingletons.java @@ -121,10 +121,7 @@ private static AttributesExtractor buildMessagingAttributesExtracto return MessagingAttributesExtractor.builder(getter, operation) .setCapturedHeaders( DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), - "java", - "messaging", - "capture_headers/development") + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") .orElse(Collections.emptyList())) .build(); } diff --git a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java index 54b807c04413..e68f9af5bf28 100644 --- a/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java +++ b/instrumentation/reactor/reactor-kafka-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactor/kafka/v1_0/ReactorKafkaSingletons.java @@ -20,10 +20,7 @@ final class ReactorKafkaSingletons { new KafkaInstrumenterFactory(GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME) .setCapturedHeaders( DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), - "java", - "messaging", - "capture_headers/development") + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java index fb5a3fb14e5c..71ad134c7ad5 100644 --- a/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java +++ b/instrumentation/rocketmq/rocketmq-client/rocketmq-client-4.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rocketmqclient/v4_8/RocketMqClientHooks.java @@ -19,10 +19,7 @@ public final class RocketMqClientHooks { RocketMqTelemetry.builder(GlobalOpenTelemetry.get()) .setCapturedHeaders( DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), - "java", - "messaging", - "capture_headers/development") + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") .orElse(Collections.emptyList())) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java index 088319944fdd..3912c722c6a0 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java17/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java17/internal/RuntimeMetricsConfigUtil.java @@ -26,7 +26,8 @@ public static RuntimeMetrics configure( If enabled, default to only the metrics not already covered by runtime-telemetry-java8 */ boolean defaultEnabled = - DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled").orElse(true); + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled") + .orElse(true); if (DeclarativeConfigUtil.getBoolean( openTelemetry, "java", "runtime_telemetry_java17", "enable_all") .orElse(false)) { diff --git a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java index 195d29a218a1..4fc42d8f9553 100644 --- a/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java +++ b/instrumentation/runtime-telemetry/runtime-telemetry-java8/library/src/main/java/io/opentelemetry/instrumentation/runtimemetrics/java8/internal/RuntimeMetricsConfigUtil.java @@ -22,9 +22,9 @@ private RuntimeMetricsConfigUtil() {} public static RuntimeMetrics configure( RuntimeMetricsBuilder builder, OpenTelemetry openTelemetry) { boolean defaultEnabled = - DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled").orElse(true); - if (!DeclarativeConfigUtil.getBoolean( - openTelemetry, "java", "runtime_telemetry", "enabled") + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled") + .orElse(true); + if (!DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "runtime_telemetry", "enabled") .orElse(defaultEnabled)) { // nothing is enabled return null; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index 6504c0082f4d..af15d67d71c2 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -5,8 +5,6 @@ package io.opentelemetry.instrumentation.spring.autoconfigure; -import static java.util.Objects.requireNonNull; - import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; import io.opentelemetry.api.trace.TracerProvider; @@ -41,8 +39,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.function.Function; -import java.util.function.Supplier; import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java index 9765c413106d..47c0ecf40e41 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java @@ -38,8 +38,7 @@ static SpringKafkaTelemetry getTelemetry(ObjectProvider openTelem OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); return SpringKafkaTelemetry.builder(openTelemetry) .setCaptureExperimentalSpanAttributes( - DeclarativeConfigUtil.getBoolean( - openTelemetry, "kafka", "experimental_span_attributes") + DeclarativeConfigUtil.getBoolean(openTelemetry, "kafka", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java index 7629142339ef..5b984d349848 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java @@ -38,7 +38,10 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - openTelemetry, "common", "db_statement_sanitizer", "enabled") + openTelemetry, + "common", + "db_statement_sanitizer", + "enabled") .orElse(true))) .build() .newCommandListener()); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java index 994b1d30ede2..97abdc050578 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java @@ -35,7 +35,10 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { .orElseGet( () -> DeclarativeConfigUtil.getBoolean( - openTelemetry, "common", "db_statement_sanitizer", "enabled") + openTelemetry, + "common", + "db_statement_sanitizer", + "enabled") .orElse(true))) .build() .newCommandListener()); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java index 323329f06e89..41d1042e3ec9 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java @@ -58,8 +58,7 @@ void initializeProvidersAndOpenTelemetry() { context -> { assertThat(context).hasBean("openTelemetry").hasBean("otelProperties"); OpenTelemetry openTelemetry = context.getBean(OpenTelemetry.class); - assertThat(DeclarativeConfigUtil.getString(openTelemetry, "foo", "bar")) - .hasValue("baz"); + assertThat(DeclarativeConfigUtil.getString(openTelemetry, "foo", "bar")).hasValue("baz"); }); } diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java index 63bfc6080a24..6dd18e37f670 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationSingletons.java @@ -28,10 +28,7 @@ public final class SpringIntegrationSingletons { SpringIntegrationTelemetry.builder(GlobalOpenTelemetry.get()) .setCapturedHeaders( DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), - "java", - "messaging", - "capture_headers/development") + GlobalOpenTelemetry.get(), "java", "messaging", "capture_headers/development") .orElse(Collections.emptyList())) .setProducerSpanEnabled( DeclarativeConfigUtil.getBoolean( diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 7bd86ab9174d..93c79220d8ec 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -347,8 +347,7 @@ private static void addSqlCommenterCustomizers(ClassLoader extensionClassLoader) } private static void runAfterAgentListeners( - Iterable agentListeners, - AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { + Iterable agentListeners, AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { // java.util.logging.LogManager maintains a final static LogManager, which is created during // class initialization. Some AgentListener implementations may use JRE bootstrap classes // which touch this class (e.g. JFR classes or some MBeans). diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java index d9d2b7f15bce..602fc0e01ae5 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ExtendedOpenTelemetrySdkWrapper.java @@ -7,21 +7,18 @@ import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.logs.LoggerProvider; -import io.opentelemetry.api.metrics.MeterProvider; -import io.opentelemetry.api.trace.TracerProvider; -import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.sdk.OpenTelemetrySdk; /** - * Wrapper around {@link OpenTelemetrySdk} that implements {@link ExtendedOpenTelemetry} and provides a - * {@link ConfigProvider} even when the underlying SDK doesn't have one. + * Wrapper around {@link OpenTelemetrySdk} that implements {@link ExtendedOpenTelemetry} and + * provides a {@link ConfigProvider} even when the underlying SDK doesn't have one. * *

    This is used when the user configured with system properties (not YAML), so we create a * ConfigProvider backed by the final ConfigProperties. This allows instrumentations to always use * {@code ExtendedOpenTelemetry.getConfigProvider()} regardless of how the SDK was configured. */ -public final class ExtendedOpenTelemetrySdkWrapper extends OpenTelemetrySdk implements ExtendedOpenTelemetry { +public final class ExtendedOpenTelemetrySdkWrapper extends OpenTelemetrySdk + implements ExtendedOpenTelemetry { private final ConfigProvider configProvider; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 3ceff208ccef..1929f0234efb 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -52,7 +52,8 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( // instance for some existing java agent extension APIs configProperties = getDeclarativeConfigBridgedProperties(earlyConfig, configProvider); } else { - throw new IllegalStateException("Exactly one of configProvider or configProperties must be non-null"); + throw new IllegalStateException( + "Exactly one of configProvider or configProperties must be non-null"); } setForceFlush(sdk); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java new file mode 100644 index 000000000000..d30baf3e65a9 --- /dev/null +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java @@ -0,0 +1,26 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.javaagent.tooling.config; + +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import javax.annotation.Nullable; + +public final class RuntimeConfigProperties { + + // TODO populate with empty config for safety? + @Nullable private static volatile ConfigProperties instance; + + public static void set(ConfigProperties configProperties) { + instance = configProperties; + } + + @Nullable + public static ConfigProperties get() { + return instance; + } + + private RuntimeConfigProperties() {} +} 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 37983cc0e2f3..4a615c4ddfe9 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,8 +10,8 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.api.incubator.ExtendedOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.javaagent.tooling.OpenTelemetryInstaller; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; From c36373fa9822cd78e1171edc882b912c8aabe3c3 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 19:02:40 -0800 Subject: [PATCH 40/73] fix --- .../tooling/config/ConfigurationPropertiesSupplierTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4a615c4ddfe9..cb214d49e977 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 @@ -77,7 +77,7 @@ void userPropertiesSupplier(@TempDir Path tempDir) throws IOException { .getInstrumentationConfig() .getStructured("custom", DeclarativeConfigProperties.empty()) .getString("key")) - .isEqualTo("42"); + .isEqualTo("123"); } // SPI used in test From 7c262ecc8da325e009f5a900c9f1c33847498884 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 19:05:37 -0800 Subject: [PATCH 41/73] remove --- ...tiveConfigPropertiesBridgeBuilderTest.java | 74 ------------------- 1 file changed, 74 deletions(-) delete mode 100644 javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java deleted file mode 100644 index 5082e537b357..000000000000 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/DeclarativeConfigPropertiesBridgeBuilderTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.tooling; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; -import org.junit.jupiter.api.Test; -import org.mockito.MockedStatic; -import org.mockito.Mockito; - -@SuppressWarnings("DoNotMockAutoValue") -class DeclarativeConfigPropertiesBridgeBuilderTest { - - @Test - void shouldUseConfigProviderForDeclarativeConfiguration() { - String propertyName = "testProperty"; - String expectedValue = "the value"; - DeclarativeConfigProperties javaNodeMock = mock(DeclarativeConfigProperties.class); - when(javaNodeMock.getString(propertyName)).thenReturn(expectedValue); - - DeclarativeConfigProperties instrumentationConfigMock = mock(DeclarativeConfigProperties.class); - when(instrumentationConfigMock.getStructured(eq("java"))).thenReturn(javaNodeMock); - - ConfigProvider configProviderMock = mock(ConfigProvider.class); - when(configProviderMock.getInstrumentationConfig()).thenReturn(instrumentationConfigMock); - - AutoConfiguredOpenTelemetrySdk sdkMock = mock(AutoConfiguredOpenTelemetrySdk.class); - - try (MockedStatic autoConfigureUtilMock = - Mockito.mockStatic(AutoConfigureUtil.class)) { - autoConfigureUtilMock.when(() -> AutoConfigureUtil.getConfig(sdkMock)).thenReturn(null); - autoConfigureUtilMock - .when(() -> AutoConfigureUtil.getConfigProvider(sdkMock)) - .thenReturn(configProviderMock); - - ConfigProperties configProperties = - new DeclarativeConfigPropertiesBridgeBuilder() - .buildFromInstrumentationConfig(instrumentationConfigMock); - - assertThat(configProperties.getString(propertyName)).isEqualTo(expectedValue); - } - } - - @Test - void shouldUseConfigProviderForDeclarativeConfiguration_noInstrumentationConfig() { - AutoConfiguredOpenTelemetrySdk sdkMock = mock(AutoConfiguredOpenTelemetrySdk.class); - ConfigProvider configProviderMock = mock(ConfigProvider.class); - when(configProviderMock.getInstrumentationConfig()).thenReturn(null); - - try (MockedStatic autoConfigureUtilMock = - Mockito.mockStatic(AutoConfigureUtil.class)) { - autoConfigureUtilMock.when(() -> AutoConfigureUtil.getConfig(sdkMock)).thenReturn(null); - autoConfigureUtilMock - .when(() -> AutoConfigureUtil.getConfigProvider(sdkMock)) - .thenReturn(configProviderMock); - - ConfigProperties configProperties = - new DeclarativeConfigPropertiesBridgeBuilder().buildFromInstrumentationConfig(null); - - assertThat(configProperties.getString("testProperty")).isNull(); - } - } -} From 5db42a0e54461973522d5de6136bec3f27f8e450 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 19:08:11 -0800 Subject: [PATCH 42/73] rm --- CI-PLAN.md | 64 ------------------------------------------------------ 1 file changed, 64 deletions(-) delete mode 100644 CI-PLAN.md diff --git a/CI-PLAN.md b/CI-PLAN.md deleted file mode 100644 index 7e5522786f71..000000000000 --- a/CI-PLAN.md +++ /dev/null @@ -1,64 +0,0 @@ -# CI Failure Analysis Plan - -## Failed Jobs Summary -- Job: common / test0 (all Java versions, both indy true/false) -- Job: common / test1 (all Java versions, both indy true/false) -- Job: common / test2 (all Java versions, both indy true/false) -- Job: common / test3 (all Java versions, both indy true/false) -- Job: common / smoke-test (ubuntu-latest, websphere) -- Job: test-latest-deps / testLatestDeps0-3 - -## Unique Failed Gradle Tasks - -- [ ] Task: :instrumentation:jdbc:javaagent:test - - Seen in: test0 jobs, testLatestDeps jobs - - Log files: /tmp/test0-java8-indy-false.log, /tmp/testLatestDeps0.log - - Error: Tests expecting `peer.service` attribute that is missing - -- [ ] Task: :instrumentation:netty:netty-3.8:javaagent:test - - Seen in: test0 jobs - - Log files: /tmp/test0-java8-indy-false.log - - Error: Tests expecting `peer.service` attribute that is missing - -- [ ] Task: :instrumentation:servlet:servlet-3.0:javaagent-testing:test - - Seen in: test0 jobs - - Log files: /tmp/test0-java8-indy-false.log - - Error: Tests expecting HTTP headers to be captured (`captureHttpHeaders` tests failing) - -- [ ] Task: :instrumentation:spring:spring-webflux:spring-webflux-5.0:javaagent:test - - Seen in: test0 jobs, testLatestDeps jobs - - Log files: /tmp/test0-java8-indy-false.log, /tmp/testLatestDeps0.log - - Error: Tests expecting `peer.service` attribute that is missing - -- [ ] Task: :instrumentation:vertx:vertx-redis-client-4.0:javaagent:test - - Seen in: testLatestDeps jobs - - Log files: /tmp/testLatestDeps0.log - - Error: Unknown, need to investigate - -- [ ] Task: :instrumentation:elasticsearch:elasticsearch-api-client-7.16:javaagent:test - - Seen in: testLatestDeps jobs - - Log files: /tmp/testLatestDeps0.log - - Error: Unknown, need to investigate - -- [ ] Task: :smoke-tests:test - - Seen in: smoke-test websphere job - - Log files: /tmp/smoke-test-websphere.log - - Error: Missing `http.request.header.x-test-request` attribute - -## Notes -The common thread is that tests are expecting certain attributes that are not being captured: -1. `peer.service` attribute missing in client spans (netty, jdbc, spring-webflux) -2. HTTP request headers not being captured in smoke tests -3. Some servlet tests also failing on HTTP header capture - -Root cause analysis: -- Commit bc9ba668 introduced declarative config bridge infrastructure -- Commit 016e5a41 changed PeerServiceResolver to use DeclarativeConfigUtil.getStructuredList() -- The configuration mapping is already in place (general.peer.service_mapping → otel.instrumentation.common.peer-service-mapping) -- Tests set -Dotel.instrumentation.common.peer-service-mapping=127.0.0.1=test-peer-service,localhost=test-peer-service -- HTTP headers are set via -Dotel.instrumentation.http.server.capture-request-headers=X-Test-Request in smoke tests - -Need to verify: -1. Are the singleton classes being initialized before GlobalOpenTelemetry is set? -2. Is the ConfigProvider properly returning the mapped values? -3. Are there any timing issues with static initialization? From d4db4a04a829033bc2135d0e2d5157b51c33dfc5 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 19:50:48 -0800 Subject: [PATCH 43/73] fix --- .../jdbc/DataSourcePostProcessor.java | 17 +++++++++------- ...KafkaInstrumentationAutoConfiguration.java | 11 +++++++--- ...lientInstrumentationAutoConfiguration.java | 20 +++++++++---------- .../R2dbcInstrumentingPostProcessor.java | 18 ++++++++++------- ...mentationSpringBoot4AutoConfiguration.java | 3 ++- 5 files changed, 41 insertions(+), 28 deletions(-) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java index 825b59a0d484..8ea3c0adb0bc 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java @@ -60,13 +60,16 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { JdbcTelemetryBuilder builder = JdbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - DeclarativeConfigUtil.getBoolean( - openTelemetry, "jdbc", "statement_sanitizer", "enabled") - .orElseGet( - () -> - DeclarativeConfigUtil.getBoolean( - openTelemetry, "common", "db_statement_sanitizer", "enabled") - .orElse(true))) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "jdbc", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, + "common", + "db_statement_sanitizer", + "enabled") + .orElse(true))) .setCaptureQueryParameters( DeclarativeConfigUtil.getBoolean( openTelemetry, "jdbc", "capture_query_parameters") diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java index 47c0ecf40e41..922e40ac751c 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java @@ -38,15 +38,20 @@ static SpringKafkaTelemetry getTelemetry(ObjectProvider openTelem OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); return SpringKafkaTelemetry.builder(openTelemetry) .setCaptureExperimentalSpanAttributes( - DeclarativeConfigUtil.getBoolean(openTelemetry, "kafka", "experimental_span_attributes") + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "kafka", "experimental_span_attributes") .orElse(false)) .setMessagingReceiveInstrumentationEnabled( DeclarativeConfigUtil.getBoolean( - openTelemetry, "messaging", "experimental", "receive_telemetry", "enabled") + openTelemetry, + "java", + "messaging", + "receive_telemetry/development", + "enabled") .orElse(false)) .setCapturedHeaders( DeclarativeConfigUtil.getList( - openTelemetry, "messaging", "experimental", "capture_headers") + openTelemetry, "java", "messaging", "capture_headers/development") .orElse(emptyList())) .build(); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java index 5b984d349848..0db4efb979eb 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java @@ -33,16 +33,16 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { builder.addCommandListener( MongoTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - DeclarativeConfigUtil.getBoolean( - openTelemetry, "mongo", "statement_sanitizer", "enabled") - .orElseGet( - () -> - DeclarativeConfigUtil.getBoolean( - openTelemetry, - "common", - "db_statement_sanitizer", - "enabled") - .orElse(true))) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "mongo", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, + "common", + "db_statement_sanitizer", + "enabled") + .orElse(true))) .build() .newCommandListener()); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java index 857acc409175..7f653ccd7b3f 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java @@ -30,13 +30,17 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); return R2dbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - DeclarativeConfigUtil.getBoolean( - openTelemetry, "r2dbc", "statement_sanitizer", "enabled") - .orElseGet( - () -> - DeclarativeConfigUtil.getBoolean( - openTelemetry, "common", "db_statement_sanitizer", "enabled") - .orElse(true))) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "r2dbc", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, + "java", + "common", + "db_statement_sanitizer", + "enabled") + .orElse(true))) .build() .wrapConnectionFactory(connectionFactory, getConnectionFactoryOptions(connectionFactory)); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java index 97abdc050578..cfe9f1f0656e 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/javaSpring4/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationSpringBoot4AutoConfiguration.java @@ -31,11 +31,12 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { MongoTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( DeclarativeConfigUtil.getBoolean( - openTelemetry, "mongo", "statement_sanitizer", "enabled") + openTelemetry, "java", "mongo", "statement_sanitizer", "enabled") .orElseGet( () -> DeclarativeConfigUtil.getBoolean( openTelemetry, + "java", "common", "db_statement_sanitizer", "enabled") From eb2706526eaa6406232bcaf9b07b611cbeb6cc7d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 12 Dec 2025 20:40:14 -0800 Subject: [PATCH 44/73] more --- MAPPING.md | 113 ++++++++++++++++++ .../guava/v10_0/InstrumentationHelper.java | 2 +- .../HibernateInstrumenterFactory.java | 2 +- .../hystrix/HystrixSingletons.java | 2 +- .../openai/v1_1/OpenAiSingletons.java | 2 +- .../powerjob/v4_0/PowerJobSingletons.java | 2 +- .../quartz/v2_0/QuartzSingletons.java | 2 +- .../v2_0/TracingAssemblyActivation.java | 2 +- .../v3_0/TracingAssemblyActivation.java | 2 +- .../v3_1_1/TracingAssemblyActivation.java | 2 +- .../jdbc/DataSourcePostProcessor.java | 8 +- ...SpringSchedulingInstrumentationAspect.java | 2 +- .../v3_1/SpringSchedulingSingletons.java | 2 +- .../spymemcached/CompletionListener.java | 2 +- .../twilio/TwilioSingletons.java | 2 +- .../common/XxlJobInstrumenterFactory.java | 2 +- 16 files changed, 131 insertions(+), 18 deletions(-) create mode 100644 MAPPING.md diff --git a/MAPPING.md b/MAPPING.md new file mode 100644 index 000000000000..c8026a30e65f --- /dev/null +++ b/MAPPING.md @@ -0,0 +1,113 @@ +# Declarative Config to System Property Mapping + +This table documents the conversion from system properties (upstream/main) to declarative config paths (HEAD). + +| Declarative Config Path (HEAD) | System Property (upstream/main) | +|-------------------------------|--------------------------------| +| `general`, `db`, `statement_sanitizer`, `enabled` | `otel.instrumentation.common.db-statement-sanitizer.enabled` | +| `general`, `http`, `client`, `emit_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | +| `general`, `http`, `client`, `redact_query_parameters/development` | `otel.instrumentation.http.client.experimental.redact-query-parameters` | +| `general`, `http`, `client`, `request_captured_headers` | `otel.instrumentation.http.client.capture-request-headers` | +| `general`, `http`, `client`, `response_captured_headers` | `otel.instrumentation.http.client.capture-response-headers` | +| `general`, `http`, `known_methods` | `otel.instrumentation.http.known-methods` | +| `general`, `http`, `server`, `emit_telemetry/development` | `otel.instrumentation.http.server.emit-experimental-telemetry` | +| `general`, `http`, `server`, `request_captured_headers` | `otel.instrumentation.http.server.capture-request-headers` | +| `general`, `http`, `server`, `response_captured_headers` | `otel.instrumentation.http.server.capture-response-headers` | +| `general`, `peer`, `service_mapping` | `otel.instrumentation.common.peer-service-mapping` | +| `java`, `agent`, `indy/development` | `otel.javaagent.experimental.indy` | +| `java`, `apache_elasticjob`, `experimental_span_attributes` | `otel.instrumentation.apache-elasticjob.experimental-span-attributes` | +| `java`, `aws_lambda`, `flush_timeout` | `otel.instrumentation.aws-lambda.flush-timeout` | +| `java`, `common`, `controller_telemetry/development`, `enabled` | `otel.instrumentation.common.experimental.controller-telemetry.enabled` | +| `java`, `common`, `db`, `sqlcommenter/development` | `otel.instrumentation.common.experimental.db-sqlcommenter.enabled` | +| `java`, `common`, `db`, `statement_sanitizer`, `enabled` | `otel.instrumentation.common.db-statement-sanitizer.enabled` | +| `java`, `common`, `default_enabled` | `otel.instrumentation.common.default-enabled` | +| `java`, `common`, `enduser`, `id`, `enabled` | `otel.instrumentation.common.enduser.id.enabled` | +| `java`, `common`, `enduser`, `role`, `enabled` | `otel.instrumentation.common.enduser.role.enabled` | +| `java`, `common`, `enduser`, `scope`, `enabled` | `otel.instrumentation.common.enduser.scope.enabled` | +| `java`, `common`, `logging`, `span_id` | `otel.instrumentation.common.logging.span-id` | +| `java`, `common`, `logging`, `trace_flags` | `otel.instrumentation.common.logging.trace-flags` | +| `java`, `common`, `logging`, `trace_id` | `otel.instrumentation.common.logging.trace-id` | +| `java`, `common`, `view_telemetry/development`, `enabled` | `otel.instrumentation.common.experimental.view-telemetry.enabled` | +| `java`, `elasticsearch`, `capture_search_query` | `otel.instrumentation.elasticsearch.capture-search-query` | +| `java`, `executors`, `include` | `otel.instrumentation.executors.include` | +| `java`, `executors`, `include_all` | `otel.instrumentation.executors.include-all` | +| `java`, `external_annotations`, `exclude_methods` | `otel.instrumentation.external-annotations.exclude-methods` | +| `java`, `external_annotations`, `include` | `otel.instrumentation.external-annotations.include` | +| `java`, `genai`, `capture_message_content` | `otel.instrumentation.genai.capture-message-content` | +| `java`, `graphql`, `add_operation_name_to_span_name`, `enabled` | `otel.instrumentation.graphql.add-operation-name-to-span-name.enabled` | +| `java`, `graphql`, `capture_query` | `otel.instrumentation.graphql.capture-query` | +| `java`, `graphql`, `query_sanitizer`, `enabled` | `otel.instrumentation.graphql.query-sanitizer.enabled` | +| `java`, `grpc`, `capture_metadata`, `client`, `request` | `otel.instrumentation.grpc.capture-metadata.client.request` | +| `java`, `grpc`, `capture_metadata`, `server`, `request` | `otel.instrumentation.grpc.capture-metadata.server.request` | +| `java`, `grpc`, `emit_message_events` | `otel.instrumentation.grpc.emit-message-events` | +| `java`, `grpc`, `experimental_span_attributes` | `otel.instrumentation.grpc.experimental-span-attributes` | +| `java`, `guava`, `span_attributes/development` | `otel.instrumentation.guava.experimental-span-attributes` | +| `java`, `hibernate`, `span_attributes/development` | `otel.instrumentation.hibernate.experimental-span-attributes` | +| `java`, `http`, `client`, `emit_experimental_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | +| `java`, `http`, `client`, `emit_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | +| `java`, `http`, `known_methods` | `otel.instrumentation.http.known-methods` | +| `java`, `hystrix`, `span_attributes/development` | `otel.instrumentation.hystrix.experimental-span-attributes` | +| `java`, `jaxrs`, `experimental_span_attributes` | `otel.instrumentation.jaxrs.experimental-span-attributes` | +| `java`, `jdbc`, `datasource`, `enabled` | `otel.instrumentation.jdbc.datasource.enabled` | +| `java`, `jdbc`, `experimental`, `capture_query_parameters` | `otel.instrumentation.jdbc.experimental.capture-query-parameters` | +| `java`, `jdbc`, `experimental`, `sqlcommenter`, `enabled` | `otel.instrumentation.jdbc.experimental.sqlcommenter.enabled` | +| `java`, `jdbc`, `experimental`, `transaction`, `enabled` | `otel.instrumentation.jdbc.experimental.transaction.enabled` | +| `java`, `jdbc`, `sqlcommenter`, `enabled` | `otel.instrumentation.jdbc.experimental.sqlcommenter.enabled` | +| `java`, `jdbc`, `statement_sanitizer`, `enabled` | `otel.instrumentation.jdbc.statement-sanitizer.enabled` | +| `java`, `jdbc`, `transaction`, `enabled` | `otel.instrumentation.jdbc.experimental.transaction.enabled` | +| `java`, `jmx`, `config` | `otel.jmx.config` | +| `java`, `jmx`, `discovery_delay` | `otel.jmx.discovery.delay` | +| `java`, `jmx`, `enabled` | `otel.jmx.enabled` | +| `java`, `jmx`, `target_system` | `otel.jmx.target.system` | +| `java`, `kafka`, `experimental_span_attributes` | `otel.instrumentation.kafka.experimental-span-attributes` | +| `java`, `kafka`, `producer_propagation`, `enabled` | `otel.instrumentation.kafka.producer-propagation.enabled` | +| `java`, `log4j-appender`, `experimental`, `capture_code_attributes` | `otel.instrumentation.log4j-appender.experimental.capture-code-attributes` | +| `java`, `log4j-appender`, `experimental`, `capture_event_name` | `otel.instrumentation.log4j-appender.experimental.capture-event-name` | +| `java`, `log4j-appender`, `experimental`, `capture_map_message_attributes` | `otel.instrumentation.log4j-appender.experimental.capture-map-message-attributes` | +| `java`, `log4j-appender`, `experimental`, `capture_marker_attribute` | `otel.instrumentation.log4j-appender.experimental.capture-marker-attribute` | +| `java`, `log4j-appender`, `experimental`, `capture_mdc_attributes` | `otel.instrumentation.log4j-appender.experimental.capture-mdc-attributes` | +| `java`, `log4j_appender`, `experimental_log_attributes` | `otel.instrumentation.log4j-appender.experimental-log-attributes` | +| `java`, `logback_appender`, `experimental`, `capture_arguments` | `otel.instrumentation.logback-appender.experimental.capture-arguments` | +| `java`, `logback_appender`, `experimental`, `capture_code_attributes` | `otel.instrumentation.logback-appender.experimental.capture-code-attributes` | +| `java`, `logback_appender`, `experimental`, `capture_event_name` | `otel.instrumentation.logback-appender.experimental.capture-event-name` | +| `java`, `logback_appender`, `experimental`, `capture_key_value_pair_attributes` | `otel.instrumentation.logback-appender.experimental.capture-key-value-pair-attributes` | +| `java`, `logback_appender`, `experimental`, `capture_logger_context_attributes` | `otel.instrumentation.logback-appender.experimental.capture-logger-context-attributes` | +| `java`, `logback_appender`, `experimental`, `capture_logstash_marker_attributes` | `otel.instrumentation.logback-appender.experimental.capture-logstash-marker-attributes` | +| `java`, `logback_appender`, `experimental`, `capture_logstash_structured_arguments` | `otel.instrumentation.logback-appender.experimental.capture-logstash-structured-arguments` | +| `java`, `logback_appender`, `experimental`, `capture_marker_attribute` | `otel.instrumentation.logback-appender.experimental.capture-marker-attribute` | +| `java`, `logback_appender`, `experimental`, `capture_mdc_attributes` | `otel.instrumentation.logback-appender.experimental.capture-mdc-attributes` | +| `java`, `logback_appender`, `experimental`, `capture_template` | `otel.instrumentation.logback-appender.experimental.capture-template` | +| `java`, `logback_appender`, `experimental_log_attributes` | `otel.instrumentation.logback-appender.experimental-log-attributes` | +| `java`, `logback_mdc`, `add_baggage` | `otel.instrumentation.logback-mdc.add-baggage` | +| `java`, `messaging`, `capture_headers/development` | `otel.instrumentation.messaging.experimental.capture-headers` | +| `java`, `messaging`, `receive_telemetry/development`, `enabled` | `otel.instrumentation.messaging.experimental.receive-telemetry.enabled` | +| `java`, `methods`, `include` | `otel.instrumentation.methods.include` | +| `java`, `micrometer`, `base_time_unit` | `otel.instrumentation.micrometer.base-time-unit` | +| `java`, `micrometer`, `histogram_gauges`, `enabled` | `otel.instrumentation.micrometer.histogram-gauges.enabled` | +| `java`, `micrometer`, `prometheus_mode`, `enabled` | `otel.instrumentation.micrometer.prometheus-mode.enabled` | +| `java`, `mongo`, `statement_sanitizer`, `enabled` | `otel.instrumentation.mongo.statement-sanitizer.enabled` | +| `java`, `netty`, `connection_telemetry`, `enabled` | `otel.instrumentation.netty.connection-telemetry.enabled` | +| `java`, `netty`, `ssl_telemetry`, `enabled` | `otel.instrumentation.netty.ssl-telemetry.enabled` | +| `java`, `opentelemetry-instrumentation-annotations`, `exclude_methods` | `otel.instrumentation.opentelemetry-instrumentation-annotations.exclude-methods` | +| `java`, `oshi`, `enabled` | `otel.instrumentation.oshi.enabled` | +| `java`, `powerjob`, `span_attributes/development` | `otel.instrumentation.powerjob.experimental-span-attributes` | +| `java`, `pulsar`, `experimental_span_attributes` | `otel.instrumentation.pulsar.experimental-span-attributes` | +| `java`, `quartz`, `span_attributes/development` | `otel.instrumentation.quartz.experimental-span-attributes` | +| `java`, `r2dbc`, `experimental`, `sqlcommenter`, `enabled` | `otel.instrumentation.r2dbc.experimental.sqlcommenter.enabled` | +| `java`, `r2dbc`, `statement_sanitizer`, `enabled` | `otel.instrumentation.r2dbc.statement-sanitizer.enabled` | +| `java`, `rabbitmq`, `experimental_span_attributes` | `otel.instrumentation.rabbitmq.experimental-span-attributes` | +| `java`, `reactor`, `experimental_span_attributes` | `otel.instrumentation.reactor.experimental-span-attributes` | +| `java`, `runtime_telemetry`, `capture_gc_cause` | `otel.instrumentation.runtime-telemetry.capture-gc-cause` | +| `java`, `runtime_telemetry`, `emit_experimental_telemetry` | `otel.instrumentation.runtime-telemetry.emit-experimental-telemetry` | +| `java`, `runtime_telemetry`, `enabled` | `otel.instrumentation.runtime-telemetry.enabled` | +| `java`, `rxjava`, `span_attributes/development` | `otel.instrumentation.rxjava.experimental-span-attributes` | +| `java`, `servlet`, `experimental`, `add_trace_id_request_attribute` | `otel.instrumentation.servlet.experimental.add-trace-id-request-attribute` | +| `java`, `servlet`, `experimental`, `capture_request_parameters` | `otel.instrumentation.servlet.experimental.capture-request-parameters` | +| `java`, `spring_batch`, `chunk/development`, `new_trace` | `otel.instrumentation.spring-batch.experimental.chunk.new-trace` | +| `java`, `spring_batch`, `item`, `enabled` | `otel.instrumentation.spring-batch.item.enabled` | +| `java`, `spring_scheduling`, `span_attributes/development` | `otel.instrumentation.spring-scheduling.experimental-span-attributes` | +| `java`, `spring_security`, `enduser`, `role`, `granted_authority_prefix` | `otel.instrumentation.spring-security.enduser.role.granted-authority-prefix` | +| `java`, `spring_security`, `enduser`, `scope`, `granted_authority_prefix` | `otel.instrumentation.spring-security.enduser.scope.granted-authority-prefix` | +| `java`, `spymemcached`, `span_attributes/development` | `otel.instrumentation.spymemcached.experimental-span-attributes` | +| `java`, `twilio`, `span_attributes/development` | `otel.instrumentation.twilio.experimental-span-attributes` | +| `java`, `xxl_job`, `span_attributes/development` | `otel.instrumentation.xxl-job.experimental-span-attributes` | diff --git a/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java b/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java index 2d95a0e8d118..6f227814696d 100644 --- a/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java +++ b/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java @@ -16,7 +16,7 @@ public final class InstrumentationHelper { GuavaAsyncOperationEndStrategy.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "guava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "guava", "span_attributes/development") .orElse(false)) .build(); diff --git a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java index acc9fd976b75..2ff5a0a20bda 100644 --- a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java +++ b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java @@ -13,7 +13,7 @@ public final class HibernateInstrumenterFactory { static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "hibernate", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "hibernate", "span_attributes/development") .orElse(false); public static Instrumenter createInstrumenter( diff --git a/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java b/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java index 51aaa2271c72..ab2f92d2c759 100644 --- a/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java +++ b/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java @@ -22,7 +22,7 @@ public final class HystrixSingletons { GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, HystrixRequest::spanName); if (DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "hystrix", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "hystrix", "span_attributes/development") .orElse(false)) { builder.addAttributesExtractor(new ExperimentalAttributesExtractor()); } diff --git a/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java b/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java index 2fe35cb06325..70415b228a17 100644 --- a/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java +++ b/instrumentation/openai/openai-java-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/OpenAiSingletons.java @@ -14,7 +14,7 @@ public final class OpenAiSingletons { OpenAITelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureMessageContent( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "genai", "capture_message_content") + GlobalOpenTelemetry.get(), "java", "genai", "capture_message_content") .orElse(false)) .build(); diff --git a/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java b/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java index f1b6a33f06b4..67c277b122c9 100644 --- a/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java +++ b/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java @@ -23,7 +23,7 @@ public final class PowerJobSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "powerjob", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "powerjob", "span_attributes/development") .orElse(false); private static final Instrumenter INSTRUMENTER = create(); diff --git a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java index 22e2bf87a37d..71a748adc269 100644 --- a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java +++ b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java @@ -15,7 +15,7 @@ public final class QuartzSingletons { QuartzTelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "quartz", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "quartz", "span_attributes/development") .orElse(false)) .build(); diff --git a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java index 8edf3f9ddf02..2b8da87807bf 100644 --- a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java @@ -25,7 +25,7 @@ public static void activate(Class clz) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "rxjava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "rxjava", "span_attributes/development") .orElse(false)) .build() .enable(); diff --git a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java index 8bd5bbd5ce9f..e2c64c947492 100644 --- a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java @@ -25,7 +25,7 @@ public static void activate(Class clz) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "rxjava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "rxjava", "span_attributes/development") .orElse(false)) .build() .enable(); diff --git a/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java index bee89af81fc5..56852c440d69 100644 --- a/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java @@ -25,7 +25,7 @@ public static void activate(Class clz) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "rxjava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "rxjava", "span_attributes/development") .orElse(false)) .build() .enable(); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java index 8ea3c0adb0bc..2955975c5f28 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java @@ -72,17 +72,17 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { .orElse(true))) .setCaptureQueryParameters( DeclarativeConfigUtil.getBoolean( - openTelemetry, "jdbc", "capture_query_parameters") + openTelemetry, "java", "jdbc", "capture_query_parameters") .orElse(false)) .setTransactionInstrumenterEnabled( - DeclarativeConfigUtil.getBoolean(openTelemetry, "jdbc", "transaction", "enabled") + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "jdbc", "transaction", "enabled") .orElse(false)) .setDataSourceInstrumenterEnabled( - DeclarativeConfigUtil.getBoolean(openTelemetry, "jdbc", "datasource", "enabled") + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "jdbc", "datasource", "enabled") .orElse(false)); Experimental.setEnableSqlCommenter( builder, - DeclarativeConfigUtil.getBoolean(openTelemetry, "jdbc", "sqlcommenter", "enabled") + DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "jdbc", "sqlcommenter", "enabled") .orElse(false)); DataSource otelDataSource = builder.build().wrap(dataSource); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java index 3599bd6bddb2..28e4654af586 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/scheduling/SpringSchedulingInstrumentationAspect.java @@ -52,7 +52,7 @@ public SpringSchedulingInstrumentationAspect(OpenTelemetry openTelemetry) { CodeSpanNameExtractor.create(codedAttributesGetter)) .addAttributesExtractor(CodeAttributesExtractor.create(codedAttributesGetter)); if (DeclarativeConfigUtil.getBoolean( - openTelemetry, "spring_scheduling", "experimental_span_attributes") + openTelemetry, "java", "spring_scheduling", "experimental_span_attributes") .orElse(false)) { builder.addAttributesExtractor( AttributesExtractor.constant(AttributeKey.stringKey("job.system"), "spring_scheduling")); diff --git a/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java index 64b8932df84d..26d4d628cfc6 100644 --- a/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java +++ b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java @@ -18,7 +18,7 @@ public final class SpringSchedulingSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "spring_scheduling", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "spring_scheduling", "span_attributes/development") .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java b/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java index 3d1ec308a113..3eb5b70d15cb 100644 --- a/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java +++ b/instrumentation/spymemcached-2.12/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spymemcached/CompletionListener.java @@ -18,7 +18,7 @@ public abstract class CompletionListener { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "spymemcached", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "spymemcached", "span_attributes/development") .orElse(false); private static final String DB_COMMAND_CANCELLED = "spymemcached.command.cancelled"; diff --git a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java index f5368de8464c..d88440aed849 100644 --- a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java +++ b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java @@ -17,7 +17,7 @@ public final class TwilioSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "twilio", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "twilio", "span_attributes/development") .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java b/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java index 385569da97f4..c029a2020bb8 100644 --- a/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java +++ b/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java @@ -18,7 +18,7 @@ public final class XxlJobInstrumenterFactory { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "xxl_job", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "xxl_job", "span_attributes/development") .orElse(false); public static Instrumenter create(String instrumentationName) { From 35f9cdf5e6df6d799dd4054567b5f44f7f6a353d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 09:16:14 -0800 Subject: [PATCH 45/73] fix --- MAPPING.md | 20 +++++++------- .../guava/v10_0/InstrumentationHelper.java | 2 +- .../HibernateInstrumenterFactory.java | 2 +- .../hystrix/HystrixSingletons.java | 2 +- .../powerjob/v4_0/PowerJobSingletons.java | 2 +- .../quartz/v2_0/QuartzSingletons.java | 2 +- .../v2_0/TracingAssemblyActivation.java | 2 +- .../v3_0/TracingAssemblyActivation.java | 2 +- .../v3_1_1/TracingAssemblyActivation.java | 2 +- .../OpenTelemetryAutoConfiguration.java | 27 ++++++++++++++----- .../gateway/common/GatewayRouteHelper.java | 2 +- .../v3_1/SpringSchedulingSingletons.java | 2 +- .../ModelAndViewAttributesExtractor.java | 2 +- .../spymemcached/CompletionListener.java | 2 +- .../twilio/TwilioSingletons.java | 2 +- .../common/XxlJobInstrumenterFactory.java | 2 +- 16 files changed, 45 insertions(+), 30 deletions(-) diff --git a/MAPPING.md b/MAPPING.md index c8026a30e65f..1e89c7fb6877 100644 --- a/MAPPING.md +++ b/MAPPING.md @@ -41,12 +41,12 @@ This table documents the conversion from system properties (upstream/main) to de | `java`, `grpc`, `capture_metadata`, `server`, `request` | `otel.instrumentation.grpc.capture-metadata.server.request` | | `java`, `grpc`, `emit_message_events` | `otel.instrumentation.grpc.emit-message-events` | | `java`, `grpc`, `experimental_span_attributes` | `otel.instrumentation.grpc.experimental-span-attributes` | -| `java`, `guava`, `span_attributes/development` | `otel.instrumentation.guava.experimental-span-attributes` | -| `java`, `hibernate`, `span_attributes/development` | `otel.instrumentation.hibernate.experimental-span-attributes` | +| `java`, `guava`, `experimental_span_attributes` | `otel.instrumentation.guava.experimental-span-attributes` | +| `java`, `hibernate`, `experimental_span_attributes` | `otel.instrumentation.hibernate.experimental-span-attributes` | | `java`, `http`, `client`, `emit_experimental_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | | `java`, `http`, `client`, `emit_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | | `java`, `http`, `known_methods` | `otel.instrumentation.http.known-methods` | -| `java`, `hystrix`, `span_attributes/development` | `otel.instrumentation.hystrix.experimental-span-attributes` | +| `java`, `hystrix`, `experimental_span_attributes` | `otel.instrumentation.hystrix.experimental-span-attributes` | | `java`, `jaxrs`, `experimental_span_attributes` | `otel.instrumentation.jaxrs.experimental-span-attributes` | | `java`, `jdbc`, `datasource`, `enabled` | `otel.instrumentation.jdbc.datasource.enabled` | | `java`, `jdbc`, `experimental`, `capture_query_parameters` | `otel.instrumentation.jdbc.experimental.capture-query-parameters` | @@ -90,9 +90,9 @@ This table documents the conversion from system properties (upstream/main) to de | `java`, `netty`, `ssl_telemetry`, `enabled` | `otel.instrumentation.netty.ssl-telemetry.enabled` | | `java`, `opentelemetry-instrumentation-annotations`, `exclude_methods` | `otel.instrumentation.opentelemetry-instrumentation-annotations.exclude-methods` | | `java`, `oshi`, `enabled` | `otel.instrumentation.oshi.enabled` | -| `java`, `powerjob`, `span_attributes/development` | `otel.instrumentation.powerjob.experimental-span-attributes` | +| `java`, `powerjob`, `experimental_span_attributes` | `otel.instrumentation.powerjob.experimental-span-attributes` | | `java`, `pulsar`, `experimental_span_attributes` | `otel.instrumentation.pulsar.experimental-span-attributes` | -| `java`, `quartz`, `span_attributes/development` | `otel.instrumentation.quartz.experimental-span-attributes` | +| `java`, `quartz`, `experimental_span_attributes` | `otel.instrumentation.quartz.experimental-span-attributes` | | `java`, `r2dbc`, `experimental`, `sqlcommenter`, `enabled` | `otel.instrumentation.r2dbc.experimental.sqlcommenter.enabled` | | `java`, `r2dbc`, `statement_sanitizer`, `enabled` | `otel.instrumentation.r2dbc.statement-sanitizer.enabled` | | `java`, `rabbitmq`, `experimental_span_attributes` | `otel.instrumentation.rabbitmq.experimental-span-attributes` | @@ -100,14 +100,14 @@ This table documents the conversion from system properties (upstream/main) to de | `java`, `runtime_telemetry`, `capture_gc_cause` | `otel.instrumentation.runtime-telemetry.capture-gc-cause` | | `java`, `runtime_telemetry`, `emit_experimental_telemetry` | `otel.instrumentation.runtime-telemetry.emit-experimental-telemetry` | | `java`, `runtime_telemetry`, `enabled` | `otel.instrumentation.runtime-telemetry.enabled` | -| `java`, `rxjava`, `span_attributes/development` | `otel.instrumentation.rxjava.experimental-span-attributes` | +| `java`, `rxjava`, `experimental_span_attributes` | `otel.instrumentation.rxjava.experimental-span-attributes` | | `java`, `servlet`, `experimental`, `add_trace_id_request_attribute` | `otel.instrumentation.servlet.experimental.add-trace-id-request-attribute` | | `java`, `servlet`, `experimental`, `capture_request_parameters` | `otel.instrumentation.servlet.experimental.capture-request-parameters` | | `java`, `spring_batch`, `chunk/development`, `new_trace` | `otel.instrumentation.spring-batch.experimental.chunk.new-trace` | | `java`, `spring_batch`, `item`, `enabled` | `otel.instrumentation.spring-batch.item.enabled` | -| `java`, `spring_scheduling`, `span_attributes/development` | `otel.instrumentation.spring-scheduling.experimental-span-attributes` | +| `java`, `spring_scheduling`, `experimental_span_attributes` | `otel.instrumentation.spring-scheduling.experimental-span-attributes` | | `java`, `spring_security`, `enduser`, `role`, `granted_authority_prefix` | `otel.instrumentation.spring-security.enduser.role.granted-authority-prefix` | | `java`, `spring_security`, `enduser`, `scope`, `granted_authority_prefix` | `otel.instrumentation.spring-security.enduser.scope.granted-authority-prefix` | -| `java`, `spymemcached`, `span_attributes/development` | `otel.instrumentation.spymemcached.experimental-span-attributes` | -| `java`, `twilio`, `span_attributes/development` | `otel.instrumentation.twilio.experimental-span-attributes` | -| `java`, `xxl_job`, `span_attributes/development` | `otel.instrumentation.xxl-job.experimental-span-attributes` | +| `java`, `spymemcached`, `experimental_span_attributes` | `otel.instrumentation.spymemcached.experimental-span-attributes` | +| `java`, `twilio`, `experimental_span_attributes` | `otel.instrumentation.twilio.experimental-span-attributes` | +| `java`, `xxl_job`, `experimental_span_attributes` | `otel.instrumentation.xxl-job.experimental-span-attributes` | diff --git a/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java b/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java index 6f227814696d..871468fed716 100644 --- a/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java +++ b/instrumentation/guava-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/guava/v10_0/InstrumentationHelper.java @@ -16,7 +16,7 @@ public final class InstrumentationHelper { GuavaAsyncOperationEndStrategy.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "guava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "guava", "experimental_span_attributes") .orElse(false)) .build(); diff --git a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java index 2ff5a0a20bda..e68b346ee288 100644 --- a/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java +++ b/instrumentation/hibernate/hibernate-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/HibernateInstrumenterFactory.java @@ -13,7 +13,7 @@ public final class HibernateInstrumenterFactory { static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "hibernate", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "hibernate", "experimental_span_attributes") .orElse(false); public static Instrumenter createInstrumenter( diff --git a/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java b/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java index ab2f92d2c759..db8fa2615417 100644 --- a/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java +++ b/instrumentation/hystrix-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/hystrix/HystrixSingletons.java @@ -22,7 +22,7 @@ public final class HystrixSingletons { GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, HystrixRequest::spanName); if (DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "hystrix", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "hystrix", "experimental_span_attributes") .orElse(false)) { builder.addAttributesExtractor(new ExperimentalAttributesExtractor()); } diff --git a/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java b/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java index 67c277b122c9..fee98ba19126 100644 --- a/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java +++ b/instrumentation/powerjob-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/powerjob/v4_0/PowerJobSingletons.java @@ -23,7 +23,7 @@ public final class PowerJobSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "powerjob", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "powerjob", "experimental_span_attributes") .orElse(false); private static final Instrumenter INSTRUMENTER = create(); diff --git a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java index 71a748adc269..a787a1346488 100644 --- a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java +++ b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzSingletons.java @@ -15,7 +15,7 @@ public final class QuartzSingletons { QuartzTelemetry.builder(GlobalOpenTelemetry.get()) .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "quartz", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "quartz", "experimental_span_attributes") .orElse(false)) .build(); diff --git a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java index 2b8da87807bf..43e178c862fc 100644 --- a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/TracingAssemblyActivation.java @@ -25,7 +25,7 @@ public static void activate(Class clz) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "rxjava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "rxjava", "experimental_span_attributes") .orElse(false)) .build() .enable(); diff --git a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java index e2c64c947492..6d9d66d4ba9c 100644 --- a/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_0/TracingAssemblyActivation.java @@ -25,7 +25,7 @@ public static void activate(Class clz) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "rxjava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "rxjava", "experimental_span_attributes") .orElse(false)) .build() .enable(); diff --git a/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java b/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java index 56852c440d69..830b882c3fc6 100644 --- a/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java +++ b/instrumentation/rxjava/rxjava-3.1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v3_1_1/TracingAssemblyActivation.java @@ -25,7 +25,7 @@ public static void activate(Class clz) { TracingAssembly.builder() .setCaptureExperimentalSpanAttributes( DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "rxjava", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "rxjava", "experimental_span_attributes") .orElse(false)) .build() .enable(); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index af15d67d71c2..c47984a8d84f 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -118,21 +118,36 @@ public AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk( .build(); } + // TODO why is exposing this needed? + @Bean + public ConfigProperties otelProperties( + AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { + ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); + if (configProperties == null) { + throw new IllegalStateException( + "Expected configProperties to be non-null for properties-based configuration"); + } + return configProperties; + } + @Bean public OpenTelemetrySdk openTelemetry( AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk, - ConfigProvider configProvider) { + ConfigProperties otelProperties) { logStart(); OpenTelemetrySdk sdk = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); + // Extract ConfigProvider from the AutoConfiguredOpenTelemetrySdk + ConfigProvider configProvider = AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk); + + if (configProvider == null) { + // Create ConfigProvider from ConfigProperties if not already present + configProvider = ConfigPropertiesBackedConfigProvider.create(otelProperties); + } + // Wrap the SDK to provide ConfigProvider for DeclarativeConfigUtil // SpringOpenTelemetrySdk extends OpenTelemetrySdk and implements ExtendedOpenTelemetry return SpringOpenTelemetrySdk.create(sdk, configProvider); } - - @Bean - public ConfigProvider configProvider(ConfigProperties properties) { - return ConfigPropertiesBackedConfigProvider.create(properties); - } } @Configuration diff --git a/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java b/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java index 84ac094d68d7..a66b1abca882 100644 --- a/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java +++ b/instrumentation/spring/spring-cloud-gateway/spring-cloud-gateway-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/gateway/common/GatewayRouteHelper.java @@ -38,7 +38,7 @@ public final class GatewayRouteHelper { static { CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "spring_cloud_gateway", "span_attributes/development") + GlobalOpenTelemetry.get(), "spring_cloud_gateway", "experimental_span_attributes") .orElse(false); } diff --git a/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java index 26d4d628cfc6..4e3dd03ca0fa 100644 --- a/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java +++ b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java @@ -18,7 +18,7 @@ public final class SpringSchedulingSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "spring_scheduling", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "spring_scheduling", "experimental_span_attributes") .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java b/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java index 7a1c078ebe54..aab6ed9ea7e4 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webmvc/ModelAndViewAttributesExtractor.java @@ -18,7 +18,7 @@ public class ModelAndViewAttributesExtractor implements AttributesExtractor { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "spymemcached", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "spymemcached", "experimental_span_attributes") .orElse(false); private static final String DB_COMMAND_CANCELLED = "spymemcached.command.cancelled"; diff --git a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java index d88440aed849..57d807d46c1b 100644 --- a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java +++ b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioSingletons.java @@ -17,7 +17,7 @@ public final class TwilioSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "twilio", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "twilio", "experimental_span_attributes") .orElse(false); private static final Instrumenter INSTRUMENTER; diff --git a/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java b/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java index c029a2020bb8..202c2eae2172 100644 --- a/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java +++ b/instrumentation/xxl-job/xxl-job-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/xxljob/common/XxlJobInstrumenterFactory.java @@ -18,7 +18,7 @@ public final class XxlJobInstrumenterFactory { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "xxl_job", "span_attributes/development") + GlobalOpenTelemetry.get(), "java", "xxl_job", "experimental_span_attributes") .orElse(false); public static Instrumenter create(String instrumentationName) { From d64f9c7d91d1f98e7dc0c3e512c0ad78abd31a93 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 09:18:23 -0800 Subject: [PATCH 46/73] fix --- MAPPING.md | 8 ++++---- .../internal/DefaultHttpClientInstrumenterBuilder.java | 2 +- .../internal/DefaultHttpServerInstrumenterBuilder.java | 2 +- .../httpurlconnection/HttpMethodAttributeExtractor.java | 2 +- .../instrumentation/netty/v4_1/NettyClientSingletons.java | 2 +- .../instrumentation/netty/v4_1/NettyServerSingletons.java | 2 +- .../http/RegexUrlTemplateCustomizerInitializer.java | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MAPPING.md b/MAPPING.md index 1e89c7fb6877..29627c796117 100644 --- a/MAPPING.md +++ b/MAPPING.md @@ -5,12 +5,12 @@ This table documents the conversion from system properties (upstream/main) to de | Declarative Config Path (HEAD) | System Property (upstream/main) | |-------------------------------|--------------------------------| | `general`, `db`, `statement_sanitizer`, `enabled` | `otel.instrumentation.common.db-statement-sanitizer.enabled` | -| `general`, `http`, `client`, `emit_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | +| `general`, `http`, `client`, `emit_experimental_telemetry` | `otel.instrumentation.http.client.emit-experimental-telemetry` | | `general`, `http`, `client`, `redact_query_parameters/development` | `otel.instrumentation.http.client.experimental.redact-query-parameters` | | `general`, `http`, `client`, `request_captured_headers` | `otel.instrumentation.http.client.capture-request-headers` | | `general`, `http`, `client`, `response_captured_headers` | `otel.instrumentation.http.client.capture-response-headers` | | `general`, `http`, `known_methods` | `otel.instrumentation.http.known-methods` | -| `general`, `http`, `server`, `emit_telemetry/development` | `otel.instrumentation.http.server.emit-experimental-telemetry` | +| `general`, `http`, `server`, `emit_experimental_telemetry` | `otel.instrumentation.http.server.emit-experimental-telemetry` | | `general`, `http`, `server`, `request_captured_headers` | `otel.instrumentation.http.server.capture-request-headers` | | `general`, `http`, `server`, `response_captured_headers` | `otel.instrumentation.http.server.capture-response-headers` | | `general`, `peer`, `service_mapping` | `otel.instrumentation.common.peer-service-mapping` | @@ -43,8 +43,8 @@ This table documents the conversion from system properties (upstream/main) to de | `java`, `grpc`, `experimental_span_attributes` | `otel.instrumentation.grpc.experimental-span-attributes` | | `java`, `guava`, `experimental_span_attributes` | `otel.instrumentation.guava.experimental-span-attributes` | | `java`, `hibernate`, `experimental_span_attributes` | `otel.instrumentation.hibernate.experimental-span-attributes` | -| `java`, `http`, `client`, `emit_experimental_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | -| `java`, `http`, `client`, `emit_telemetry/development` | `otel.instrumentation.http.client.emit-experimental-telemetry` | +| `java`, `http`, `client`, `emit_experimental_telemetry` | `otel.instrumentation.http.client.emit-experimental-telemetry` | +| `java`, `http`, `client`, `emit_experimental_telemetry` | `otel.instrumentation.http.client.emit-experimental-telemetry` | | `java`, `http`, `known_methods` | `otel.instrumentation.http.known-methods` | | `java`, `hystrix`, `experimental_span_attributes` | `otel.instrumentation.hystrix.experimental-span-attributes` | | `java`, `jaxrs`, `experimental_span_attributes` | `otel.instrumentation.jaxrs.experimental-span-attributes` | diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java index 23ac0f34ffab..efddc62ce0fa 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java @@ -277,7 +277,7 @@ public DefaultHttpClientInstrumenterBuilder configure( setPeerServiceResolver(PeerServiceResolver.create(openTelemetry)); setEmitExperimentalHttpClientTelemetry( DeclarativeConfigUtil.getBoolean( - openTelemetry, "general", "http", "client", "emit_telemetry/development") + openTelemetry, "general", "http", "client", "emit_experimental_telemetry") .orElse(false)); setRedactQueryParameters( DeclarativeConfigUtil.getBoolean( diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java index 7c0a1f06793d..c8edfd848191 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java @@ -235,7 +235,7 @@ public DefaultHttpServerInstrumenterBuilder configure( .ifPresent(this::setCapturedResponseHeaders); setEmitExperimentalHttpServerTelemetry( DeclarativeConfigUtil.getBoolean( - openTelemetry, "general", "http", "server", "emit_telemetry/development") + openTelemetry, "general", "http", "server", "emit_experimental_telemetry") .orElse(false)); return this; } diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java index dd76dedf98ef..7bb5ecedfe01 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java @@ -34,7 +34,7 @@ private HttpMethodAttributeExtractor(Set knownMethods) { "general", "http", "client", - "emit_telemetry/development") + "emit_experimental_telemetry") .orElse(false); } diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index a91ffebf8dd6..b236b77ff203 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -58,7 +58,7 @@ public final class NettyClientSingletons { "java", "http", "client", - "emit_telemetry/development") + "emit_experimental_telemetry") .orElse(false)); } diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java index d7a6b7924571..3bfb4432fa4c 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java @@ -19,7 +19,7 @@ public final class NettyServerSingletons { .apply(builder) .configure(GlobalOpenTelemetry.get()); if (DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "http", "server", "emit_telemetry/development") + GlobalOpenTelemetry.get(), "general", "http", "server", "emit_experimental_telemetry") .orElse(false)) { // this logic is only used in agent builder.setEmitExperimentalHttpServerEvents(true); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java index ea287cee1a02..ac38748b62eb 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java @@ -32,7 +32,7 @@ public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemet "java", "http", "client", - "emit_experimental_telemetry/development") + "emit_experimental_telemetry") .orElse(false); if (!urlTemplateEnabled) { return; From 9a7e390eaad4980432314b2249b4f856599abe1c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 10:12:35 -0800 Subject: [PATCH 47/73] Fix spotless formatting in RegexUrlTemplateCustomizerInitializer --- .../http/RegexUrlTemplateCustomizerInitializer.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java index ac38748b62eb..4bd1f5208e9a 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/http/RegexUrlTemplateCustomizerInitializer.java @@ -28,11 +28,7 @@ public void beforeAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemet // url template is emitted only when http client experimental telemetry is enabled boolean urlTemplateEnabled = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), - "java", - "http", - "client", - "emit_experimental_telemetry") + GlobalOpenTelemetry.get(), "java", "http", "client", "emit_experimental_telemetry") .orElse(false); if (!urlTemplateEnabled) { return; From a246de8b41d6650628bf8b41251939af0e547eca Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 10:13:50 -0800 Subject: [PATCH 48/73] Fix markdown lint errors in README and MAPPING --- MAPPING.md | 2 +- declarative-config-bridge/README.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/MAPPING.md b/MAPPING.md index 29627c796117..735ef6cb8730 100644 --- a/MAPPING.md +++ b/MAPPING.md @@ -3,7 +3,7 @@ This table documents the conversion from system properties (upstream/main) to declarative config paths (HEAD). | Declarative Config Path (HEAD) | System Property (upstream/main) | -|-------------------------------|--------------------------------| +| ------------------------------- | -------------------------------- | | `general`, `db`, `statement_sanitizer`, `enabled` | `otel.instrumentation.common.db-statement-sanitizer.enabled` | | `general`, `http`, `client`, `emit_experimental_telemetry` | `otel.instrumentation.http.client.emit-experimental-telemetry` | | `general`, `http`, `client`, `redact_query_parameters/development` | `otel.instrumentation.http.client.experimental.redact-query-parameters` | diff --git a/declarative-config-bridge/README.md b/declarative-config-bridge/README.md index 2d78ba324dd5..a4b40bc30242 100644 --- a/declarative-config-bridge/README.md +++ b/declarative-config-bridge/README.md @@ -4,5 +4,6 @@ This module provides utilities for bridging between declarative configuration (Y the traditional `ConfigProperties` interface. The main classes are: + - `ConfigPropertiesBackedConfigProvider`: Creates a `ConfigProvider` backed by `ConfigProperties` - `ConfigPropertiesBackedDeclarativeConfigProperties`: Adapts `ConfigProperties` to `DeclarativeConfigProperties` From 504446fb350e56d91675dfc54c4a1619e37a14d4 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 10:22:05 -0800 Subject: [PATCH 49/73] Fix Netty server experimental telemetry configuration path Use 'java' path instead of 'general' path for emit_experimental_telemetry configuration in NettyServerSingletons to match the client configuration and properly enable HTTP/2 protocol upgrade events on server spans. --- .../instrumentation/netty/v4_1/NettyServerSingletons.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java index 3bfb4432fa4c..7c53f38c7ed5 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java @@ -19,7 +19,7 @@ public final class NettyServerSingletons { .apply(builder) .configure(GlobalOpenTelemetry.get()); if (DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "general", "http", "server", "emit_experimental_telemetry") + GlobalOpenTelemetry.get(), "java", "http", "server", "emit_experimental_telemetry") .orElse(false)) { // this logic is only used in agent builder.setEmitExperimentalHttpServerEvents(true); From 3386d5785e865caf575a2dc40db2e782a6838221 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 11:06:36 -0800 Subject: [PATCH 50/73] Fix spotless formatting in spring-boot-autoconfigure --- CI-PLAN.md | 54 +++++++++++++++++++ .../OpenTelemetryAutoConfiguration.java | 10 ++-- .../jdbc/DataSourcePostProcessor.java | 23 ++++---- ...KafkaInstrumentationAutoConfiguration.java | 6 +-- ...lientInstrumentationAutoConfiguration.java | 20 +++---- .../R2dbcInstrumentingPostProcessor.java | 22 ++++---- 6 files changed, 93 insertions(+), 42 deletions(-) create mode 100644 CI-PLAN.md diff --git a/CI-PLAN.md b/CI-PLAN.md new file mode 100644 index 000000000000..2cb5361fa8b9 --- /dev/null +++ b/CI-PLAN.md @@ -0,0 +1,54 @@ +# CI Failure Analysis Plan + +## Failed Jobs Summary +- Job 1: common / spotless (job ID: 57978980443) +- Job 2: common / test1 (8, hotspot, indy false) (job ID: 57978980582) +- Job 3: common / test1 (8, hotspot, indy true) (job ID: 57978980597) +- Job 4: common / test1 (11, hotspot, indy false) (job ID: 57978980589) +- Job 5: common / test1 (11, hotspot, indy true) (job ID: 57978980604) +- Job 6: common / test2 (11, hotspot, indy true) (job ID: 57978980611) +- Job 7: common / test1 (17, hotspot, indy false) (job ID: 57978980605) +- Job 8: common / test1 (17, hotspot, indy true) (job ID: 57978980602) +- Job 9: common / test3 (17, hotspot, indy false) (job ID: 57978980612) +- Job 10: common / test3 (17, hotspot, indy true) (job ID: 57978980619) +- Job 11: common / test1 (21, hotspot, indy true) (job ID: 57978980621) +- Job 12: common / test3 (21, hotspot, indy false) (job ID: 57978980628) +- Job 13: common / test3 (21, hotspot, indy true) (job ID: 57978980652) +- Job 14: common / test1 (25, hotspot, indy false) (job ID: 57978980637) +- Job 15: common / test3 (25, hotspot, indy false) (job ID: 57978980620) +- Job 16: common / test3 (25, hotspot, indy true) (job ID: 57978980635) +- Job 17: common / test1 (25-deny-unsafe, hotspot, indy false) (job ID: 57978980648) +- Job 18: common / test3 (25-deny-unsafe, hotspot, indy false) (job ID: 57978980639) +- Job 19: common / test3 (25-deny-unsafe, hotspot, indy true) (job ID: 57978980651) +- Job 20: test-latest-deps / testLatestDeps1 (job ID: 57978980450) +- Job 21: test-latest-deps / testLatestDeps3 (job ID: 57978980447) +- Job 22: markdown-lint-check / markdown-lint-check (job ID: 57978980442) + +## Unique Failed Gradle Tasks + +- [ ] Task: :javaagent-tooling:spotlessJavaCheck + - Seen in: spotless + - Log files: /tmp/spotless.log + - Issue: Formatting violation in RegexUrlTemplateCustomizerInitializer.java - multi-line method call should be on one line + +- [ ] Task: :instrumentation:finagle-http-23.11:javaagent:test + - Seen in: test1 (Java 8), testLatestDeps1 + - Log files: /tmp/test1-java8.log, /tmp/testLatestDeps1.log + - Issue: Test failures - 6 tests failed in ServerH2Test.h2ProtocolUpgrade + +- [ ] Task: :instrumentation:spring:spring-web:spring-web-6.0:javaagent:test + - Seen in: testLatestDeps1 + - Log files: /tmp/testLatestDeps1.log + - Issue: Test failure (needs analysis) + +- [ ] Markdown lint errors + - Seen in: markdown-lint-check + - Log files: /tmp/markdown-lint.log + - Issues: + - declarative-config-bridge/README.md:7 - MD032/blanks-around-lists + - MAPPING.md:6 - MD060/table-column-style (multiple pipe spacing issues) + +## Notes +- Spotless failure is a simple formatting issue - need to consolidate multi-line method call +- Test failures in finagle-http-23.11 appear across multiple Java versions - likely real test failures +- Markdown lint failures are formatting issues in two files diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index c47984a8d84f..34be4cc215f6 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -122,7 +122,8 @@ public AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk( @Bean public ConfigProperties otelProperties( AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk) { - ConfigProperties configProperties = AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); + ConfigProperties configProperties = + AutoConfigureUtil.getConfig(autoConfiguredOpenTelemetrySdk); if (configProperties == null) { throw new IllegalStateException( "Expected configProperties to be non-null for properties-based configuration"); @@ -137,13 +138,14 @@ public OpenTelemetrySdk openTelemetry( logStart(); OpenTelemetrySdk sdk = autoConfiguredOpenTelemetrySdk.getOpenTelemetrySdk(); // Extract ConfigProvider from the AutoConfiguredOpenTelemetrySdk - ConfigProvider configProvider = AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk); - + ConfigProvider configProvider = + AutoConfigureUtil.getConfigProvider(autoConfiguredOpenTelemetrySdk); + if (configProvider == null) { // Create ConfigProvider from ConfigProperties if not already present configProvider = ConfigPropertiesBackedConfigProvider.create(otelProperties); } - + // Wrap the SDK to provide ConfigProvider for DeclarativeConfigUtil // SpringOpenTelemetrySdk extends OpenTelemetrySdk and implements ExtendedOpenTelemetry return SpringOpenTelemetrySdk.create(sdk, configProvider); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java index 2955975c5f28..10dbe59c1567 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/jdbc/DataSourcePostProcessor.java @@ -60,25 +60,24 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { JdbcTelemetryBuilder builder = JdbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - DeclarativeConfigUtil.getBoolean( - openTelemetry, "java", "jdbc", "statement_sanitizer", "enabled") - .orElseGet( - () -> - DeclarativeConfigUtil.getBoolean( - openTelemetry, - "common", - "db_statement_sanitizer", - "enabled") - .orElse(true))) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "jdbc", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, "common", "db_statement_sanitizer", "enabled") + .orElse(true))) .setCaptureQueryParameters( DeclarativeConfigUtil.getBoolean( openTelemetry, "java", "jdbc", "capture_query_parameters") .orElse(false)) .setTransactionInstrumenterEnabled( - DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "jdbc", "transaction", "enabled") + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "jdbc", "transaction", "enabled") .orElse(false)) .setDataSourceInstrumenterEnabled( - DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "jdbc", "datasource", "enabled") + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "jdbc", "datasource", "enabled") .orElse(false)); Experimental.setEnableSqlCommenter( builder, diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java index 922e40ac751c..abaa2b119786 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/kafka/KafkaInstrumentationAutoConfiguration.java @@ -43,11 +43,7 @@ static SpringKafkaTelemetry getTelemetry(ObjectProvider openTelem .orElse(false)) .setMessagingReceiveInstrumentationEnabled( DeclarativeConfigUtil.getBoolean( - openTelemetry, - "java", - "messaging", - "receive_telemetry/development", - "enabled") + openTelemetry, "java", "messaging", "receive_telemetry/development", "enabled") .orElse(false)) .setCapturedHeaders( DeclarativeConfigUtil.getList( diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java index 0db4efb979eb..6ef0c7224543 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/mongo/MongoClientInstrumentationAutoConfiguration.java @@ -33,16 +33,16 @@ MongoClientSettingsBuilderCustomizer customizer(OpenTelemetry openTelemetry) { builder.addCommandListener( MongoTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - DeclarativeConfigUtil.getBoolean( - openTelemetry, "java", "mongo", "statement_sanitizer", "enabled") - .orElseGet( - () -> - DeclarativeConfigUtil.getBoolean( - openTelemetry, - "common", - "db_statement_sanitizer", - "enabled") - .orElse(true))) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "mongo", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, + "common", + "db_statement_sanitizer", + "enabled") + .orElse(true))) .build() .newCommandListener()); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java index 7f653ccd7b3f..ee9266662632 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2dbcInstrumentingPostProcessor.java @@ -30,17 +30,17 @@ public Object postProcessAfterInitialization(Object bean, String beanName) { OpenTelemetry openTelemetry = openTelemetryProvider.getObject(); return R2dbcTelemetry.builder(openTelemetry) .setStatementSanitizationEnabled( - DeclarativeConfigUtil.getBoolean( - openTelemetry, "java", "r2dbc", "statement_sanitizer", "enabled") - .orElseGet( - () -> - DeclarativeConfigUtil.getBoolean( - openTelemetry, - "java", - "common", - "db_statement_sanitizer", - "enabled") - .orElse(true))) + DeclarativeConfigUtil.getBoolean( + openTelemetry, "java", "r2dbc", "statement_sanitizer", "enabled") + .orElseGet( + () -> + DeclarativeConfigUtil.getBoolean( + openTelemetry, + "java", + "common", + "db_statement_sanitizer", + "enabled") + .orElse(true))) .build() .wrapConnectionFactory(connectionFactory, getConnectionFactoryOptions(connectionFactory)); } From b571c92f125977454297db8be26f5627c9ccedb3 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 12:32:24 -0800 Subject: [PATCH 51/73] simplify spring --- CI-PLAN.md | 59 +--- .../DefaultHttpClientInstrumenterBuilder.java | 6 +- .../DefaultHttpServerInstrumenterBuilder.java | 4 +- .../AwsLambdaEventsInstrumenterFactory.java | 2 +- .../autoconfigure/EmbeddedConfigFile.java | 18 +- .../OpenTelemetryAutoConfiguration.java | 11 +- .../autoconfigure/SpringConfigProvider.java | 68 ---- .../SpringDeclarativeConfigProperties.java | 319 ------------------ 8 files changed, 33 insertions(+), 454 deletions(-) delete mode 100644 instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringConfigProvider.java delete mode 100644 instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringDeclarativeConfigProperties.java diff --git a/CI-PLAN.md b/CI-PLAN.md index 2cb5361fa8b9..47764dbfb452 100644 --- a/CI-PLAN.md +++ b/CI-PLAN.md @@ -1,54 +1,23 @@ # CI Failure Analysis Plan ## Failed Jobs Summary -- Job 1: common / spotless (job ID: 57978980443) -- Job 2: common / test1 (8, hotspot, indy false) (job ID: 57978980582) -- Job 3: common / test1 (8, hotspot, indy true) (job ID: 57978980597) -- Job 4: common / test1 (11, hotspot, indy false) (job ID: 57978980589) -- Job 5: common / test1 (11, hotspot, indy true) (job ID: 57978980604) -- Job 6: common / test2 (11, hotspot, indy true) (job ID: 57978980611) -- Job 7: common / test1 (17, hotspot, indy false) (job ID: 57978980605) -- Job 8: common / test1 (17, hotspot, indy true) (job ID: 57978980602) -- Job 9: common / test3 (17, hotspot, indy false) (job ID: 57978980612) -- Job 10: common / test3 (17, hotspot, indy true) (job ID: 57978980619) -- Job 11: common / test1 (21, hotspot, indy true) (job ID: 57978980621) -- Job 12: common / test3 (21, hotspot, indy false) (job ID: 57978980628) -- Job 13: common / test3 (21, hotspot, indy true) (job ID: 57978980652) -- Job 14: common / test1 (25, hotspot, indy false) (job ID: 57978980637) -- Job 15: common / test3 (25, hotspot, indy false) (job ID: 57978980620) -- Job 16: common / test3 (25, hotspot, indy true) (job ID: 57978980635) -- Job 17: common / test1 (25-deny-unsafe, hotspot, indy false) (job ID: 57978980648) -- Job 18: common / test3 (25-deny-unsafe, hotspot, indy false) (job ID: 57978980639) -- Job 19: common / test3 (25-deny-unsafe, hotspot, indy true) (job ID: 57978980651) -- Job 20: test-latest-deps / testLatestDeps1 (job ID: 57978980450) -- Job 21: test-latest-deps / testLatestDeps3 (job ID: 57978980447) -- Job 22: markdown-lint-check / markdown-lint-check (job ID: 57978980442) +- Multiple test jobs (test0, test1, test2, test3 across Java 8, 11, 17, 21, 25 with various indy settings) +- testLatestDeps jobs (0, 1, 2, 3) ## Unique Failed Gradle Tasks -- [ ] Task: :javaagent-tooling:spotlessJavaCheck - - Seen in: spotless - - Log files: /tmp/spotless.log - - Issue: Formatting violation in RegexUrlTemplateCustomizerInitializer.java - multi-line method call should be on one line +- [ ] Task: :instrumentation-api-incubator:javaagent-testing:test + - Seen in: test1 (Java 8, indy false) + - Log files: /tmp/test1-java8-indy-false.log + - Failure: Test assertions failing for http.response.body.size attribute -- [ ] Task: :instrumentation:finagle-http-23.11:javaagent:test - - Seen in: test1 (Java 8), testLatestDeps1 - - Log files: /tmp/test1-java8.log, /tmp/testLatestDeps1.log - - Issue: Test failures - 6 tests failed in ServerH2Test.h2ProtocolUpgrade - -- [ ] Task: :instrumentation:spring:spring-web:spring-web-6.0:javaagent:test - - Seen in: testLatestDeps1 - - Log files: /tmp/testLatestDeps1.log - - Issue: Test failure (needs analysis) - -- [ ] Markdown lint errors - - Seen in: markdown-lint-check - - Log files: /tmp/markdown-lint.log - - Issues: - - declarative-config-bridge/README.md:7 - MD032/blanks-around-lists - - MAPPING.md:6 - MD060/table-column-style (multiple pipe spacing issues) +- [ ] Task: :smoke-tests-otel-starter:spring-boot-2:testDeclarativeConfig + - Seen in: test1 (Java 8, indy false) + - Log files: /tmp/test1-java8-indy-false.log + - Failure: 6 tests failed - AssertionError for [LONG attribute 'http.response.body.size'] - Expecting actual not to be null ## Notes -- Spotless failure is a simple formatting issue - need to consolidate multi-line method call -- Test failures in finagle-http-23.11 appear across multiple Java versions - likely real test failures -- Markdown lint failures are formatting issues in two files +- All failures appear related to missing `http.response.body.size` attribute in test assertions +- The attribute is expected to be present in HTTP spans but is null +- This is likely related to the declarative-configuration-bridge changes +- Both regular instrumentation API tests and Spring Boot smoke tests are affected diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java index efddc62ce0fa..5f736e3844d7 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpClientInstrumenterBuilder.java @@ -266,7 +266,7 @@ InstrumenterBuilder instrumenterBuilder( @CanIgnoreReturnValue public DefaultHttpClientInstrumenterBuilder configure( OpenTelemetry openTelemetry) { - DeclarativeConfigUtil.getList(openTelemetry, "general", "http", "known_methods") + DeclarativeConfigUtil.getList(openTelemetry, "java", "http", "known_methods") .ifPresent(this::setKnownMethods); DeclarativeConfigUtil.getList( openTelemetry, "general", "http", "client", "request_captured_headers") @@ -277,11 +277,11 @@ public DefaultHttpClientInstrumenterBuilder configure( setPeerServiceResolver(PeerServiceResolver.create(openTelemetry)); setEmitExperimentalHttpClientTelemetry( DeclarativeConfigUtil.getBoolean( - openTelemetry, "general", "http", "client", "emit_experimental_telemetry") + openTelemetry, "java", "http", "client", "emit_experimental_telemetry") .orElse(false)); setRedactQueryParameters( DeclarativeConfigUtil.getBoolean( - openTelemetry, "general", "http", "client", "redact_query_parameters/development") + openTelemetry, "java", "http", "client", "redact_query_parameters/development") .orElse(true)); return this; } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java index c8edfd848191..575eb21d35a9 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/builder/internal/DefaultHttpServerInstrumenterBuilder.java @@ -225,7 +225,7 @@ public InstrumenterBuilder instrumenterBuilder() { @CanIgnoreReturnValue public DefaultHttpServerInstrumenterBuilder configure( OpenTelemetry openTelemetry) { - DeclarativeConfigUtil.getList(openTelemetry, "general", "http", "known_methods") + DeclarativeConfigUtil.getList(openTelemetry, "java", "http", "known_methods") .ifPresent(this::setKnownMethods); DeclarativeConfigUtil.getList( openTelemetry, "general", "http", "server", "request_captured_headers") @@ -235,7 +235,7 @@ public DefaultHttpServerInstrumenterBuilder configure( .ifPresent(this::setCapturedResponseHeaders); setEmitExperimentalHttpServerTelemetry( DeclarativeConfigUtil.getBoolean( - openTelemetry, "general", "http", "server", "emit_experimental_telemetry") + openTelemetry, "java", "http", "server", "emit_experimental_telemetry") .orElse(false)); return this; } diff --git a/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java b/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java index b225ac64401a..7b8c5d16f200 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java +++ b/instrumentation/aws-lambda/aws-lambda-events-common-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/common/v2_2/internal/AwsLambdaEventsInstrumenterFactory.java @@ -36,7 +36,7 @@ public static AwsLambdaFunctionInstrumenter createInstrumenter( } private static Set getKnownHttpMethods(OpenTelemetry openTelemetry) { - return DeclarativeConfigUtil.getList(openTelemetry, "general", "http", "known_methods") + return DeclarativeConfigUtil.getList(openTelemetry, "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java index b2222baf489f..af51be392c16 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java @@ -46,20 +46,20 @@ class EmbeddedConfigFile { private EmbeddedConfigFile() {} static OpenTelemetryConfigurationModel extractModel(ConfigurableEnvironment environment) { - Map props = extractSpringProperties(environment); + Map props = extractSpringProperties(environment); return convertToOpenTelemetryConfigurationModel(props); } - private static Map extractSpringProperties(ConfigurableEnvironment environment) { + private static Map extractSpringProperties(ConfigurableEnvironment environment) { MutablePropertySources propertySources = environment.getPropertySources(); - Map props = new HashMap<>(); + Map props = new HashMap<>(); for (PropertySource propertySource : propertySources) { if (propertySource instanceof EnumerablePropertySource) { for (String propertyName : ((EnumerablePropertySource) propertySource).getPropertyNames()) { if (propertyName.startsWith("otel.")) { - String property = environment.getProperty(propertyName); + Object property = propertySource.getProperty(propertyName); if (Objects.equals(property, "")) { property = null; // spring returns empty string for yaml null } @@ -75,7 +75,7 @@ private static Map extractSpringProperties(ConfigurableEnvironme .replace("]", "") .replace(".", "_") .toUpperCase(Locale.ROOT); - String envVarValue = environment.getProperty(envVarName); + Object envVarValue = propertySource.getProperty(envVarName); if (envVarValue != null) { property = envVarValue; } @@ -96,7 +96,7 @@ private static Map extractSpringProperties(ConfigurableEnvironme } static OpenTelemetryConfigurationModel convertToOpenTelemetryConfigurationModel( - Map flatProps) { + Map flatProps) { Map nested = convertFlatPropsToNested(flatProps); return getObjectMapper().convertValue(nested, OpenTelemetryConfigurationModel.class); @@ -112,12 +112,12 @@ static ObjectMapper getObjectMapper() { * ["one", "two"]}}}} */ @SuppressWarnings("unchecked") - static Map convertFlatPropsToNested(Map flatProps) { + static Map convertFlatPropsToNested(Map flatProps) { Map result = new HashMap<>(); - for (Map.Entry entry : flatProps.entrySet()) { + for (Map.Entry entry : flatProps.entrySet()) { String key = entry.getKey(); - String value = entry.getValue(); + Object value = entry.getValue(); // Split the key by dots String[] parts = key.split("\\."); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index 34be4cc215f6..c7a4d6c35f23 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -33,6 +33,7 @@ import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import io.opentelemetry.sdk.extension.incubator.ExtendedOpenTelemetrySdk; import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration; import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider; import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; @@ -164,8 +165,9 @@ public OpenTelemetryConfigurationModel openTelemetryConfigurationModel( @Bean public OpenTelemetry openTelemetry( - OpenTelemetryConfigurationModel model, ApplicationContext applicationContext) { - OpenTelemetrySdk sdk = + OpenTelemetryConfigurationModel model, + ApplicationContext applicationContext) { + ExtendedOpenTelemetrySdk sdk = DeclarativeConfiguration.create( model, new OpenTelemetrySdkComponentLoader(applicationContext)); Runtime.getRuntime().addShutdownHook(new Thread(sdk::close)); @@ -173,11 +175,6 @@ public OpenTelemetry openTelemetry( return sdk; } - @Bean - public ConfigProvider configProvider(OpenTelemetryConfigurationModel model) { - return SpringConfigProvider.create(model); - } - @Bean public DeclarativeConfigurationCustomizerProvider distroConfigurationCustomizerProvider() { return new ResourceCustomizerProvider(); diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringConfigProvider.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringConfigProvider.java deleted file mode 100644 index f18378409814..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringConfigProvider.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure; - -import com.fasterxml.jackson.core.type.TypeReference; -import io.opentelemetry.api.incubator.config.ConfigProvider; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.common.ComponentLoader; -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; -import java.util.Collections; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Spring flavor of {@link io.opentelemetry.sdk.extension.incubator.fileconfig.SdkConfigProvider} - * that tries to coerce types, because spring doesn't tell what the original type was. - * - *

    The entire class is a copy of SdkConfigProvider - * which uses {@link SpringDeclarativeConfigProperties} instead of {@link - * io.opentelemetry.sdk.extension.incubator.fileconfig.YamlDeclarativeConfigProperties}. - */ -final class SpringConfigProvider implements ConfigProvider { - - @Nullable private final DeclarativeConfigProperties instrumentationConfig; - - private SpringConfigProvider( - OpenTelemetryConfigurationModel model, ComponentLoader componentLoader) { - DeclarativeConfigProperties configProperties = toConfigProperties(model, componentLoader); - this.instrumentationConfig = configProperties.getStructured("instrumentation/development"); - } - - private static DeclarativeConfigProperties toConfigProperties( - Object model, ComponentLoader componentLoader) { - Map configurationMap = - EmbeddedConfigFile.getObjectMapper() - .convertValue(model, new TypeReference>() {}); - if (configurationMap == null) { - configurationMap = Collections.emptyMap(); - } - return SpringDeclarativeConfigProperties.create(configurationMap, componentLoader); - } - - /** - * Create a {@link SpringConfigProvider} from the {@code model}. - * - * @param model the configuration model - * @return the {@link SpringConfigProvider} - */ - static SpringConfigProvider create(OpenTelemetryConfigurationModel model) { - return new SpringConfigProvider( - model, ComponentLoader.forClassLoader(SpringConfigProvider.class.getClassLoader())); - } - - @Nullable - @Override - public DeclarativeConfigProperties getInstrumentationConfig() { - return instrumentationConfig; - } - - @Override - public String toString() { - return "SpringConfigProvider{" + "instrumentationConfig=" + instrumentationConfig + '}'; - } -} diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringDeclarativeConfigProperties.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringDeclarativeConfigProperties.java deleted file mode 100644 index 26b2e462c99f..000000000000 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/SpringDeclarativeConfigProperties.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.spring.autoconfigure; - -import static java.util.stream.Collectors.joining; -import static java.util.stream.Collectors.toList; - -import io.opentelemetry.api.incubator.config.DeclarativeConfigException; -import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; -import io.opentelemetry.common.ComponentLoader; -import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration; -import java.util.Arrays; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.StringJoiner; -import javax.annotation.Nullable; - -/** - * Spring flavor of {@link - * io.opentelemetry.sdk.extension.incubator.fileconfig.YamlDeclarativeConfigProperties}, that tries - * to coerce types, because spring doesn't tell what the original type was. - * - *

    The entire class is a copy of YamlDeclarativeConfigProperties - * with only minor modifications to type coercion logic. - */ -final class SpringDeclarativeConfigProperties implements DeclarativeConfigProperties { - - private static final Set> SUPPORTED_SCALAR_TYPES = - Collections.unmodifiableSet( - new LinkedHashSet<>( - Arrays.asList(String.class, Boolean.class, Long.class, Double.class))); - - /** Values are {@link #isPrimitive(Object)}, {@link List} of scalars. */ - private final Map simpleEntries; - - private final Map> listEntries; - private final Map mapEntries; - private final ComponentLoader componentLoader; - - private SpringDeclarativeConfigProperties( - Map simpleEntries, - Map> listEntries, - Map mapEntries, - ComponentLoader componentLoader) { - this.simpleEntries = simpleEntries; - this.listEntries = listEntries; - this.mapEntries = mapEntries; - this.componentLoader = componentLoader; - } - - /** - * Create a {@link SpringDeclarativeConfigProperties} from the {@code properties} map. - * - *

    {@code properties} is expected to be the output of YAML parsing (i.e. with Jackson {@code - * com.fasterxml.jackson.databind.ObjectMapper}), and have values which are scalars, lists of - * scalars, lists of maps, and maps. - * - * @see DeclarativeConfiguration#toConfigProperties(Object) - */ - @SuppressWarnings("unchecked") - public static SpringDeclarativeConfigProperties create( - Map properties, ComponentLoader componentLoader) { - Map simpleEntries = new LinkedHashMap<>(); - Map> listEntries = new LinkedHashMap<>(); - Map mapEntries = new LinkedHashMap<>(); - for (Map.Entry entry : properties.entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - if (isPrimitive(value) || value == null) { - simpleEntries.put(key, value); - continue; - } - if (isPrimitiveList(value)) { - simpleEntries.put(key, value); - continue; - } - if (isListOfMaps(value)) { - List list = - ((List>) value) - .stream() - .map(map -> SpringDeclarativeConfigProperties.create(map, componentLoader)) - .collect(toList()); - listEntries.put(key, list); - continue; - } - if (isMap(value)) { - SpringDeclarativeConfigProperties configProperties = - SpringDeclarativeConfigProperties.create((Map) value, componentLoader); - mapEntries.put(key, configProperties); - continue; - } - throw new DeclarativeConfigException( - "Unable to initialize ExtendedConfigProperties. Key \"" - + key - + "\" has unrecognized object type " - + value.getClass().getName()); - } - return new SpringDeclarativeConfigProperties( - simpleEntries, listEntries, mapEntries, componentLoader); - } - - private static boolean isPrimitiveList(Object object) { - if (object instanceof List) { - List list = (List) object; - return list.stream().allMatch(SpringDeclarativeConfigProperties::isPrimitive); - } - return false; - } - - private static boolean isPrimitive(Object object) { - return object instanceof String - || object instanceof Integer - || object instanceof Long - || object instanceof Float - || object instanceof Double - || object instanceof Boolean; - } - - private static boolean isListOfMaps(Object object) { - if (object instanceof List) { - List list = (List) object; - return list.stream() - .allMatch( - entry -> - entry instanceof Map - && ((Map) entry) - .keySet().stream().allMatch(key -> key instanceof String)); - } - return false; - } - - private static boolean isMap(Object object) { - if (object instanceof Map) { - Map map = (Map) object; - return map.keySet().stream().allMatch(entry -> entry instanceof String); - } - return false; - } - - @Nullable - @Override - public String getString(String name) { - return stringOrNull(simpleEntries.get(name)); - } - - @Nullable - @Override - public Boolean getBoolean(String name) { - return booleanOrNull(simpleEntries.get(name)); - } - - @Nullable - @Override - public Integer getInt(String name) { - Object value = simpleEntries.get(name); - if (value == null) { - return null; - } - if (value instanceof Integer) { - return (Integer) value; - } - if (value instanceof Long) { - return ((Long) value).intValue(); - } - return Integer.parseInt(value.toString()); - } - - @Nullable - @Override - public Long getLong(String name) { - return longOrNull(simpleEntries.get(name)); - } - - @Nullable - @Override - public Double getDouble(String name) { - return doubleOrNull(simpleEntries.get(name)); - } - - @Nullable - @Override - public List getScalarList(String name, Class scalarType) { - if (!SUPPORTED_SCALAR_TYPES.contains(scalarType)) { - throw new DeclarativeConfigException( - "Unsupported scalar type " - + scalarType.getName() - + ". Supported types include " - + SUPPORTED_SCALAR_TYPES.stream() - .map(Class::getName) - .collect(joining(",", "[", "]"))); - } - Object value = simpleEntries.get(name); - if (value instanceof List) { - List objectList = ((List) value); - if (objectList.isEmpty()) { - return Collections.emptyList(); - } - List result = - objectList.stream() - .map( - entry -> { - if (scalarType == String.class) { - return stringOrNull(entry); - } else if (scalarType == Boolean.class) { - return booleanOrNull(entry); - } else if (scalarType == Long.class) { - return longOrNull(entry); - } else if (scalarType == Double.class) { - return doubleOrNull(entry); - } - return null; - }) - .filter(Objects::nonNull) - .map(scalarType::cast) - .collect(toList()); - if (result.isEmpty()) { - return null; - } - return result; - } - return null; - } - - @Nullable - private static String stringOrNull(@Nullable Object value) { - if (value == null) { - return null; - } - return value.toString(); - } - - @Nullable - private static Boolean booleanOrNull(@Nullable Object value) { - if (value == null) { - return null; - } - if (value instanceof Boolean) { - return (Boolean) value; - } - return Boolean.parseBoolean(value.toString()); - } - - @Nullable - private static Long longOrNull(@Nullable Object value) { - if (value == null) { - return null; - } - if (value instanceof Integer) { - return ((Integer) value).longValue(); - } - if (value instanceof Long) { - return (Long) value; - } - return Long.parseLong(value.toString()); - } - - @Nullable - private static Double doubleOrNull(@Nullable Object value) { - if (value == null) { - return null; - } - if (value instanceof Float) { - return ((Float) value).doubleValue(); - } - if (value instanceof Double) { - return (Double) value; - } - return Double.parseDouble(value.toString()); - } - - @Nullable - @Override - public DeclarativeConfigProperties getStructured(String name) { - return mapEntries.get(name); - } - - @Nullable - @Override - public List getStructuredList(String name) { - List value = listEntries.get(name); - if (value != null) { - return Collections.unmodifiableList(value); - } - return null; - } - - @Override - public Set getPropertyKeys() { - Set keys = new LinkedHashSet<>(); - keys.addAll(simpleEntries.keySet()); - keys.addAll(listEntries.keySet()); - keys.addAll(mapEntries.keySet()); - return Collections.unmodifiableSet(keys); - } - - @Override - public String toString() { - StringJoiner joiner = new StringJoiner(", ", "SpringDeclarativeConfigProperties{", "}"); - simpleEntries.forEach((key, value) -> joiner.add(key + "=" + value)); - listEntries.forEach((key, value) -> joiner.add(key + "=" + value)); - mapEntries.forEach((key, value) -> joiner.add(key + "=" + value)); - return joiner.toString(); - } - - /** Return the {@link ComponentLoader}. */ - @Override - public ComponentLoader getComponentLoader() { - return componentLoader; - } -} From 087235143ea476e3552d91d26959ba5dc1811353 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 10:08:52 -0800 Subject: [PATCH 52/73] less ConfigProperties --- .../DropwizardMetricsInstrumentationModule.java | 3 +-- ...ApplicationLoggingInstrumentationModule.java | 12 ++++++++---- .../ClassLoaderInstrumentationModule.java | 3 +-- .../osgi/EclipseOsgiInstrumentationModule.java | 3 +-- .../lambda/LambdaInstrumentationModule.java | 3 +-- .../ReflectionInstrumentationModule.java | 3 +-- .../UrlClassLoaderInstrumentationModule.java | 3 +-- .../jaxrs/v1_0/JaxrsInstrumentationModule.java | 16 +++++++++++----- .../JaxrsAnnotationsInstrumentationModule.java | 16 +++++++++++----- .../JaxrsAnnotationsInstrumentationModule.java | 16 +++++++++++----- .../jws/v1_1/JwsInstrumentationModule.java | 16 +++++++++++----- .../DataSourceInstrumentationModule.java | 3 +-- .../v1_5/MicrometerInstrumentationModule.java | 3 +-- .../v3_2/MyBatisInstrumentationModule.java | 3 +-- .../v3_0/SpringBatchInstrumentationModule.java | 3 +-- ...SpringBootActuatorInstrumentationModule.java | 3 +-- .../v3_1/SpringSchedulingSingletons.java | 5 ++++- ...urityConfigServletInstrumentationModule.java | 5 ++--- ...urityConfigWebFluxInstrumentationModule.java | 17 ++++++++--------- .../ws/v2_0/SpringWsInstrumentationModule.java | 16 +++++++++++----- .../instrumentation/InstrumentationModule.java | 11 +++++++++++ .../tooling/config/RuntimeConfigProperties.java | 3 +-- .../InstrumentationModuleInstaller.java | 11 ++++++++--- .../DenyUnsafeInstrumentationModule.java | 10 ++++++---- 24 files changed, 114 insertions(+), 73 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..c159746480eb 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,13 @@ 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")); + return super.defaultEnabled() + && DeclarativeConfigUtil.getString( + GlobalOpenTelemetry.get(), "java", "agent", "logging") + .map(value -> "application".equals(value)) + .orElse(false); } @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 4b8b697e18dc..1b3a9c6a9820 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,10 +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.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; @@ -36,13 +37,18 @@ 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) - && config.getBoolean( - "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); + return super.defaultEnabled() + && DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false); } @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 4379d9716672..05119e952362 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,10 +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.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; @@ -39,13 +40,18 @@ 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) - && config.getBoolean( - "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); + return super.defaultEnabled() + && DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false); } @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 9487d93d9e71..042176697cc7 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,10 +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.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; @@ -39,13 +40,18 @@ 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) - && config.getBoolean( - "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); + return super.defaultEnabled() + && DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false); } @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 afe98f0a3789..dd4919f86e93 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,10 +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.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,11 +28,16 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return super.defaultEnabled(config) - && config.getBoolean( - "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); + return super.defaultEnabled() + && DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false); } @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-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java index 4e3dd03ca0fa..cb818e47f4f1 100644 --- a/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java +++ b/instrumentation/spring/spring-scheduling-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/scheduling/v3_1/SpringSchedulingSingletons.java @@ -18,7 +18,10 @@ public final class SpringSchedulingSingletons { private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "spring_scheduling", "experimental_span_attributes") + GlobalOpenTelemetry.get(), + "java", + "spring_scheduling", + "experimental_span_attributes") .orElse(false); private static final Instrumenter INSTRUMENTER; 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 ccebc14e4a0e..3c535ff1a45a 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 @@ -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.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; import net.bytebuddy.matcher.ElementMatcher; @@ -31,8 +30,8 @@ public SpringSecurityConfigServletInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { - return super.defaultEnabled(config) + public boolean defaultEnabled() { + 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 630774ef20d0..b31e779e56d8 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 @@ -12,7 +12,6 @@ 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; /** Instrumentation module for webflux-based applications that use spring-security-config. */ @@ -28,15 +27,15 @@ public SpringSecurityConfigWebFluxInstrumentationModule() { } @Override - public boolean defaultEnabled(ConfigProperties config) { - return super.defaultEnabled(config) + public boolean defaultEnabled() { + 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. - * - * If any functionality not related to enduser attributes is added to this module, - * then this check will need to move elsewhere to only guard the enduser attributes logic. - */ + * Since the only thing this module currently does is capture enduser attributes, + * the module can be completely disabled if enduser attributes are disabled. + * + * If any functionality not related to enduser attributes is added to this module, + * then this check will need to move elsewhere to only guard the enduser attributes logic. + */ && isAnyEnduserAttributeEnabled(); } 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 683bf5c01a6f..88487e3be5a4 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,10 +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.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; @@ -26,11 +27,16 @@ public List typeInstrumentations() { } @Override - public boolean defaultEnabled(ConfigProperties config) { + public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return super.defaultEnabled(config) - && config.getBoolean( - "otel.instrumentation.common.experimental.controller-telemetry.enabled", false); + return super.defaultEnabled() + && DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "common", + "controller_telemetry/development", + "enabled") + .orElse(false); } @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 c3008df6762c..a0282bd4a454 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,17 @@ public final String instrumentationName() { * Allows instrumentation modules to disable themselves by default, or to additionally disable * themselves on some other condition. */ + public boolean defaultEnabled() { + 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); } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java index d30baf3e65a9..f567ba3e6dc9 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java @@ -10,8 +10,7 @@ public final class RuntimeConfigProperties { - // TODO populate with empty config for safety? - @Nullable private static volatile ConfigProperties instance; + @Nullable private static volatile ConfigProperties instance = new EmptyConfigProperties(); public static void set(ConfigProperties configProperties) { instance = configProperties; 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 fbc7b8aad68a..15e1c794a3c7 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 @@ -67,10 +67,15 @@ 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 (!AgentConfig.isInstrumentationEnabled( - config, - instrumentationModule.instrumentationNames(), - instrumentationModule.defaultEnabled(config))) { + config, 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..72a968c72197 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 @@ -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; /** @@ -34,8 +35,9 @@ public List typeInstrumentations() { } @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"); + public boolean defaultEnabled() { + return DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "deny_unsafe", "enabled") + .orElse(false); } } From 1e8557ecff92866f6f2518a0020ec8e4853d678e Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 11:10:00 -0800 Subject: [PATCH 53/73] less ConfigProperties --- .../javaagent/DemoIgnoredTypesConfigurer.java | 3 +- .../akkaactor/AkkaIgnoredTypesConfigurer.java | 3 +- .../AkkaServerIgnoredTypesConfigurer.java | 3 +- ...licationLoggingIgnoredTypesConfigurer.java | 3 +- ...plicationLoggingInstrumentationModule.java | 3 +- .../ClassLoaderIgnoredTypesConfigurer.java | 3 +- .../ReflectionIgnoredTypesConfigurer.java | 3 +- .../jdbc/JdbcIgnoredTypesConfigurer.java | 3 +- .../v12_0/Jetty12IgnoredTypesConfigurer.java | 3 +- .../jms/v1_1/JmsIgnoredTypesConfigurer.java | 3 +- ...otlinCoroutinesIgnoredTypesConfigurer.java | 3 +- .../v2_17/NatsIgnoredTypesConfigurer.java | 3 +- .../v2_2/OkHttpIgnoredTypesConfigurer.java | 3 +- .../v3_0/OkHttp3IgnoredTypesConfigurer.java | 3 +- .../v1_0/PekkoIgnoredTypesConfigurer.java | 3 +- .../PekkoServerIgnoredTypesConfigurer.java | 3 +- .../v2_0/QuartzIgnoredTypesConfigurer.java | 3 +- .../RatpackIgnoredTypesConfigurer.java | 3 +- .../v2_0/RxJava2IgnoredTypesConfigurer.java | 3 +- ...ingBootActuatorIgnoredTypesConfigurer.java | 3 +- .../SpringCoreIgnoredTypesConfigurer.java | 3 +- ...ringIntegrationIgnoredTypesConfigurer.java | 3 +- .../SpringRabbitIgnoredTypesConfigurer.java | 3 +- .../v4_0/SpringRmiIgnoredTypesConfigurer.java | 3 +- ...ityConfigWebFluxInstrumentationModule.java | 12 ++++---- .../UndertowIgnoredTypesConfigurer.java | 3 +- .../zio/v2_0/ZioIgnoredTypesConfigurer.java | 3 +- .../ignore/IgnoredTypesConfigurer.java | 11 +++++++ .../ignore/IgnoredTypesMatcherBenchmark.java | 4 +-- .../javaagent/tooling/AgentInstaller.java | 7 ++++- ...ditionalLibraryIgnoredTypesConfigurer.java | 29 ++++++++++++------- .../CommonLibraryIgnoredTypesConfigurer.java | 3 +- .../ignore/GlobalIgnoredTypesConfigurer.java | 3 +- .../UserExcludedClassLoadersConfigurer.java | 13 +++++---- .../ignore/UserExcludedClassesConfigurer.java | 12 ++++---- .../testing/IgnoredTestTypesConfigurer.java | 3 +- .../testing/bytebuddy/TestAgentListener.java | 7 ++++- 37 files changed, 90 insertions(+), 92 deletions(-) diff --git a/examples/extension/src/main/java/com/example/javaagent/DemoIgnoredTypesConfigurer.java b/examples/extension/src/main/java/com/example/javaagent/DemoIgnoredTypesConfigurer.java index 353084fb2aba..e86617828e93 100644 --- a/examples/extension/src/main/java/com/example/javaagent/DemoIgnoredTypesConfigurer.java +++ b/examples/extension/src/main/java/com/example/javaagent/DemoIgnoredTypesConfigurer.java @@ -8,7 +8,6 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; /** * Custom {@link IgnoredTypesConfigurer} which exists currently only to verify correct shading. @@ -19,5 +18,5 @@ public class DemoIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) {} + public void configure(IgnoredTypesBuilder builder) {} } diff --git a/instrumentation/akka/akka-actor-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkaactor/AkkaIgnoredTypesConfigurer.java b/instrumentation/akka/akka-actor-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkaactor/AkkaIgnoredTypesConfigurer.java index 37bace28bb6c..199edb6d75bb 100644 --- a/instrumentation/akka/akka-actor-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkaactor/AkkaIgnoredTypesConfigurer.java +++ b/instrumentation/akka/akka-actor-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkaactor/AkkaIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class AkkaIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // This is a Mailbox created by akka.dispatch.Dispatcher#createMailbox. We must not add // a context to it as context should only be carried by individual envelopes in the queue // of this mailbox. diff --git a/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaServerIgnoredTypesConfigurer.java b/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaServerIgnoredTypesConfigurer.java index a38b76cf6924..2425cbeb9810 100644 --- a/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaServerIgnoredTypesConfigurer.java +++ b/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaServerIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class AkkaServerIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // in AkkaHttpServerInstrumentationTestAsync http pipeline test sending this message trigger // processing next request, we don't want to propagate context there builder.ignoreTaskClass("akka.stream.impl.fusing.ActorGraphInterpreter$AsyncInput"); diff --git a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingIgnoredTypesConfigurer.java b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingIgnoredTypesConfigurer.java index ba72c20c3049..1e1335971af5 100644 --- a/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingIgnoredTypesConfigurer.java +++ b/instrumentation/internal/internal-application-logger/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/logging/ApplicationLoggingIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public final class ApplicationLoggingIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { builder.allowClass("org.slf4j.LoggerFactory"); builder.allowClass("org.springframework.boot.SpringApplication"); builder.allowClass("org.springframework.boot.logging.LoggingApplicationListener"); 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 c159746480eb..365b54a2c564 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 @@ -25,8 +25,7 @@ public ApplicationLoggingInstrumentationModule() { public boolean defaultEnabled() { // only enable this instrumentation if the application logger is enabled return super.defaultEnabled() - && DeclarativeConfigUtil.getString( - GlobalOpenTelemetry.get(), "java", "agent", "logging") + && DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "agent", "logging") .map(value -> "application".equals(value)) .orElse(false); } diff --git a/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderIgnoredTypesConfigurer.java b/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderIgnoredTypesConfigurer.java index 727423673347..8ab4956e98ff 100644 --- a/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderIgnoredTypesConfigurer.java +++ b/instrumentation/internal/internal-class-loader/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/classloader/ClassLoaderIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class ClassLoaderIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { builder.allowClass("jdk.internal.loader.BuiltinClassLoader"); builder.allowClass("sun.misc.Launcher$AppClassLoader"); } diff --git a/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionIgnoredTypesConfigurer.java b/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionIgnoredTypesConfigurer.java index 426d0a618ed1..e8ca37cee760 100644 --- a/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionIgnoredTypesConfigurer.java +++ b/instrumentation/internal/internal-reflection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/reflection/ReflectionIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class ReflectionIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { builder.allowClass("jdk.internal.reflect.Reflection"); builder.allowClass("sun.reflect.Reflection"); builder.allowClass("java.lang.Class"); diff --git a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcIgnoredTypesConfigurer.java b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcIgnoredTypesConfigurer.java index 4301a3352588..1de16fe496dd 100644 --- a/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcIgnoredTypesConfigurer.java +++ b/instrumentation/jdbc/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jdbc/JdbcIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class JdbcIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // see https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/5946 builder.ignoreClass("org.jboss.jca.adapters.jdbc."); // see https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/8109 diff --git a/instrumentation/jetty/jetty-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/v12_0/Jetty12IgnoredTypesConfigurer.java b/instrumentation/jetty/jetty-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/v12_0/Jetty12IgnoredTypesConfigurer.java index 24b5d7d45bf2..323f0fc11dfd 100644 --- a/instrumentation/jetty/jetty-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/v12_0/Jetty12IgnoredTypesConfigurer.java +++ b/instrumentation/jetty/jetty-12.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/v12_0/Jetty12IgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class Jetty12IgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // handling pipelined request sends HttpConnection instance (implements Runnable) to executor // while scope from the previous request is still active builder.ignoreTaskClass("org.eclipse.jetty.server.internal.HttpConnection"); diff --git a/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsIgnoredTypesConfigurer.java b/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsIgnoredTypesConfigurer.java index 72cfd512d628..66260d8580b9 100644 --- a/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsIgnoredTypesConfigurer.java +++ b/instrumentation/jms/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/JmsIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class JmsIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // Avoid instrumenting internal OrderedExecutor worker class builder.ignoreTaskClass("org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$"); } diff --git a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/KotlinCoroutinesIgnoredTypesConfigurer.java b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/KotlinCoroutinesIgnoredTypesConfigurer.java index 1ee607fb8dc9..444a4bd941d5 100644 --- a/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/KotlinCoroutinesIgnoredTypesConfigurer.java +++ b/instrumentation/kotlinx-coroutines/kotlinx-coroutines-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kotlinxcoroutines/instrumentationannotations/KotlinCoroutinesIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class KotlinCoroutinesIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { builder.allowClass("kotlin.coroutines.jvm.internal.CompletedContinuation"); } } diff --git a/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsIgnoredTypesConfigurer.java b/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsIgnoredTypesConfigurer.java index 9789bca6af21..300ae0b43673 100644 --- a/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsIgnoredTypesConfigurer.java +++ b/instrumentation/nats/nats-2.17/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/nats/v2_17/NatsIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class NatsIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { builder.ignoreTaskClass("io.nats.client.impl.NatsDispatcher"); } } diff --git a/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttpIgnoredTypesConfigurer.java b/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttpIgnoredTypesConfigurer.java index 8823c36cf44b..e47ee7bdc1a2 100644 --- a/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttpIgnoredTypesConfigurer.java +++ b/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttpIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class OkHttpIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // OkHttp connection pool lazily initializes a long running task to detect expired // connections and should not itself be instrumented. builder.ignoreTaskClass("com.squareup.okhttp.ConnectionPool$"); diff --git a/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3IgnoredTypesConfigurer.java b/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3IgnoredTypesConfigurer.java index 6198a2e84523..934c0d834ea0 100644 --- a/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3IgnoredTypesConfigurer.java +++ b/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3IgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class OkHttp3IgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // OkHttp task runner is a lazily-initialized shared pool of continuously running threads // similar to an event loop. The submitted tasks themselves should already be // instrumented to allow async propagation. diff --git a/instrumentation/pekko/pekko-actor-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkoactor/v1_0/PekkoIgnoredTypesConfigurer.java b/instrumentation/pekko/pekko-actor-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkoactor/v1_0/PekkoIgnoredTypesConfigurer.java index da2ee3dff985..fd87b86e43aa 100644 --- a/instrumentation/pekko/pekko-actor-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkoactor/v1_0/PekkoIgnoredTypesConfigurer.java +++ b/instrumentation/pekko/pekko-actor-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkoactor/v1_0/PekkoIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class PekkoIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // This is a Mailbox created by org.apache.pekko.dispatch.Dispatcher#createMailbox. We must not // add a context to it as context should only be carried by individual envelopes in the queue // of this mailbox. diff --git a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoServerIgnoredTypesConfigurer.java b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoServerIgnoredTypesConfigurer.java index d8dc971ee5a0..dc446d10084f 100644 --- a/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoServerIgnoredTypesConfigurer.java +++ b/instrumentation/pekko/pekko-http-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pekkohttp/v1_0/server/PekkoServerIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class PekkoServerIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // in PekkoHttpServerInstrumentationTestAsync http pipeline test sending this message trigger // processing next request, we don't want to propagate context there builder.ignoreTaskClass("org.apache.pekko.stream.impl.fusing.ActorGraphInterpreter$AsyncInput"); diff --git a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzIgnoredTypesConfigurer.java b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzIgnoredTypesConfigurer.java index 9eb02928b99c..edff6559062b 100644 --- a/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzIgnoredTypesConfigurer.java +++ b/instrumentation/quartz-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/quartz/v2_0/QuartzIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class QuartzIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // Quartz executes jobs themselves in a synchronous way, there's no reason to propagate context // between its scheduler threads. builder.ignoreTaskClass("org.quartz"); diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackIgnoredTypesConfigurer.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackIgnoredTypesConfigurer.java index 165c21f1d6d9..0b3dcd2d813f 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackIgnoredTypesConfigurer.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/ratpack/RatpackIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class RatpackIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // Context is passed through Netty channels in Ratpack as executor instrumentation is // not suitable. As the context that would be propagated via executor would be // incorrect, skip the propagation. Not checking for concrete class names as this covers diff --git a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/RxJava2IgnoredTypesConfigurer.java b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/RxJava2IgnoredTypesConfigurer.java index 1ff5909a7620..1f86ccd7c3c4 100644 --- a/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/RxJava2IgnoredTypesConfigurer.java +++ b/instrumentation/rxjava/rxjava-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rxjava/v2_0/RxJava2IgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class RxJava2IgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // ScheduledRunnable is a wrapper around a Runnable and doesn't itself need context. builder.ignoreTaskClass("io.reactivex.internal.schedulers.ScheduledRunnable"); } diff --git a/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorIgnoredTypesConfigurer.java b/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorIgnoredTypesConfigurer.java index d6691de913b8..6ce3441aad67 100644 --- a/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorIgnoredTypesConfigurer.java +++ b/instrumentation/spring/spring-boot-actuator-autoconfigure-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/actuator/v2_0/SpringBootActuatorIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class SpringBootActuatorIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { builder.allowClass("org.springframework.boot.autoconfigure.AutoConfigurationImportSelector"); } } diff --git a/instrumentation/spring/spring-core-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/core/v2_0/SpringCoreIgnoredTypesConfigurer.java b/instrumentation/spring/spring-core-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/core/v2_0/SpringCoreIgnoredTypesConfigurer.java index 9ec673d1fb71..172a9f1a77c8 100644 --- a/instrumentation/spring/spring-core-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/core/v2_0/SpringCoreIgnoredTypesConfigurer.java +++ b/instrumentation/spring/spring-core-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/core/v2_0/SpringCoreIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class SpringCoreIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // a Runnable task class that we don't need to touch builder .ignoreClass("org.springframework.util.ConcurrentLruCache$AddTask") diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationIgnoredTypesConfigurer.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationIgnoredTypesConfigurer.java index a54b279e9da7..be1b753245d1 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationIgnoredTypesConfigurer.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationIgnoredTypesConfigurer.java @@ -8,12 +8,11 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class SpringIntegrationIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // we don't instrument any messaging classes builder.ignoreClass("org.springframework.messaging"); } diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitIgnoredTypesConfigurer.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitIgnoredTypesConfigurer.java index c4890b1340fc..6fa7129a684a 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitIgnoredTypesConfigurer.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbitIgnoredTypesConfigurer.java @@ -8,12 +8,11 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class SpringRabbitIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // contains a Runnable that servers as a worker that continuously reads messages from queue builder .ignoreClass("org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$") diff --git a/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/SpringRmiIgnoredTypesConfigurer.java b/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/SpringRmiIgnoredTypesConfigurer.java index c12ab641a0a4..e8cf8fb24235 100644 --- a/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/SpringRmiIgnoredTypesConfigurer.java +++ b/instrumentation/spring/spring-rmi-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/rmi/v4_0/SpringRmiIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class SpringRmiIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // The Spring EJB classes are ignored in the AdditionalLibraryIgnoredTypesConfigurer, but // are required when utilizing Spring's local-slsb and remote-slsb to access EJBs through RMI. builder.allowClass("org.springframework.ejb.access."); 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 b31e779e56d8..80ff556e3065 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 @@ -30,12 +30,12 @@ public SpringSecurityConfigWebFluxInstrumentationModule() { public boolean defaultEnabled() { 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. - * - * If any functionality not related to enduser attributes is added to this module, - * then this check will need to move elsewhere to only guard the enduser attributes logic. - */ + * Since the only thing this module currently does is capture enduser attributes, + * the module can be completely disabled if enduser attributes are disabled. + * + * If any functionality not related to enduser attributes is added to this module, + * then this check will need to move elsewhere to only guard the enduser attributes logic. + */ && isAnyEnduserAttributeEnabled(); } diff --git a/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowIgnoredTypesConfigurer.java b/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowIgnoredTypesConfigurer.java index 49bc8883ce8a..3287251ffb85 100644 --- a/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowIgnoredTypesConfigurer.java +++ b/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class UndertowIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // When http pipelining is used HttpReadListener is passed to another worker thread to start // processing next request when the context from the old request is still active. Prevent // propagating context from the old request to the new one. diff --git a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioIgnoredTypesConfigurer.java b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioIgnoredTypesConfigurer.java index 6aade7c175c4..bcc5c254a91f 100644 --- a/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioIgnoredTypesConfigurer.java +++ b/instrumentation/zio/zio-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/zio/v2_0/ZioIgnoredTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class ZioIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // context is propagated using FiberContext builder.ignoreTaskClass("zio.internal.FiberRuntime"); } diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java index 1f2b20327335..26561d30cf44 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java @@ -22,5 +22,16 @@ public interface IgnoredTypesConfigurer extends Ordered { * Configure the passed {@code builder} and define which classes should be ignored when * instrumenting. */ + default void configure(IgnoredTypesBuilder builder) { + throw new UnsupportedOperationException(); + } + + /** + * Configure the passed {@code builder} and define which classes should be ignored when + * instrumenting. + * + * @deprecated Use {@link #configure(IgnoredTypesBuilder)} instead. + */ + @Deprecated void configure(IgnoredTypesBuilder builder, ConfigProperties config); } diff --git a/javaagent-tooling/src/jmh/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcherBenchmark.java b/javaagent-tooling/src/jmh/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcherBenchmark.java index 73e7d7ea5e0f..03ed1bbcd35f 100644 --- a/javaagent-tooling/src/jmh/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcherBenchmark.java +++ b/javaagent-tooling/src/jmh/java/io/opentelemetry/javaagent/tooling/ignore/IgnoredTypesMatcherBenchmark.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.tooling.ignore; -import io.opentelemetry.javaagent.tooling.EmptyConfigProperties; import java.util.concurrent.TimeUnit; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; @@ -33,8 +32,7 @@ public class IgnoredTypesMatcherBenchmark { static { IgnoredTypesBuilderImpl builder = new IgnoredTypesBuilderImpl(); - new AdditionalLibraryIgnoredTypesConfigurer() - .configure(builder, EmptyConfigProperties.INSTANCE); + new AdditionalLibraryIgnoredTypesConfigurer().configure(builder); ignoredTypesMatcher = new IgnoredTypesMatcher(builder.buildIgnoredTypesTrie()); } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 93c79220d8ec..8ffd5baa2b48 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -302,7 +302,12 @@ private static AgentBuilder configureIgnoredTypes( IgnoredTypesBuilderImpl builder = new IgnoredTypesBuilderImpl(); for (IgnoredTypesConfigurer configurer : loadOrdered(IgnoredTypesConfigurer.class, extensionClassLoader)) { - configurer.configure(builder, RuntimeConfigProperties.get()); + try { + configurer.configure(builder); + } catch (UnsupportedOperationException e) { + // fall back to the deprecated method + configurer.configure(builder, RuntimeConfigProperties.get()); + } } Trie ignoredTasksTrie = builder.buildIgnoredTasksTrie(); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java index 1244902a486e..33fa3a6fde9d 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/AdditionalLibraryIgnoredTypesConfigurer.java @@ -6,9 +6,10 @@ package io.opentelemetry.javaagent.tooling.ignore; 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.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; /** * Additional global ignore settings that are used to reduce number of classes we try to apply @@ -21,21 +22,27 @@ @AutoService(IgnoredTypesConfigurer.class) public class AdditionalLibraryIgnoredTypesConfigurer implements IgnoredTypesConfigurer { - // We set this system property when running the agent with unit tests to allow verifying that we - // don't ignore libraries that we actually attempt to instrument. It means either the list is - // wrong or a type matcher is. - private static final String ADDITIONAL_LIBRARY_IGNORES_ENABLED = - "otel.javaagent.testing.additional-library-ignores.enabled"; - @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { - if (config.getBoolean(ADDITIONAL_LIBRARY_IGNORES_ENABLED, true)) { - configure(builder); + public void configure(IgnoredTypesBuilder builder) { + // We set this system property when running the agent with unit tests to allow verifying that we + // don't ignore libraries that we actually attempt to instrument. It means either the list is + // wrong or a type matcher is. + boolean enabled = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), + "java", + "agent", + "testing", + "additional_library_ignores", + "enabled") + .orElse(true); + if (enabled) { + configureIgnores(builder); } } // only used by tests (to bypass the ignores check) - public void configure(IgnoredTypesBuilder builder) { + public void configureIgnores(IgnoredTypesBuilder builder) { builder .ignoreClass("com.beust.jcommander.") .ignoreClass("com.fasterxml.classmate.") diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/CommonLibraryIgnoredTypesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/CommonLibraryIgnoredTypesConfigurer.java index 1bcacdf2b816..29c8424b1d14 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/CommonLibraryIgnoredTypesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/CommonLibraryIgnoredTypesConfigurer.java @@ -8,7 +8,6 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; /** * Unlike the {@link AdditionalLibraryIgnoredTypesConfigurer}, this one is applied to all tests. It @@ -19,7 +18,7 @@ public class CommonLibraryIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { builder.ignoreClass("org.springframework.boot.autoconfigure.ssl.FileWatcher$WatcherThread"); } } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/GlobalIgnoredTypesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/GlobalIgnoredTypesConfigurer.java index e67909490ee2..f7dfa1e4d65d 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/GlobalIgnoredTypesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/GlobalIgnoredTypesConfigurer.java @@ -11,13 +11,12 @@ import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; import io.opentelemetry.javaagent.tooling.ExtensionClassLoader; import io.opentelemetry.javaagent.tooling.instrumentation.indy.InstrumentationModuleClassLoader; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class GlobalIgnoredTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { configureIgnoredTypes(builder); configureIgnoredClassLoaders(builder); configureIgnoredTasks(builder); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java index d2d386ca4f7e..34b7f6f7b23a 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java @@ -8,20 +8,21 @@ import static java.util.Collections.emptyList; 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.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(IgnoredTypesConfigurer.class) public class UserExcludedClassLoadersConfigurer implements IgnoredTypesConfigurer { - // visible for tests - static final String EXCLUDED_CLASS_LOADERS_CONFIG = "otel.javaagent.exclude-class-loaders"; - @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { - List excludedClassLoaders = config.getList(EXCLUDED_CLASS_LOADERS_CONFIG, emptyList()); + public void configure(IgnoredTypesBuilder builder) { + List excludedClassLoaders = + DeclarativeConfigUtil.getList( + GlobalOpenTelemetry.get(), "java", "agent", "exclude_class_loaders") + .orElse(emptyList()); for (String excludedClassLoader : excludedClassLoaders) { excludedClassLoader = excludedClassLoader.trim(); // remove the trailing * diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java index 44a240545b16..c99a9ff70298 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java @@ -8,20 +8,20 @@ import static java.util.Collections.emptyList; 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.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(IgnoredTypesConfigurer.class) public class UserExcludedClassesConfigurer implements IgnoredTypesConfigurer { - // visible for tests - static final String EXCLUDED_CLASSES_CONFIG = "otel.javaagent.exclude-classes"; - @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { - List excludedClasses = config.getList(EXCLUDED_CLASSES_CONFIG, emptyList()); + public void configure(IgnoredTypesBuilder builder) { + List excludedClasses = + DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "agent", "exclude_classes") + .orElse(emptyList()); for (String excludedClass : excludedClasses) { excludedClass = excludedClass.trim(); // remove the trailing * diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/IgnoredTestTypesConfigurer.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/IgnoredTestTypesConfigurer.java index 7947ea0112e4..452e788900ef 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/IgnoredTestTypesConfigurer.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/IgnoredTestTypesConfigurer.java @@ -8,13 +8,12 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @AutoService(IgnoredTypesConfigurer.class) public class IgnoredTestTypesConfigurer implements IgnoredTypesConfigurer { @Override - public void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + public void configure(IgnoredTypesBuilder builder) { // we don't want to instrument auto-generated mocks builder .ignoreClass("org.mockito") diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java index 12a799a1d000..299affd9c19a 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java @@ -59,7 +59,12 @@ private static Trie buildOtherConfiguredIgnores() { || configurer instanceof GlobalIgnoredTypesConfigurer) { continue; } - configurer.configure(builder, EmptyConfigProperties.INSTANCE); + try { + configurer.configure(builder); + } catch (UnsupportedOperationException e) { + // fall back to the deprecated method + configurer.configure(builder, EmptyConfigProperties.INSTANCE); + } } return builder.buildIgnoredTypesTrie(); } From 63cd412ddb00df1691991d9595cf5264aa1114cd Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 11:22:18 -0800 Subject: [PATCH 54/73] less ConfigProperties --- .../javaagent/DemoBootstrapPackagesProvider.java | 3 +-- .../javaagent/tooling/AgentInstaller.java | 7 ++++++- .../bootstrap/BootstrapPackagesConfigurer.java | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/examples/distro/custom/src/main/java/com/example/javaagent/DemoBootstrapPackagesProvider.java b/examples/distro/custom/src/main/java/com/example/javaagent/DemoBootstrapPackagesProvider.java index b83cd153d998..d90d6e857b85 100644 --- a/examples/distro/custom/src/main/java/com/example/javaagent/DemoBootstrapPackagesProvider.java +++ b/examples/distro/custom/src/main/java/com/example/javaagent/DemoBootstrapPackagesProvider.java @@ -8,7 +8,6 @@ import com.example.javaagent.bootstrap.AgentApi; import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesBuilder; import io.opentelemetry.javaagent.tooling.bootstrap.BootstrapPackagesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; /** * To ensure that the classes we add to bootstrap class loader are available in class loaders that @@ -20,7 +19,7 @@ public class DemoBootstrapPackagesProvider implements BootstrapPackagesConfigurer { @Override - public void configure(BootstrapPackagesBuilder builder, ConfigProperties config) { + public void configure(BootstrapPackagesBuilder builder) { builder.add(AgentApi.class.getPackage().getName()); } } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 8ffd5baa2b48..216520fb1606 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -288,7 +288,12 @@ private static void setBootstrapPackages(ClassLoader extensionClassLoader) { BootstrapPackagesBuilderImpl builder = new BootstrapPackagesBuilderImpl(); for (BootstrapPackagesConfigurer configurer : load(BootstrapPackagesConfigurer.class, extensionClassLoader)) { - configurer.configure(builder, RuntimeConfigProperties.get()); + try { + configurer.configure(builder); + } catch (UnsupportedOperationException e) { + // fall back to the deprecated method + configurer.configure(builder, RuntimeConfigProperties.get()); + } } BootstrapPackagePrefixesHolder.setBoostrapPackagePrefixes(builder.build()); } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/bootstrap/BootstrapPackagesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/bootstrap/BootstrapPackagesConfigurer.java index 30d0e56a9a8c..0f1cf9cad19b 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/bootstrap/BootstrapPackagesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/bootstrap/BootstrapPackagesConfigurer.java @@ -24,5 +24,19 @@ public interface BootstrapPackagesConfigurer { * Configure the passed {@code builder} and define which classes should always be loaded by the * bootstrap class loader. */ - void configure(BootstrapPackagesBuilder builder, ConfigProperties config); + default void configure(BootstrapPackagesBuilder builder) { + throw new UnsupportedOperationException( + "This method is not implemented. Please override this method."); + } + + /** + * Configure the passed {@code builder} and define which classes should always be loaded by the + * bootstrap class loader. + * + * @deprecated Use {@link #configure(BootstrapPackagesBuilder)} instead. + */ + @Deprecated + default void configure(BootstrapPackagesBuilder builder, ConfigProperties config) { + configure(builder); + } } From a1f14e766c6b439407033b9cd793e69dffaf80ed Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 11:40:46 -0800 Subject: [PATCH 55/73] less ConfigProperties --- .../javaagent/tooling/AgentExtension.java | 17 +++++++- .../javaagent/tooling/AgentInstaller.java | 7 +++- .../AgentTracerProviderConfigurer.java | 2 +- .../javaagent/tooling/config/AgentConfig.java | 21 ++++++---- .../InstrumentationLoader.java | 4 +- .../InstrumentationModuleInstaller.java | 26 +++++------- .../instrumentation/MuzzleMatcher.java | 14 ++++--- .../tooling/config/AgentConfigTest.java | 40 ++++++++++++++----- .../testing/bytebuddy/TestAgentExtension.java | 3 +- 9 files changed, 87 insertions(+), 47 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentExtension.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentExtension.java index 556c1bbfdf2d..bc01858612b9 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentExtension.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentExtension.java @@ -26,7 +26,22 @@ public interface AgentExtension extends Ordered { * @return The customized agent. Note that this method MUST return a non-null {@link AgentBuilder} * instance that contains all customizations defined in this extension. */ - AgentBuilder extend(AgentBuilder agentBuilder, ConfigProperties config); + default AgentBuilder extend(AgentBuilder agentBuilder) { + throw new UnsupportedOperationException( + "This method is not implemented. Please override this method."); + } + + /** + * Extend the passed {@code agentBuilder} with custom logic (e.g. instrumentation). + * + * @return The customized agent. Note that this method MUST return a non-null {@link AgentBuilder} + * instance that contains all customizations defined in this extension. + * @deprecated Use {@link #extend(AgentBuilder)} instead. + */ + @Deprecated + default AgentBuilder extend(AgentBuilder agentBuilder, ConfigProperties config) { + return extend(agentBuilder); + } /** * Returns the name of the extension. It does not have to be unique, but it should be diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 216520fb1606..6cc3942ceb8e 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -181,7 +181,12 @@ private static void installBytebuddyAgent( new Object[] {agentExtension.extensionName(), agentExtension.getClass().getName()}); } try { - agentBuilder = agentExtension.extend(agentBuilder, RuntimeConfigProperties.get()); + try { + agentBuilder = agentExtension.extend(agentBuilder); + } catch (UnsupportedOperationException e) { + // fall back to the deprecated method + agentBuilder = agentExtension.extend(agentBuilder, RuntimeConfigProperties.get()); + } numberOfLoadedExtensions++; } catch (Exception | LinkageError e) { logger.log( diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java index 4f4009038a6b..fcb2255998ef 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java @@ -48,7 +48,7 @@ private static SdkTracerProviderBuilder configure( private static void maybeEnableLoggingExporter( SdkTracerProviderBuilder builder, ConfigProperties config) { - if (AgentConfig.isDebugModeEnabled(config)) { + if (AgentConfig.isDebugModeEnabled()) { // don't install another instance if the user has already explicitly requested it. if (loggingExporterIsNotAlreadyConfigured(config)) { builder.addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java index 66ac96401612..6ed07a6315f2 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java @@ -5,24 +5,29 @@ package io.opentelemetry.javaagent.tooling.config; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; +import java.util.Optional; public final class AgentConfig { public static boolean isInstrumentationEnabled( - ConfigProperties config, Iterable instrumentationNames, boolean defaultEnabled) { + Iterable instrumentationNames, boolean defaultEnabled) { for (String name : instrumentationNames) { - String propertyName = "otel.instrumentation." + name + ".enabled"; - Boolean enabled = config.getBoolean(propertyName); - if (enabled != null) { - return enabled; + Optional enabled = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "instrumentation", name, "enabled"); + if (enabled.isPresent()) { + return enabled.get(); } } return defaultEnabled; } - public static boolean isDebugModeEnabled(ConfigProperties config) { - return config.getBoolean("otel.javaagent.debug", false); + public static boolean isDebugModeEnabled() { + return DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "agent", "debug") + .orElse(false); } private AgentConfig() {} diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java index 71d6faf68679..ff676e99b654 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java @@ -26,7 +26,7 @@ public class InstrumentationLoader implements AgentExtension { new InstrumentationModuleInstaller(InstrumentationHolder.getInstrumentation()); @Override - public AgentBuilder extend(AgentBuilder agentBuilder, ConfigProperties config) { + public AgentBuilder extend(AgentBuilder agentBuilder) { int numberOfLoadedModules = 0; for (InstrumentationModule instrumentationModule : loadOrdered(InstrumentationModule.class, Utils.getExtensionsClassLoader())) { @@ -41,7 +41,7 @@ public AgentBuilder extend(AgentBuilder agentBuilder, ConfigProperties config) { } try { agentBuilder = - instrumentationModuleInstaller.install(instrumentationModule, agentBuilder, config); + instrumentationModuleInstaller.install(instrumentationModule, agentBuilder); numberOfLoadedModules++; } catch (Exception | LinkageError e) { logger.log( 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 15e1c794a3c7..36d752848c34 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 @@ -22,6 +22,7 @@ import io.opentelemetry.javaagent.tooling.Utils; import io.opentelemetry.javaagent.tooling.bytebuddy.LoggingFailSafeMatcher; import io.opentelemetry.javaagent.tooling.config.AgentConfig; +import io.opentelemetry.javaagent.tooling.config.RuntimeConfigProperties; import io.opentelemetry.javaagent.tooling.field.VirtualFieldImplementationInstaller; import io.opentelemetry.javaagent.tooling.field.VirtualFieldImplementationInstallerFactory; import io.opentelemetry.javaagent.tooling.instrumentation.indy.ClassInjectorImpl; @@ -32,7 +33,6 @@ import io.opentelemetry.javaagent.tooling.muzzle.InstrumentationModuleMuzzle; import io.opentelemetry.javaagent.tooling.util.IgnoreFailedTypeMatcher; import io.opentelemetry.javaagent.tooling.util.NamedMatcher; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.lang.instrument.Instrumentation; import java.util.ArrayList; import java.util.Collections; @@ -64,34 +64,30 @@ public InstrumentationModuleInstaller(Instrumentation instrumentation) { } AgentBuilder install( - InstrumentationModule instrumentationModule, - AgentBuilder parentAgentBuilder, - ConfigProperties config) { + InstrumentationModule instrumentationModule, AgentBuilder parentAgentBuilder) { boolean defaultEnabled; try { defaultEnabled = instrumentationModule.defaultEnabled(); } catch (UnsupportedOperationException e) { // fall back to the deprecated method - defaultEnabled = instrumentationModule.defaultEnabled(config); + defaultEnabled = instrumentationModule.defaultEnabled(RuntimeConfigProperties.get()); } if (!AgentConfig.isInstrumentationEnabled( - config, instrumentationModule.instrumentationNames(), defaultEnabled)) { + instrumentationModule.instrumentationNames(), defaultEnabled)) { logger.log( FINE, "Instrumentation {0} is disabled", instrumentationModule.instrumentationName()); return parentAgentBuilder; } if (instrumentationModule.isIndyModule()) { - return installIndyModule(instrumentationModule, parentAgentBuilder, config); + return installIndyModule(instrumentationModule, parentAgentBuilder); } else { - return installInjectingModule(instrumentationModule, parentAgentBuilder, config); + return installInjectingModule(instrumentationModule, parentAgentBuilder); } } private AgentBuilder installIndyModule( - InstrumentationModule instrumentationModule, - AgentBuilder parentAgentBuilder, - ConfigProperties config) { + InstrumentationModule instrumentationModule, AgentBuilder parentAgentBuilder) { List helperClassNames = InstrumentationModuleMuzzle.getHelperClassNames(instrumentationModule); HelperResourceBuilderImpl helperResourceBuilder = new HelperResourceBuilderImpl(); @@ -123,7 +119,7 @@ private AgentBuilder installIndyModule( .injectClasses(injectedClassesCollector); } - MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule, config); + MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule); Function> helperGenerator = cl -> { @@ -175,9 +171,7 @@ private AgentBuilder installIndyModule( } private AgentBuilder installInjectingModule( - InstrumentationModule instrumentationModule, - AgentBuilder parentAgentBuilder, - ConfigProperties config) { + InstrumentationModule instrumentationModule, AgentBuilder parentAgentBuilder) { List helperClassNames = InstrumentationModuleMuzzle.getHelperClassNames(instrumentationModule); HelperResourceBuilderImpl helperResourceBuilder = new HelperResourceBuilderImpl(); @@ -194,7 +188,7 @@ private AgentBuilder installInjectingModule( return parentAgentBuilder; } - MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule, config); + MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule); AgentBuilder.Transformer helperInjector = new HelperInjector( instrumentationModule.instrumentationName(), diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java index fd9f84924e5f..f8b92d09a078 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java @@ -9,16 +9,16 @@ import static java.util.logging.Level.WARNING; import static net.bytebuddy.dynamic.loading.ClassLoadingStrategy.BOOTSTRAP_LOADER; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.api.internal.cache.Cache; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.tooling.TransformSafeLogger; import io.opentelemetry.javaagent.tooling.Utils; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import io.opentelemetry.javaagent.tooling.instrumentation.indy.IndyModuleRegistry; import io.opentelemetry.javaagent.tooling.instrumentation.indy.InstrumentationModuleClassLoader; import io.opentelemetry.javaagent.tooling.muzzle.Mismatch; import io.opentelemetry.javaagent.tooling.muzzle.ReferenceMatcher; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.security.ProtectionDomain; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -45,12 +45,14 @@ class MuzzleMatcher implements AgentBuilder.RawMatcher { private volatile ReferenceMatcher referenceMatcher; MuzzleMatcher( - TransformSafeLogger instrumentationLogger, - InstrumentationModule instrumentationModule, - ConfigProperties config) { + TransformSafeLogger instrumentationLogger, InstrumentationModule instrumentationModule) { this.instrumentationLogger = instrumentationLogger; this.instrumentationModule = instrumentationModule; - this.muzzleLogLevel = AgentConfig.isDebugModeEnabled(config) ? WARNING : FINE; + boolean debugMode = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "agent", "debug") + .orElse(false); + this.muzzleLogLevel = debugMode ? WARNING : FINE; } @Override diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java index 449fb5911926..3d11d87c9cbc 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java @@ -7,10 +7,12 @@ import static java.util.Arrays.asList; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; +import java.util.HashMap; +import java.util.Map; import java.util.TreeSet; import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; @@ -28,14 +30,32 @@ void testIsInstrumentationEnabled( boolean defaultEnabled, boolean expected) { - ConfigProperties config = mock(ConfigProperties.class); - when(config.getBoolean("otel.instrumentation.first.enabled")).thenReturn(firstEnabled); - when(config.getBoolean("otel.instrumentation.second.enabled")).thenReturn(secondEnabled); + Map config = new HashMap<>(); + if (firstEnabled != null) { + config.put("otel.instrumentation.first.enabled", firstEnabled.toString()); + } + if (secondEnabled != null) { + config.put("otel.instrumentation.second.enabled", secondEnabled.toString()); + } - assertEquals( - expected, - AgentConfig.isInstrumentationEnabled( - config, new TreeSet<>(asList("first", "second")), defaultEnabled)); + // Reset GlobalOpenTelemetry and configure with test properties + GlobalOpenTelemetry.resetForTest(); + OpenTelemetrySdk sdk = + AutoConfiguredOpenTelemetrySdk.builder() + .addPropertiesSupplier(() -> config) + .setResultAsGlobal() + .build() + .getOpenTelemetrySdk(); + + try { + assertEquals( + expected, + AgentConfig.isInstrumentationEnabled( + new TreeSet<>(asList("first", "second")), defaultEnabled)); + } finally { + sdk.close(); + GlobalOpenTelemetry.resetForTest(); + } } private static Stream instrumentationEnabledParams() { diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentExtension.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentExtension.java index 39955c92d012..f2a7463df333 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentExtension.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentExtension.java @@ -7,14 +7,13 @@ import com.google.auto.service.AutoService; import io.opentelemetry.javaagent.tooling.AgentExtension; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import net.bytebuddy.agent.builder.AgentBuilder; @AutoService(AgentExtension.class) public class TestAgentExtension implements AgentExtension { @Override - public AgentBuilder extend(AgentBuilder agentBuilder, ConfigProperties config) { + public AgentBuilder extend(AgentBuilder agentBuilder) { return agentBuilder.with(TestAgentListener.INSTANCE); } From a0c402061f2e7e1c8265220ac22d15338aabb20e Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 11:47:27 -0800 Subject: [PATCH 56/73] less ConfigProperties --- .../AgentTracerProviderConfigurer.java | 8 +- .../javaagent/tooling/config/AgentConfig.java | 34 ------ .../InstrumentationModuleInstaller.java | 19 +++- .../tooling/config/AgentConfigTest.java | 100 ------------------ 4 files changed, 23 insertions(+), 138 deletions(-) delete mode 100644 javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java delete mode 100644 javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java index fcb2255998ef..23356217b983 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java @@ -10,9 +10,10 @@ import com.google.auto.service.AutoService; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.exporter.logging.LoggingSpanExporter; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.thread.internal.AddThreadDetailsSpanProcessor; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -48,7 +49,10 @@ private static SdkTracerProviderBuilder configure( private static void maybeEnableLoggingExporter( SdkTracerProviderBuilder builder, ConfigProperties config) { - if (AgentConfig.isDebugModeEnabled()) { + boolean debugModeEnabled = + DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "java", "agent", "debug") + .orElse(false); + if (debugModeEnabled) { // don't install another instance if the user has already explicitly requested it. if (loggingExporterIsNotAlreadyConfigured(config)) { builder.addSpanProcessor(SimpleSpanProcessor.create(LoggingSpanExporter.create())); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java deleted file mode 100644 index 6ed07a6315f2..000000000000 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/AgentConfig.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.tooling.config; - -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; -import java.util.Optional; - -public final class AgentConfig { - - public static boolean isInstrumentationEnabled( - Iterable instrumentationNames, boolean defaultEnabled) { - for (String name : instrumentationNames) { - Optional enabled = - DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "instrumentation", name, "enabled"); - if (enabled.isPresent()) { - return enabled.get(); - } - } - return defaultEnabled; - } - - public static boolean isDebugModeEnabled() { - return DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "agent", "debug") - .orElse(false); - } - - private AgentConfig() {} -} 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 36d752848c34..9f967b825122 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 @@ -21,7 +21,6 @@ import io.opentelemetry.javaagent.tooling.TransformSafeLogger; import io.opentelemetry.javaagent.tooling.Utils; import io.opentelemetry.javaagent.tooling.bytebuddy.LoggingFailSafeMatcher; -import io.opentelemetry.javaagent.tooling.config.AgentConfig; import io.opentelemetry.javaagent.tooling.config.RuntimeConfigProperties; import io.opentelemetry.javaagent.tooling.field.VirtualFieldImplementationInstaller; import io.opentelemetry.javaagent.tooling.field.VirtualFieldImplementationInstallerFactory; @@ -33,10 +32,13 @@ import io.opentelemetry.javaagent.tooling.muzzle.InstrumentationModuleMuzzle; import io.opentelemetry.javaagent.tooling.util.IgnoreFailedTypeMatcher; import io.opentelemetry.javaagent.tooling.util.NamedMatcher; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.lang.instrument.Instrumentation; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; import net.bytebuddy.agent.builder.AgentBuilder; @@ -72,7 +74,7 @@ AgentBuilder install( // fall back to the deprecated method defaultEnabled = instrumentationModule.defaultEnabled(RuntimeConfigProperties.get()); } - if (!AgentConfig.isInstrumentationEnabled( + if (!isInstrumentationEnabled( instrumentationModule.instrumentationNames(), defaultEnabled)) { logger.log( FINE, "Instrumentation {0} is disabled", instrumentationModule.instrumentationName()); @@ -271,4 +273,17 @@ private static AgentBuilder.Identified.Narrowable setTypeMatcher( (typeDescription, classLoader, module, classBeingRedefined, protectionDomain) -> classLoader == null || NOT_DECORATOR_MATCHER.matches(typeDescription)); } + + private static boolean isInstrumentationEnabled( + Iterable instrumentationNames, boolean defaultEnabled) { + for (String name : instrumentationNames) { + Optional enabled = + DeclarativeConfigUtil.getBoolean( + GlobalOpenTelemetry.get(), "java", "instrumentation", name, "enabled"); + if (enabled.isPresent()) { + return enabled.get(); + } + } + return defaultEnabled; + } } diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java deleted file mode 100644 index 3d11d87c9cbc..000000000000 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/AgentConfigTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.javaagent.tooling.config; - -import static java.util.Arrays.asList; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; -import java.util.HashMap; -import java.util.Map; -import java.util.TreeSet; -import java.util.stream.Stream; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; - -class AgentConfigTest { - - @ParameterizedTest(name = "isInstrumentationEnabled({0}) = {4}") - @MethodSource("instrumentationEnabledParams") - void testIsInstrumentationEnabled( - @SuppressWarnings("unused") String description, - Boolean firstEnabled, - Boolean secondEnabled, - boolean defaultEnabled, - boolean expected) { - - Map config = new HashMap<>(); - if (firstEnabled != null) { - config.put("otel.instrumentation.first.enabled", firstEnabled.toString()); - } - if (secondEnabled != null) { - config.put("otel.instrumentation.second.enabled", secondEnabled.toString()); - } - - // Reset GlobalOpenTelemetry and configure with test properties - GlobalOpenTelemetry.resetForTest(); - OpenTelemetrySdk sdk = - AutoConfiguredOpenTelemetrySdk.builder() - .addPropertiesSupplier(() -> config) - .setResultAsGlobal() - .build() - .getOpenTelemetrySdk(); - - try { - assertEquals( - expected, - AgentConfig.isInstrumentationEnabled( - new TreeSet<>(asList("first", "second")), defaultEnabled)); - } finally { - sdk.close(); - GlobalOpenTelemetry.resetForTest(); - } - } - - private static Stream instrumentationEnabledParams() { - return Stream.of( - Arguments.of( - "enabled by default, both instrumentations are off", false, false, true, false), - Arguments.of("enabled by default, first instrumentation is on", true, null, true, true), - Arguments.of("enabled by default, second instrumentation is on", null, true, true, true), - Arguments.of("enabled by default, both instrumentations are on", true, true, true, true), - Arguments.of( - "enabled by default, first instrumentation is off, second is on", - false, - true, - true, - false), - Arguments.of( - "enabled by default, first instrumentation is on, second is off", - true, - false, - true, - true), - Arguments.of("enabled by default", null, null, true, true), - Arguments.of( - "disabled by default, both instrumentations are off", false, false, false, false), - Arguments.of("disabled by default, first instrumentation is on", true, null, false, true), - Arguments.of("disabled by default, second instrumentation is on", null, true, false, true), - Arguments.of("disabled by default, both instrumentation are on", true, true, false, true), - Arguments.of( - "disabled by default, first instrumentation is off, second is on", - false, - true, - false, - false), - Arguments.of( - "disabled by default, first instrumentation is on, second is off", - true, - false, - false, - true), - Arguments.of("disabled by default", null, null, false, false)); - } -} From 5892d5c47f6362f08b331bad8b45e33349939214 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 12:04:23 -0800 Subject: [PATCH 57/73] less ConfigProperties --- .../UserExcludedClassLoadersConfigurer.java | 5 +++++ .../ignore/UserExcludedClassesConfigurer.java | 8 +++++++- ...UserExcludedClassLoadersConfigurerTest.java | 18 +++++------------- .../UserExcludedClassesConfigurerTest.java | 18 +++++------------- 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java index 34b7f6f7b23a..60be6ea03f68 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurer.java @@ -23,6 +23,11 @@ public void configure(IgnoredTypesBuilder builder) { DeclarativeConfigUtil.getList( GlobalOpenTelemetry.get(), "java", "agent", "exclude_class_loaders") .orElse(emptyList()); + configureInternal(builder, excludedClassLoaders); + } + + // Visible for testing + void configureInternal(IgnoredTypesBuilder builder, List excludedClassLoaders) { for (String excludedClassLoader : excludedClassLoaders) { excludedClassLoader = excludedClassLoader.trim(); // remove the trailing * diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java index c99a9ff70298..e6d34da50386 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java @@ -9,6 +9,7 @@ import com.google.auto.service.AutoService; import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; @@ -20,8 +21,13 @@ public class UserExcludedClassesConfigurer implements IgnoredTypesConfigurer { @Override public void configure(IgnoredTypesBuilder builder) { List excludedClasses = - DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "agent", "exclude_classes") + DeclarativeConfigUtil.getList(openTelemetry, "java", "agent", "exclude_classes") .orElse(emptyList()); + configureInternal(builder, excludedClasses); + } + + // Visible for testing + void configureInternal(IgnoredTypesBuilder builder, List excludedClasses) { for (String excludedClass : excludedClasses) { excludedClass = excludedClass.trim(); // remove the trailing * diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java index 166b702b98d3..ecd6cbce0b96 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java @@ -5,16 +5,12 @@ package io.opentelemetry.javaagent.tooling.ignore; -import static io.opentelemetry.javaagent.tooling.ignore.UserExcludedClassLoadersConfigurer.EXCLUDED_CLASS_LOADERS_CONFIG; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; -import static org.mockito.Mockito.when; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; -import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -23,15 +19,14 @@ @ExtendWith(MockitoExtension.class) class UserExcludedClassLoadersConfigurerTest { - @Mock ConfigProperties config; @Mock IgnoredTypesBuilder builder; - IgnoredTypesConfigurer underTest = new UserExcludedClassLoadersConfigurer(); + UserExcludedClassLoadersConfigurer underTest = new UserExcludedClassLoadersConfigurer(); @Test void shouldAddNothingToBuilderWhenPropertyIsEmpty() { // when - underTest.configure(builder, config); + underTest.configureInternal(builder, emptyList()); // then verifyNoInteractions(builder); @@ -39,13 +34,10 @@ void shouldAddNothingToBuilderWhenPropertyIsEmpty() { @Test void shouldIgnoreClassesAndPackages() { - // given - when(config.getList(EXCLUDED_CLASS_LOADERS_CONFIG, emptyList())) - .thenReturn( - asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); - // when - underTest.configure(builder, config); + underTest.configureInternal( + builder, + asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); // then verify(builder).ignoreClassLoader("com.example.IgnoredClass"); diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java index f67d015cbf4b..d24453c78679 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java @@ -5,16 +5,12 @@ package io.opentelemetry.javaagent.tooling.ignore; -import static io.opentelemetry.javaagent.tooling.ignore.UserExcludedClassesConfigurer.EXCLUDED_CLASSES_CONFIG; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; -import static org.mockito.Mockito.when; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; -import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -23,15 +19,14 @@ @ExtendWith(MockitoExtension.class) class UserExcludedClassesConfigurerTest { - @Mock ConfigProperties config; @Mock IgnoredTypesBuilder builder; - IgnoredTypesConfigurer underTest = new UserExcludedClassesConfigurer(); + UserExcludedClassesConfigurer underTest = new UserExcludedClassesConfigurer(); @Test void shouldAddNothingToBuilderWhenPropertyIsEmpty() { // when - underTest.configure(builder, config); + underTest.configureInternal(builder, emptyList()); // then verifyNoInteractions(builder); @@ -39,13 +34,10 @@ void shouldAddNothingToBuilderWhenPropertyIsEmpty() { @Test void shouldIgnoreClassesAndPackages() { - // given - when(config.getList(EXCLUDED_CLASSES_CONFIG, emptyList())) - .thenReturn( - asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); - // when - underTest.configure(builder, config); + underTest.configureInternal( + builder, + asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); // then verify(builder).ignoreClass("com.example.IgnoredClass"); From a221e953ed965a89643ab17014ebf768c7b6432b Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 12:16:42 -0800 Subject: [PATCH 58/73] spotless --- .../tooling/ignore/UserExcludedClassesConfigurer.java | 2 -- .../tooling/instrumentation/InstrumentationLoader.java | 4 +--- .../instrumentation/InstrumentationModuleInstaller.java | 7 +++---- .../javaagent/tooling/instrumentation/MuzzleMatcher.java | 3 +-- .../ignore/UserExcludedClassLoadersConfigurerTest.java | 3 +-- .../tooling/ignore/UserExcludedClassesConfigurerTest.java | 3 +-- 6 files changed, 7 insertions(+), 15 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java index e6d34da50386..a90246c73f3d 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java @@ -8,8 +8,6 @@ import static java.util.Collections.emptyList; import com.google.auto.service.AutoService; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java index ff676e99b654..0558669a23bb 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/InstrumentationLoader.java @@ -14,7 +14,6 @@ import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.tooling.AgentExtension; import io.opentelemetry.javaagent.tooling.Utils; -import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.util.logging.Logger; import net.bytebuddy.agent.builder.AgentBuilder; @@ -40,8 +39,7 @@ public AgentBuilder extend(AgentBuilder agentBuilder) { }); } try { - agentBuilder = - instrumentationModuleInstaller.install(instrumentationModule, agentBuilder); + agentBuilder = instrumentationModuleInstaller.install(instrumentationModule, agentBuilder); numberOfLoadedModules++; } catch (Exception | LinkageError e) { logger.log( 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 9f967b825122..e91fc53870e3 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 @@ -11,6 +11,8 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; +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.extension.instrumentation.internal.ExperimentalInstrumentationModule; @@ -32,8 +34,6 @@ import io.opentelemetry.javaagent.tooling.muzzle.InstrumentationModuleMuzzle; import io.opentelemetry.javaagent.tooling.util.IgnoreFailedTypeMatcher; import io.opentelemetry.javaagent.tooling.util.NamedMatcher; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.lang.instrument.Instrumentation; import java.util.ArrayList; import java.util.Collections; @@ -74,8 +74,7 @@ AgentBuilder install( // fall back to the deprecated method defaultEnabled = instrumentationModule.defaultEnabled(RuntimeConfigProperties.get()); } - if (!isInstrumentationEnabled( - instrumentationModule.instrumentationNames(), defaultEnabled)) { + if (!isInstrumentationEnabled(instrumentationModule.instrumentationNames(), defaultEnabled)) { logger.log( FINE, "Instrumentation {0} is disabled", instrumentationModule.instrumentationName()); return parentAgentBuilder; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java index f8b92d09a078..8b299abab7c7 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/MuzzleMatcher.java @@ -49,8 +49,7 @@ class MuzzleMatcher implements AgentBuilder.RawMatcher { this.instrumentationLogger = instrumentationLogger; this.instrumentationModule = instrumentationModule; boolean debugMode = - DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "agent", "debug") + DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "java", "agent", "debug") .orElse(false); this.muzzleLogLevel = debugMode ? WARNING : FINE; } diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java index ecd6cbce0b96..38a9bcca606c 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassLoadersConfigurerTest.java @@ -36,8 +36,7 @@ void shouldAddNothingToBuilderWhenPropertyIsEmpty() { void shouldIgnoreClassesAndPackages() { // when underTest.configureInternal( - builder, - asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); + builder, asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); // then verify(builder).ignoreClassLoader("com.example.IgnoredClass"); diff --git a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java index d24453c78679..095135f97912 100644 --- a/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java +++ b/javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurerTest.java @@ -36,8 +36,7 @@ void shouldAddNothingToBuilderWhenPropertyIsEmpty() { void shouldIgnoreClassesAndPackages() { // when underTest.configureInternal( - builder, - asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); + builder, asList("com.example.IgnoredClass", "com.example.ignored.*", "com.another_ignore")); // then verify(builder).ignoreClass("com.example.IgnoredClass"); From 9c67113c8ce6c2c97ddf7ce38bab9f81366bd9ef Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 13:05:55 -0800 Subject: [PATCH 59/73] Fix compilation errors and formatting issues - Fix RuntimeConfigProperties to use EmptyConfigProperties.INSTANCE instead of new - Make deprecated configure() method default in IgnoredTypesConfigurer interface - Migrate IgnoredTypesConfigurer implementations to use DeclarativeConfigUtil with GlobalOpenTelemetry - Add @SuppressWarnings with explanatory comments for deprecated API usage in fallback paths - Fix spotless formatting in OpenTelemetryAutoConfiguration --- CI-PLAN.md | 47 +++++++++++++------ .../OpenTelemetryAutoConfiguration.java | 3 +- .../ignore/IgnoredTypesConfigurer.java | 3 +- .../javaagent/tooling/AgentInstaller.java | 8 +++- .../config/RuntimeConfigProperties.java | 3 +- .../ignore/UserExcludedClassesConfigurer.java | 3 +- .../InstrumentationModuleInstaller.java | 2 + 7 files changed, 49 insertions(+), 20 deletions(-) diff --git a/CI-PLAN.md b/CI-PLAN.md index 47764dbfb452..398411aab7b9 100644 --- a/CI-PLAN.md +++ b/CI-PLAN.md @@ -1,23 +1,42 @@ # CI Failure Analysis Plan ## Failed Jobs Summary -- Multiple test jobs (test0, test1, test2, test3 across Java 8, 11, 17, 21, 25 with various indy settings) -- testLatestDeps jobs (0, 1, 2, 3) + +- Job: common / spotless (job ID: 57983607252) +- Job: common / build (job ID: 57983607261) +- Job: Analyze (java) (job ID: 57983599428) +- Job: markdown-lint-check / markdown-lint-check (job ID: 57983607254) +- Multiple test jobs (test0, test1, test2, test3) across different Java versions +- Multiple smoke-test jobs +- common / examples +- testLatestDeps (0-3) +- muzzle (1-4) ## Unique Failed Gradle Tasks -- [ ] Task: :instrumentation-api-incubator:javaagent-testing:test - - Seen in: test1 (Java 8, indy false) - - Log files: /tmp/test1-java8-indy-false.log - - Failure: Test assertions failing for http.response.body.size attribute +- [x] Task: :instrumentation:spring:spring-boot-autoconfigure:spotlessJavaCheck + - Seen in: common / spotless, common / build + - Log files: /tmp/spotless.log, /tmp/build.log + - Issue: Format violation in OpenTelemetryAutoConfiguration.java + - Fix: Ran spotlessApply to fix formatting + +- [x] Task: :javaagent-tooling:compileJava + - Seen in: common / build, all test jobs, all smoke-test jobs, examples, testLatestDeps, muzzle + - Log files: /tmp/build.log, /tmp/test0-java8.log, /tmp/examples.log + - Issue: Compilation errors - cannot find symbol EmptyConfigProperties, and IgnoredTypesConfigurer implementations missing required method + - Fix: + - Fixed EmptyConfigProperties instantiation to use INSTANCE instead of new + - Made deprecated configure(builder, config) method default in IgnoredTypesConfigurer + - Updated IgnoredTypesConfigurer implementations to use deprecated method when config is needed + - Added @SuppressWarnings("deprecation") with comments to all deprecated API usage -- [ ] Task: :smoke-tests-otel-starter:spring-boot-2:testDeclarativeConfig - - Seen in: test1 (Java 8, indy false) - - Log files: /tmp/test1-java8-indy-false.log - - Failure: 6 tests failed - AssertionError for [LONG attribute 'http.response.body.size'] - Expecting actual not to be null +- [ ] Task: markdown-lint-check + - Seen in: markdown-lint-check / markdown-lint-check + - Log files: /tmp/markdown-lint.log + - Issue: CI-PLAN.md format violations (will be fixed by not committing this file) ## Notes -- All failures appear related to missing `http.response.body.size` attribute in test assertions -- The attribute is expected to be present in HTTP spans but is null -- This is likely related to the declarative-configuration-bridge changes -- Both regular instrumentation API tests and Spring Boot smoke tests are affected + +- All failures appear related to the declarative-configuration-bridge changes +- The compilation error in javaagent-tooling is the root cause blocking all downstream jobs +- Need to fix: EmptyConfigProperties missing class and IgnoredTypesConfigurer interface changes diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java index c7a4d6c35f23..b98ae1b0a582 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/OpenTelemetryAutoConfiguration.java @@ -165,8 +165,7 @@ public OpenTelemetryConfigurationModel openTelemetryConfigurationModel( @Bean public OpenTelemetry openTelemetry( - OpenTelemetryConfigurationModel model, - ApplicationContext applicationContext) { + OpenTelemetryConfigurationModel model, ApplicationContext applicationContext) { ExtendedOpenTelemetrySdk sdk = DeclarativeConfiguration.create( model, new OpenTelemetrySdkComponentLoader(applicationContext)); diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java index 26561d30cf44..8e7dac12ffb9 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java @@ -33,5 +33,6 @@ default void configure(IgnoredTypesBuilder builder) { * @deprecated Use {@link #configure(IgnoredTypesBuilder)} instead. */ @Deprecated - void configure(IgnoredTypesBuilder builder, ConfigProperties config); + default void configure(IgnoredTypesBuilder builder, ConfigProperties config) { + } } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 6cc3942ceb8e..97f356e99763 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -185,7 +185,9 @@ private static void installBytebuddyAgent( agentBuilder = agentExtension.extend(agentBuilder); } catch (UnsupportedOperationException e) { // fall back to the deprecated method - agentBuilder = agentExtension.extend(agentBuilder, RuntimeConfigProperties.get()); + @SuppressWarnings("deprecation") + AgentBuilder extended = agentExtension.extend(agentBuilder, RuntimeConfigProperties.get()); + agentBuilder = extended; } numberOfLoadedExtensions++; } catch (Exception | LinkageError e) { @@ -289,6 +291,8 @@ private static void copyNecessaryConfigToSystemProperties() { "otel.instrumentation.experimental.span-suppression-strategy", value)); } + // Need to call deprecated API for backward compatibility with extensions that haven't migrated + @SuppressWarnings("deprecation") private static void setBootstrapPackages(ClassLoader extensionClassLoader) { BootstrapPackagesBuilderImpl builder = new BootstrapPackagesBuilderImpl(); for (BootstrapPackagesConfigurer configurer : @@ -307,6 +311,8 @@ private static void setDefineClassHandler() { DefineClassHelper.internalSetHandler(DefineClassHandler.INSTANCE); } + // Need to call deprecated API for backward compatibility with extensions that haven't migrated + @SuppressWarnings("deprecation") private static AgentBuilder configureIgnoredTypes( ClassLoader extensionClassLoader, AgentBuilder agentBuilder) { IgnoredTypesBuilderImpl builder = new IgnoredTypesBuilderImpl(); diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java index f567ba3e6dc9..47ab86297933 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/RuntimeConfigProperties.java @@ -5,12 +5,13 @@ package io.opentelemetry.javaagent.tooling.config; +import io.opentelemetry.javaagent.tooling.EmptyConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import javax.annotation.Nullable; public final class RuntimeConfigProperties { - @Nullable private static volatile ConfigProperties instance = new EmptyConfigProperties(); + @Nullable private static volatile ConfigProperties instance = EmptyConfigProperties.INSTANCE; public static void set(ConfigProperties configProperties) { instance = configProperties; diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java index a90246c73f3d..85401795349a 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/ignore/UserExcludedClassesConfigurer.java @@ -8,6 +8,7 @@ import static java.util.Collections.emptyList; 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.ignore.IgnoredTypesBuilder; import io.opentelemetry.javaagent.extension.ignore.IgnoredTypesConfigurer; @@ -19,7 +20,7 @@ public class UserExcludedClassesConfigurer implements IgnoredTypesConfigurer { @Override public void configure(IgnoredTypesBuilder builder) { List excludedClasses = - DeclarativeConfigUtil.getList(openTelemetry, "java", "agent", "exclude_classes") + DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "agent", "exclude_classes") .orElse(emptyList()); configureInternal(builder, excludedClasses); } 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 e91fc53870e3..510962e53a63 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 @@ -65,6 +65,8 @@ 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) { boolean defaultEnabled; From 2c83ae83e2dc938d1092d13e3a76bfa6f7f28ce0 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 13:25:36 -0800 Subject: [PATCH 60/73] spotless --- .../javaagent/extension/ignore/IgnoredTypesConfigurer.java | 3 +-- .../io/opentelemetry/javaagent/tooling/AgentInstaller.java | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java index 8e7dac12ffb9..b68a005f0633 100644 --- a/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java +++ b/javaagent-extension-api/src/main/java/io/opentelemetry/javaagent/extension/ignore/IgnoredTypesConfigurer.java @@ -33,6 +33,5 @@ default void configure(IgnoredTypesBuilder builder) { * @deprecated Use {@link #configure(IgnoredTypesBuilder)} instead. */ @Deprecated - default void configure(IgnoredTypesBuilder builder, ConfigProperties config) { - } + default void configure(IgnoredTypesBuilder builder, ConfigProperties config) {} } diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java index 97f356e99763..bb8cddaa7ebc 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentInstaller.java @@ -186,7 +186,8 @@ private static void installBytebuddyAgent( } catch (UnsupportedOperationException e) { // fall back to the deprecated method @SuppressWarnings("deprecation") - AgentBuilder extended = agentExtension.extend(agentBuilder, RuntimeConfigProperties.get()); + AgentBuilder extended = + agentExtension.extend(agentBuilder, RuntimeConfigProperties.get()); agentBuilder = extended; } numberOfLoadedExtensions++; From 147d2d983553a3020c29be9322049eb4b7010c6d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 13:31:12 -0800 Subject: [PATCH 61/73] fix --- .../autoconfigure/EmbeddedConfigFileTest.java | 16 ++++++++-------- .../testing/bytebuddy/TestAgentListener.java | 6 ++++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFileTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFileTest.java index 2396a1147ad3..201fda267d22 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFileTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFileTest.java @@ -16,7 +16,7 @@ class EmbeddedConfigFileTest { @Test void convertFlatPropsToNested_simpleProperties() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); flatProps.put("resource.service.name", "my-service"); flatProps.put("traces.exporter", "otlp"); @@ -55,7 +55,7 @@ void convertFlatPropsToNested_simpleProperties() { @Test void convertFlatPropsToNested_arrayProperties() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); flatProps.put("instrumentation.java.list[0]", "one"); flatProps.put("instrumentation.java.list[1]", "two"); flatProps.put("instrumentation.java.list[2]", "three"); @@ -89,7 +89,7 @@ void convertFlatPropsToNested_arrayProperties() { @Test void convertFlatPropsToNested_mixedPropertiesAndArrays() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); flatProps.put("resource.service.name", "test-service"); flatProps.put("resource.attributes[0]", "key1=value1"); flatProps.put("resource.attributes[1]", "key2=value2"); @@ -124,7 +124,7 @@ void convertFlatPropsToNested_mixedPropertiesAndArrays() { @Test void convertFlatPropsToNested_emptyMap() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); Map result = EmbeddedConfigFile.convertFlatPropsToNested(flatProps); @@ -133,7 +133,7 @@ void convertFlatPropsToNested_emptyMap() { @Test void convertFlatPropsToNested_singleLevelProperty() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); flatProps.put("enabled", "true"); Map result = EmbeddedConfigFile.convertFlatPropsToNested(flatProps); @@ -143,7 +143,7 @@ void convertFlatPropsToNested_singleLevelProperty() { @Test void convertFlatPropsToNested_arrayWithGaps() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); flatProps.put("list[0]", "first"); flatProps.put("list[2]", "third"); @@ -161,7 +161,7 @@ void convertFlatPropsToNested_arrayWithGaps() { @Test void convertFlatPropsToNested_deeplyNestedProperties() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); flatProps.put("a.b.c.d.e", "deep-value"); Map result = EmbeddedConfigFile.convertFlatPropsToNested(flatProps); @@ -183,7 +183,7 @@ void convertFlatPropsToNested_deeplyNestedProperties() { @Test void convertFlatPropsToNested_nestedArrays() { - Map flatProps = new HashMap<>(); + Map flatProps = new HashMap<>(); flatProps.put("outer[0].inner[0]", "value1"); flatProps.put("outer[0].inner[1]", "value2"); flatProps.put("outer[1].inner[0]", "value3"); diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java index 299affd9c19a..249536b304a4 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java @@ -62,8 +62,10 @@ private static Trie buildOtherConfiguredIgnores() { try { configurer.configure(builder); } catch (UnsupportedOperationException e) { - // fall back to the deprecated method - configurer.configure(builder, EmptyConfigProperties.INSTANCE); + // fall back to the deprecated method for backwards compatibility with old extensions + @SuppressWarnings("deprecation") + Runnable callDeprecated = () -> configurer.configure(builder, EmptyConfigProperties.INSTANCE); + callDeprecated.run(); } } return builder.buildIgnoredTypesTrie(); From a64785922971f5bb2a0cfe2c88d7563d6c3c9628 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 13:33:55 -0800 Subject: [PATCH 62/73] up --- CI-PLAN.md | 42 ------------------------------------------ 1 file changed, 42 deletions(-) delete mode 100644 CI-PLAN.md diff --git a/CI-PLAN.md b/CI-PLAN.md deleted file mode 100644 index 398411aab7b9..000000000000 --- a/CI-PLAN.md +++ /dev/null @@ -1,42 +0,0 @@ -# CI Failure Analysis Plan - -## Failed Jobs Summary - -- Job: common / spotless (job ID: 57983607252) -- Job: common / build (job ID: 57983607261) -- Job: Analyze (java) (job ID: 57983599428) -- Job: markdown-lint-check / markdown-lint-check (job ID: 57983607254) -- Multiple test jobs (test0, test1, test2, test3) across different Java versions -- Multiple smoke-test jobs -- common / examples -- testLatestDeps (0-3) -- muzzle (1-4) - -## Unique Failed Gradle Tasks - -- [x] Task: :instrumentation:spring:spring-boot-autoconfigure:spotlessJavaCheck - - Seen in: common / spotless, common / build - - Log files: /tmp/spotless.log, /tmp/build.log - - Issue: Format violation in OpenTelemetryAutoConfiguration.java - - Fix: Ran spotlessApply to fix formatting - -- [x] Task: :javaagent-tooling:compileJava - - Seen in: common / build, all test jobs, all smoke-test jobs, examples, testLatestDeps, muzzle - - Log files: /tmp/build.log, /tmp/test0-java8.log, /tmp/examples.log - - Issue: Compilation errors - cannot find symbol EmptyConfigProperties, and IgnoredTypesConfigurer implementations missing required method - - Fix: - - Fixed EmptyConfigProperties instantiation to use INSTANCE instead of new - - Made deprecated configure(builder, config) method default in IgnoredTypesConfigurer - - Updated IgnoredTypesConfigurer implementations to use deprecated method when config is needed - - Added @SuppressWarnings("deprecation") with comments to all deprecated API usage - -- [ ] Task: markdown-lint-check - - Seen in: markdown-lint-check / markdown-lint-check - - Log files: /tmp/markdown-lint.log - - Issue: CI-PLAN.md format violations (will be fixed by not committing this file) - -## Notes - -- All failures appear related to the declarative-configuration-bridge changes -- The compilation error in javaagent-tooling is the root cause blocking all downstream jobs -- Need to fix: EmptyConfigProperties missing class and IgnoredTypesConfigurer interface changes From 4595bc8c37b64483dbd7d6d476af75ed658a602a Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 13:55:17 -0800 Subject: [PATCH 63/73] Fix spotless formatting in TestAgentListener --- .../javaagent/testing/bytebuddy/TestAgentListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java index 249536b304a4..c99e53a5a52c 100644 --- a/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java +++ b/testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/bytebuddy/TestAgentListener.java @@ -64,7 +64,8 @@ private static Trie buildOtherConfiguredIgnores() { } catch (UnsupportedOperationException e) { // fall back to the deprecated method for backwards compatibility with old extensions @SuppressWarnings("deprecation") - Runnable callDeprecated = () -> configurer.configure(builder, EmptyConfigProperties.INSTANCE); + Runnable callDeprecated = + () -> configurer.configure(builder, EmptyConfigProperties.INSTANCE); callDeprecated.run(); } } From 5668336dbb91b2f255f56e4ccbae4b0401668137 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 14:09:26 -0800 Subject: [PATCH 64/73] Fix GlobalOpenTelemetry.set already called error The issue was that AgentTracerProviderConfigurer.maybeEnableLoggingExporter() was calling GlobalOpenTelemetry.get() during SDK configuration, which caused GlobalOpenTelemetry to auto-initialize before the agent could call GlobalOpenTelemetry.set(). Changed to use the ConfigProperties parameter that is already available, reading otel.javaagent.debug directly from config instead of using DeclarativeConfigUtil with GlobalOpenTelemetry.get(). --- .../javaagent/tooling/AgentTracerProviderConfigurer.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java index 23356217b983..63d7574b7667 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/AgentTracerProviderConfigurer.java @@ -10,9 +10,7 @@ import com.google.auto.service.AutoService; import com.google.errorprone.annotations.CanIgnoreReturnValue; -import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.exporter.logging.LoggingSpanExporter; -import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.instrumentation.thread.internal.AddThreadDetailsSpanProcessor; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; @@ -49,9 +47,7 @@ private static SdkTracerProviderBuilder configure( private static void maybeEnableLoggingExporter( SdkTracerProviderBuilder builder, ConfigProperties config) { - boolean debugModeEnabled = - DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "java", "agent", "debug") - .orElse(false); + boolean debugModeEnabled = config.getBoolean("otel.javaagent.debug", false); if (debugModeEnabled) { // don't install another instance if the user has already explicitly requested it. if (loggingExporterIsNotAlreadyConfigured(config)) { From 658104e0a9a0219e977fa34e2521e122fbf2458d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 14:37:27 -0800 Subject: [PATCH 65/73] Fix ApplicationLoggerBridge initialization error The ApplicationLoggingInstrumentationModule.defaultEnabled() method was using GlobalOpenTelemetry.get() to check if the application logger is enabled, but this happens very early during agent startup before GlobalOpenTelemetry is set up. At that point, GlobalOpenTelemetry.get() returns a noop instance that doesn't have the config, causing the instrumentation to incorrectly apply to classloaders where ApplicationLoggerBridge.set() was never called. Reverted to using ConfigProperties which is available earlier during agent initialization and correctly checks the otel.javaagent.logging property. --- .../ApplicationLoggingInstrumentationModule.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 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 365b54a2c564..d3c1b1352198 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,10 +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.sdk.autoconfigure.spi.ConfigProperties; import java.util.List; @AutoService(InstrumentationModule.class) @@ -21,13 +20,15 @@ public ApplicationLoggingInstrumentationModule() { super("internal-application-logger"); } + // This module needs to use ConfigProperties (not GlobalOpenTelemetry) because its enabled check + // runs very early during agent startup, before GlobalOpenTelemetry is set up. At that point, + // GlobalOpenTelemetry.get() would return a noop instance that doesn't have the config. + @SuppressWarnings("deprecation") @Override - public boolean defaultEnabled() { + public boolean defaultEnabled(ConfigProperties config) { // only enable this instrumentation if the application logger is enabled - return super.defaultEnabled() - && DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "agent", "logging") - .map(value -> "application".equals(value)) - .orElse(false); + return super.defaultEnabled(config) + && "application".equals(config.getString("otel.javaagent.logging")); } @Override From 793bd1aaff170440cd5368cb1e626aee0181f5a9 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 15:14:10 -0800 Subject: [PATCH 66/73] fix --- ...plicationLoggingInstrumentationModule.java | 24 ++++++++++++------- .../v1_0/JaxrsInstrumentationModule.java | 11 ++++++++- ...JaxrsAnnotationsInstrumentationModule.java | 11 ++++++++- ...JaxrsAnnotationsInstrumentationModule.java | 11 ++++++++- .../jws/v1_1/JwsInstrumentationModule.java | 11 ++++++++- ...ityConfigServletInstrumentationModule.java | 11 ++++++++- ...ityConfigWebFluxInstrumentationModule.java | 11 ++++++++- .../v2_0/SpringWsInstrumentationModule.java | 11 ++++++++- 8 files changed, 86 insertions(+), 15 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 d3c1b1352198..2d4fd07a8146 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) @@ -20,15 +21,22 @@ public ApplicationLoggingInstrumentationModule() { super("internal-application-logger"); } - // This module needs to use ConfigProperties (not GlobalOpenTelemetry) because its enabled check - // runs very early during agent startup, before GlobalOpenTelemetry is set up. At that point, - // GlobalOpenTelemetry.get() would return a noop instance that doesn't have the config. - @SuppressWarnings("deprecation") @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")); + return superDefaultEnabled() + && DeclarativeConfigUtil.getString(GlobalOpenTelemetry.get(), "java", "agent", "logging") + .map(value -> "application".equals(value)) + .orElse(false); + } + + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); } @Override 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 1b3a9c6a9820..7c1fe5efc057 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,7 +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 super.defaultEnabled() + return superDefaultEnabled() && DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", @@ -51,6 +51,15 @@ public boolean defaultEnabled() { .orElse(false); } + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); + } + @Override public boolean isIndyReady() { return true; 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 05119e952362..52989b95563e 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,7 +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 super.defaultEnabled() + return superDefaultEnabled() && DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", @@ -54,6 +54,15 @@ public boolean defaultEnabled() { .orElse(false); } + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); + } + @Override public boolean isIndyReady() { return true; 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 042176697cc7..8443cd18e715 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,7 +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 super.defaultEnabled() + return superDefaultEnabled() && DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", @@ -54,6 +54,15 @@ public boolean defaultEnabled() { .orElse(false); } + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); + } + @Override public boolean isIndyReady() { return true; 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 dd4919f86e93..080b8b796901 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,7 +30,7 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return super.defaultEnabled() + return superDefaultEnabled() && DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", @@ -40,6 +40,15 @@ public boolean defaultEnabled() { .orElse(false); } + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); + } + @Override public boolean isIndyReady() { return true; 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 3c535ff1a45a..5fd7b743eea0 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 super.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 +42,15 @@ public boolean defaultEnabled() { && isAnyEnduserAttributeEnabled(); } + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); + } + private static boolean isAnyEnduserAttributeEnabled() { var otel = GlobalOpenTelemetry.get(); return DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "id", "enabled") 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 80ff556e3065..22ece73d7241 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 super.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 +39,15 @@ public boolean defaultEnabled() { && isAnyEnduserAttributeEnabled(); } + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); + } + private static boolean isAnyEnduserAttributeEnabled() { var otel = GlobalOpenTelemetry.get(); return DeclarativeConfigUtil.getBoolean(otel, "java", "common", "enduser", "id", "enabled") 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 88487e3be5a4..75270afce189 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,7 +29,7 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { // this instrumentation only produces controller telemetry - return super.defaultEnabled() + return superDefaultEnabled() && DeclarativeConfigUtil.getBoolean( GlobalOpenTelemetry.get(), "java", @@ -39,6 +39,15 @@ public boolean defaultEnabled() { .orElse(false); } + // 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.getBoolean( + GlobalOpenTelemetry.get(), "java", "common", "default_enabled") + .orElse(true); + } + @Override public boolean isIndyReady() { return true; From eecae1bf6b828885df8d669fd220802f3c61a10d Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 15:39:52 -0800 Subject: [PATCH 67/73] fix --- .../tooling/instrumentation/InstrumentationModuleInstaller.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 510962e53a63..e9bcce233e46 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 @@ -280,7 +280,7 @@ private static boolean isInstrumentationEnabled( for (String name : instrumentationNames) { Optional enabled = DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "instrumentation", name, "enabled"); + GlobalOpenTelemetry.get(), "java", name, "enabled"); if (enabled.isPresent()) { return enabled.get(); } From 5b584ecff396dad2388abc17865e0eb1e03fa31c Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 17:07:03 -0800 Subject: [PATCH 68/73] fix --- .../spring/autoconfigure/EmbeddedConfigFile.java | 7 +++++++ .../spring/autoconfigure/DeclarativeConfigTest.java | 7 +++---- .../instrumentation/InstrumentationModuleInstaller.java | 3 +-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java index af51be392c16..a8d8f8380433 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java @@ -60,6 +60,10 @@ private static Map extractSpringProperties(ConfigurableEnvironme ((EnumerablePropertySource) propertySource).getPropertyNames()) { if (propertyName.startsWith("otel.")) { Object property = propertySource.getProperty(propertyName); + // Resolve ${} placeholders in String values while preserving types for others + if (property instanceof String) { + property = environment.resolvePlaceholders((String) property); + } if (Objects.equals(property, "")) { property = null; // spring returns empty string for yaml null } @@ -76,6 +80,9 @@ private static Map extractSpringProperties(ConfigurableEnvironme .replace(".", "_") .toUpperCase(Locale.ROOT); Object envVarValue = propertySource.getProperty(envVarName); + if (envVarValue instanceof String) { + envVarValue = environment.resolvePlaceholders((String) envVarValue); + } if (envVarValue != null) { property = envVarValue; } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java index 41d1042e3ec9..ddd7adc84750 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java @@ -46,8 +46,7 @@ void customOpenTelemetry() { context -> assertThat(context) .hasBean("customOpenTelemetry") - .doesNotHaveBean("openTelemetry") - .hasBean("otelProperties")); + .doesNotHaveBean("openTelemetry")); } @Test @@ -56,9 +55,9 @@ void customOpenTelemetry() { void initializeProvidersAndOpenTelemetry() { this.contextRunner.run( context -> { - assertThat(context).hasBean("openTelemetry").hasBean("otelProperties"); + assertThat(context).hasBean("openTelemetry"); OpenTelemetry openTelemetry = context.getBean(OpenTelemetry.class); - assertThat(DeclarativeConfigUtil.getString(openTelemetry, "foo", "bar")).hasValue("baz"); + assertThat(DeclarativeConfigUtil.getString(openTelemetry, "java", "foo", "bar")).hasValue("baz"); }); } 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 e9bcce233e46..4228233d2ad7 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 @@ -279,8 +279,7 @@ private static boolean isInstrumentationEnabled( Iterable instrumentationNames, boolean defaultEnabled) { for (String name : instrumentationNames) { Optional enabled = - DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", name, "enabled"); + DeclarativeConfigUtil.getBoolean(GlobalOpenTelemetry.get(), "java", name, "enabled"); if (enabled.isPresent()) { return enabled.get(); } From 0a78f2adb1f80a78c5581b0f5f0f7701be77e392 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 17:12:37 -0800 Subject: [PATCH 69/73] fix --- .../spring/autoconfigure/EmbeddedConfigFile.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java index a8d8f8380433..7da9cee2408a 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/EmbeddedConfigFile.java @@ -79,10 +79,8 @@ private static Map extractSpringProperties(ConfigurableEnvironme .replace("]", "") .replace(".", "_") .toUpperCase(Locale.ROOT); - Object envVarValue = propertySource.getProperty(envVarName); - if (envVarValue instanceof String) { - envVarValue = environment.resolvePlaceholders((String) envVarValue); - } + // Use environment.getProperty() to search all property sources for the env var + String envVarValue = environment.getProperty(envVarName); if (envVarValue != null) { property = envVarValue; } From 5775c2b05e971551da88cfe8e54b0e6a331f6eec Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 18:58:22 -0800 Subject: [PATCH 70/73] fix --- .../apachecamel/decorators/HttpSpanDecorator.java | 2 +- .../httpurlconnection/HttpMethodAttributeExtractor.java | 2 +- .../httpurlconnection/HttpUrlConnectionSingletons.java | 2 +- .../servlet/v2_2/Servlet2SpanNameExtractor.java | 2 +- .../servlet/AgentServletInstrumenterBuilder.java | 2 +- .../spring/autoconfigure/DeclarativeConfigTest.java | 3 ++- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java index f03d3feb98e3..ecd820b4192a 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java @@ -56,7 +56,7 @@ protected String getProtocol() { private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "general", "http", "known_methods") + GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java index 7bb5ecedfe01..08e23a15e53f 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpMethodAttributeExtractor.java @@ -31,7 +31,7 @@ private HttpMethodAttributeExtractor(Set knownMethods) { emitExperimentalHttpClientTelemetry = DeclarativeConfigUtil.getBoolean( io.opentelemetry.api.GlobalOpenTelemetry.get(), - "general", + "java", "http", "client", "emit_experimental_telemetry") diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java index cf79d64d548e..b932932bc407 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java @@ -43,7 +43,7 @@ public static Instrumenter instrumenter() { private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "general", "http", "known_methods") + GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java index 07d497cc80af..ebec0c537af4 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java @@ -26,7 +26,7 @@ public Servlet2SpanNameExtractor(ServletAccessor accessor) { private static Set getKnownHttpMethods() { return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "general", "http", "known_methods") + GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index bf646d80449f..476278d37f0e 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -106,7 +106,7 @@ public Instrumenter, ServletResponseContext getKnownHttpMethods() { return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "general", "http", "known_methods") + GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java index ddd7adc84750..4846a8b87141 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/testDeclarativeConfig/java/io/opentelemetry/instrumentation/spring/autoconfigure/DeclarativeConfigTest.java @@ -57,7 +57,8 @@ void initializeProvidersAndOpenTelemetry() { context -> { assertThat(context).hasBean("openTelemetry"); OpenTelemetry openTelemetry = context.getBean(OpenTelemetry.class); - assertThat(DeclarativeConfigUtil.getString(openTelemetry, "java", "foo", "bar")).hasValue("baz"); + assertThat(DeclarativeConfigUtil.getString(openTelemetry, "java", "foo", "bar")) + .hasValue("baz"); }); } From 7a4b4f94ab5b2cdbbba1bec33c61a91d2e53b6ff Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 20:05:33 -0800 Subject: [PATCH 71/73] fix --- .../apachecamel/decorators/HttpSpanDecorator.java | 3 +-- .../httpurlconnection/HttpUrlConnectionSingletons.java | 3 +-- .../servlet/v2_2/Servlet2SpanNameExtractor.java | 3 +-- .../servlet/AgentServletInstrumenterBuilder.java | 3 +-- .../instrumentation/DenyUnsafeInstrumentationModule.java | 7 ++----- 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java index ecd820b4192a..89e170c6db4e 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java @@ -55,8 +55,7 @@ protected String getProtocol() { } private static Set getKnownHttpMethods() { - return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "java", "http", "known_methods") + return DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java index b932932bc407..5c8f8ac694c6 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java @@ -42,8 +42,7 @@ public static Instrumenter instrumenter() { } private static Set getKnownHttpMethods() { - return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "java", "http", "known_methods") + return DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java index ebec0c537af4..6d7b2d23f867 100644 --- a/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java +++ b/instrumentation/servlet/servlet-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/v2_2/Servlet2SpanNameExtractor.java @@ -25,8 +25,7 @@ public Servlet2SpanNameExtractor(ServletAccessor accessor) { } private static Set getKnownHttpMethods() { - return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "java", "http", "known_methods") + return DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java index 476278d37f0e..c631d1220360 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/AgentServletInstrumenterBuilder.java @@ -105,8 +105,7 @@ public Instrumenter, ServletResponseContext getKnownHttpMethods() { - return DeclarativeConfigUtil.getList( - GlobalOpenTelemetry.get(), "java", "http", "known_methods") + return DeclarativeConfigUtil.getList(GlobalOpenTelemetry.get(), "java", "http", "known_methods") .map(HashSet::new) .orElse(new HashSet<>(HttpConstants.KNOWN_METHODS)); } 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 72a968c72197..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 @@ -8,8 +8,6 @@ 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 java.util.List; @@ -36,8 +34,7 @@ public List typeInstrumentations() { @Override public boolean defaultEnabled() { - return DeclarativeConfigUtil.getBoolean( - GlobalOpenTelemetry.get(), "java", "deny_unsafe", "enabled") - .orElse(false); + // using a system property here will enable the instrumentation when declarative config is used + return Boolean.getBoolean("otel.instrumentation.deny-unsafe.enabled"); } } From e4663156bcd2433b583d382e57ad3856962591d1 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 20:44:48 -0800 Subject: [PATCH 72/73] fix --- .../jmx/JmxMetricInsightInstaller.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java index 62d272cbc690..16624f42bc70 100644 --- a/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java +++ b/instrumentation/jmx-metrics/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jmx/JmxMetricInsightInstaller.java @@ -13,6 +13,8 @@ import io.opentelemetry.instrumentation.jmx.JmxTelemetryBuilder; import io.opentelemetry.javaagent.extension.AgentListener; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.internal.AutoConfigureUtil; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; @@ -30,6 +32,7 @@ public class JmxMetricInsightInstaller implements AgentListener { @Override public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { OpenTelemetry openTelemetry = autoConfiguredSdk.getOpenTelemetrySdk(); + ConfigProperties config = AutoConfigureUtil.getConfig(autoConfiguredSdk); boolean defaultEnabled = DeclarativeConfigUtil.getBoolean(openTelemetry, "java", "common", "default_enabled") @@ -40,7 +43,7 @@ public void afterAgent(AutoConfiguredOpenTelemetrySdk autoConfiguredSdk) { if (enabled) { JmxTelemetryBuilder jmx = JmxTelemetry.builder(GlobalOpenTelemetry.get()) - .beanDiscoveryDelay(beanDiscoveryDelay(openTelemetry)); + .beanDiscoveryDelay(beanDiscoveryDelay(openTelemetry, config)); DeclarativeConfigUtil.getList(openTelemetry, "java", "jmx", "config") .orElse(Collections.emptyList()) @@ -77,8 +80,16 @@ private static void addClasspathRules(String target, JmxTelemetryBuilder builder } } - private static Duration beanDiscoveryDelay(OpenTelemetry openTelemetry) { - return DeclarativeConfigUtil.getDuration(openTelemetry, "java", "jmx", "discovery_delay") - .orElse(Duration.ofMinutes(1)); + private static Duration beanDiscoveryDelay( + OpenTelemetry openTelemetry, ConfigProperties configProperties) { + Duration discoveryDelay = + DeclarativeConfigUtil.getDuration(openTelemetry, "java", "jmx", "discovery_delay") + .orElse(null); + if (discoveryDelay != null) { + return discoveryDelay; + } + + // TODO remove this fallback because it's not available via declarative configuration API + return configProperties.getDuration("otel.metric.export.interval", Duration.ofMinutes(1)); } } From 051c6d50b028e8f471c97560586df251e9b72f78 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Sat, 13 Dec 2025 20:47:46 -0800 Subject: [PATCH 73/73] comment --- .../javaagent/tooling/OpenTelemetryInstaller.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java index 1929f0234efb..711ef97bfb12 100644 --- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java +++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/OpenTelemetryInstaller.java @@ -49,7 +49,7 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( sdk = new ExtendedOpenTelemetrySdkWrapper(sdk, configProvider); } else if (configProperties == null && configProvider != null) { // Declarative configuration was used, but we still need a ConfigProperties - // instance for some existing java agent extension APIs + // instance for some deprecated agent extension APIs configProperties = getDeclarativeConfigBridgedProperties(earlyConfig, configProvider); } else { throw new IllegalStateException( @@ -58,7 +58,7 @@ public static AutoConfiguredOpenTelemetrySdk installOpenTelemetrySdk( setForceFlush(sdk); GlobalOpenTelemetry.set(sdk); - // we still need a ConfigProperties instance for some existing agent extension APIs + // we still need a ConfigProperties instance for some deprecated agent extension APIs RuntimeConfigProperties.set(configProperties); return SdkAutoconfigureAccess.create(