From 5171b943e765a93c13ade56361bbfe2e67347c42 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 28 Jan 2026 19:50:00 +0000 Subject: [PATCH 1/5] Initial plan From de178c017d7e3b99a53dbfe45dbcb490abb981db Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 28 Jan 2026 19:58:46 +0000 Subject: [PATCH 2/5] Update OpenTelemetry versions to 1.58.0 / 2.24.0 (with compilation errors) Co-authored-by: xiang17 <9310587+xiang17@users.noreply.github.com> --- dependencyManagement/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 417076b7de..96ecc42e1b 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -7,9 +7,9 @@ data class DependencySet(val group: String, val version: String, val modules: Li val dependencyVersions = hashMapOf() rootProject.extra["versions"] = dependencyVersions -val otelSdkVersion = "1.55.0" -val otelInstrumentationAlphaVersion = "2.21.0-alpha" -val otelInstrumentationVersion = "2.21.0" +val otelSdkVersion = "1.58.0" +val otelInstrumentationAlphaVersion = "2.24.0-alpha" +val otelInstrumentationVersion = "2.24.0" val otelContribVersion = "1.48.0" rootProject.extra["otelInstrumentationVersion"] = otelInstrumentationVersion From a4d6d074d45ed542965fb554ecde9870a8fe6c02 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 28 Jan 2026 20:07:25 +0000 Subject: [PATCH 3/5] Fix compilation errors after OpenTelemetry upgrade Co-authored-by: xiang17 <9310587+xiang17@users.noreply.github.com> --- .../agent/internal/init/FirstEntryPoint.java | 3 +- .../ai/MethodInstrumentationModule.java | 12 ++++++-- .../ai/AzureMonitorRegistryConfig.java | 29 ++++++++++++++----- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/FirstEntryPoint.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/FirstEntryPoint.java index 39cbfa39bd..8e0b4b12a2 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/FirstEntryPoint.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/FirstEntryPoint.java @@ -23,7 +23,6 @@ import io.opentelemetry.javaagent.bootstrap.InternalLogger; import io.opentelemetry.javaagent.bootstrap.JavaagentFileHolder; import io.opentelemetry.javaagent.tooling.LoggingCustomizer; -import io.opentelemetry.javaagent.tooling.config.EarlyInitAgentConfig; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; @@ -77,7 +76,7 @@ public String name() { } @Override - public void init(EarlyInitAgentConfig earlyConfig) { + public void init() { try { if (DEBUG_SIGNED_JAR_ACCESS) { JarVerifierClassFileTransformer transformer = new JarVerifierClassFileTransformer(); diff --git a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java index 036a1f33b0..b65f01df39 100644 --- a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java +++ b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java @@ -11,9 +11,12 @@ import static java.util.Arrays.asList; import static java.util.Collections.emptyList; +import static java.util.Collections.emptyMap; import com.google.auto.service.AutoService; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.tooling.config.MethodsConfigurationParser; @@ -32,9 +35,12 @@ public class MethodInstrumentationModule extends InstrumentationModule { public MethodInstrumentationModule() { super("ai-methods"); + DeclarativeConfigProperties config = + DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "ai-methods"); + String include = config.getString(TRACE_METHODS_CONFIG); + Map> classMethodsToTrace = - MethodsConfigurationParser.parse( - AgentInstrumentationConfig.get().getString(TRACE_METHODS_CONFIG)); + include != null ? MethodsConfigurationParser.parse(include) : emptyMap(); typeInstrumentations = classMethodsToTrace.entrySet().stream() diff --git a/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java b/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java index b3865ecd99..e6c2bc90aa 100644 --- a/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java +++ b/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java @@ -4,7 +4,9 @@ package io.opentelemetry.javaagent.instrumentation.micrometer.ai; import io.micrometer.core.instrument.step.StepRegistryConfig; -import io.opentelemetry.javaagent.bootstrap.internal.AgentInstrumentationConfig; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; +import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.time.Duration; import javax.annotation.Nullable; @@ -16,13 +18,24 @@ public class AzureMonitorRegistryConfig implements StepRegistryConfig { public static final AzureMonitorRegistryConfig INSTANCE = new AzureMonitorRegistryConfig(); private AzureMonitorRegistryConfig() { - step = - AgentInstrumentationConfig.get() - .getDuration( - "applicationinsights.internal.micrometer.step.millis", Duration.ofSeconds(60)); - namespace = - AgentInstrumentationConfig.get() - .getString("applicationinsights.internal.micrometer.namespace"); + DeclarativeConfigProperties config = + DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "micrometer"); + + // Get step duration in milliseconds, default to 60 seconds + String stepMillisStr = config.getString("applicationinsights.internal.micrometer.step.millis"); + Duration stepValue; + if (stepMillisStr != null) { + try { + stepValue = Duration.ofMillis(Long.parseLong(stepMillisStr)); + } catch (NumberFormatException e) { + stepValue = Duration.ofSeconds(60); + } + } else { + stepValue = Duration.ofSeconds(60); + } + step = stepValue; + + namespace = config.getString("applicationinsights.internal.micrometer.namespace"); } @Override From 82dca7bdf6689b14edb48713fd841428f31e0a40 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 28 Jan 2026 20:16:45 +0000 Subject: [PATCH 4/5] Address code review feedback: Add logging for config errors Co-authored-by: xiang17 <9310587+xiang17@users.noreply.github.com> --- .../ai/AzureMonitorRegistryConfig.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java b/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java index e6c2bc90aa..b6b24d1b75 100644 --- a/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java +++ b/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java @@ -8,10 +8,15 @@ import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil; import java.time.Duration; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.annotation.Nullable; public class AzureMonitorRegistryConfig implements StepRegistryConfig { + private static final Logger logger = Logger.getLogger(AzureMonitorRegistryConfig.class.getName()); + private static final Duration DEFAULT_STEP = Duration.ofSeconds(60); + private final Duration step; @Nullable private final String namespace; @@ -23,17 +28,18 @@ private AzureMonitorRegistryConfig() { // Get step duration in milliseconds, default to 60 seconds String stepMillisStr = config.getString("applicationinsights.internal.micrometer.step.millis"); - Duration stepValue; + Duration parsedStep = DEFAULT_STEP; if (stepMillisStr != null) { try { - stepValue = Duration.ofMillis(Long.parseLong(stepMillisStr)); + parsedStep = Duration.ofMillis(Long.parseLong(stepMillisStr)); } catch (NumberFormatException e) { - stepValue = Duration.ofSeconds(60); + logger.log( + Level.WARNING, + "Invalid value for applicationinsights.internal.micrometer.step.millis: {0}, using default of {1}", + new Object[] {stepMillisStr, DEFAULT_STEP}); } - } else { - stepValue = Duration.ofSeconds(60); } - step = stepValue; + step = parsedStep; namespace = config.getString("applicationinsights.internal.micrometer.namespace"); } From 5fcd1dec68a78999cee5ec86d3f33c8c5ae7290d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 28 Jan 2026 22:23:00 +0000 Subject: [PATCH 5/5] Fix unit tests: Add system property fallback for configuration Co-authored-by: xiang17 <9310587+xiang17@users.noreply.github.com> --- .../methods/ai/MethodInstrumentationModule.java | 6 ++++++ .../ai/AzureMonitorRegistryConfig.java | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java index b65f01df39..559e2a68db 100644 --- a/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java +++ b/agent/instrumentation/methods/src/main/java/io/opentelemetry/javaagent/instrumentation/methods/ai/MethodInstrumentationModule.java @@ -35,10 +35,16 @@ public class MethodInstrumentationModule extends InstrumentationModule { public MethodInstrumentationModule() { super("ai-methods"); + // First try to get config from DeclarativeConfigUtil DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "ai-methods"); String include = config.getString(TRACE_METHODS_CONFIG); + // Fallback to system property if not found in declarative config + if (include == null) { + include = System.getProperty(TRACE_METHODS_CONFIG); + } + Map> classMethodsToTrace = include != null ? MethodsConfigurationParser.parse(include) : emptyMap(); diff --git a/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java b/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java index b6b24d1b75..c39d3d2011 100644 --- a/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java +++ b/agent/instrumentation/micrometer-1.0/src/main/java/io/opentelemetry/javaagent/instrumentation/micrometer/ai/AzureMonitorRegistryConfig.java @@ -25,9 +25,14 @@ public class AzureMonitorRegistryConfig implements StepRegistryConfig { private AzureMonitorRegistryConfig() { DeclarativeConfigProperties config = DeclarativeConfigUtil.getInstrumentationConfig(GlobalOpenTelemetry.get(), "micrometer"); - + // Get step duration in milliseconds, default to 60 seconds String stepMillisStr = config.getString("applicationinsights.internal.micrometer.step.millis"); + // Fallback to system property if not found in declarative config + if (stepMillisStr == null) { + stepMillisStr = System.getProperty("applicationinsights.internal.micrometer.step.millis"); + } + Duration parsedStep = DEFAULT_STEP; if (stepMillisStr != null) { try { @@ -40,8 +45,13 @@ private AzureMonitorRegistryConfig() { } } step = parsedStep; - - namespace = config.getString("applicationinsights.internal.micrometer.namespace"); + + String namespaceValue = config.getString("applicationinsights.internal.micrometer.namespace"); + // Fallback to system property if not found in declarative config + if (namespaceValue == null) { + namespaceValue = System.getProperty("applicationinsights.internal.micrometer.namespace"); + } + namespace = namespaceValue; } @Override