diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java index 5d17bb98b6..f70017b64a 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/init/AiConfigCustomizer.java @@ -5,6 +5,7 @@ import static java.util.concurrent.TimeUnit.SECONDS; +import com.azure.monitor.opentelemetry.autoconfigure.implementation.AzureMonitorExporterProviderKeys; import com.microsoft.applicationinsights.agent.internal.configuration.Configuration; import com.microsoft.applicationinsights.agent.internal.legacyheaders.DelegatingPropagatorProvider; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; @@ -115,9 +116,25 @@ public Map apply(ConfigProperties otelConfig) { } String metricsExporter = otelConfig.getString("otel.metrics.exporter"); - if (metricsExporter == null) { - // this overrides the default "otlp" so the exporter can be configured later - properties.put("otel.metrics.exporter", "none"); + String azureMonitorName = AzureMonitorExporterProviderKeys.EXPORTER_NAME; + boolean metricsToLogAnalyticsEnabled = + otelConfig.getBoolean("applicationinsights.metrics.to.loganalytics.enabled", false); + + if (metricsToLogAnalyticsEnabled) { + if (metricsExporter == null + || metricsExporter.isEmpty() + || metricsExporter.equalsIgnoreCase("none")) { + // enable Azure Monitor metrics exporter by default when flag is enabled + properties.put("otel.metrics.exporter", azureMonitorName); + } else if (!metricsExporter.contains(azureMonitorName)) { + // ensure Azure Monitor exporter is included when flag is enabled + properties.put("otel.metrics.exporter", metricsExporter + "," + azureMonitorName); + } + } else { + if (metricsExporter == null) { + // preserve previous behavior: override default "otlp" so exporter can be configured later + properties.put("otel.metrics.exporter", "none"); + } } String logsExporter = otelConfig.getString("otel.logs.exporter"); diff --git a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/SmokeTestExtension.java b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/SmokeTestExtension.java index ad7245cf5a..d02cedd041 100644 --- a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/SmokeTestExtension.java +++ b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/SmokeTestExtension.java @@ -116,7 +116,13 @@ public class SmokeTestExtension private final boolean useOtlpEndpoint; public static SmokeTestExtension create() { - return builder().build(); + SmokeTestExtensionBuilder b = builder(); + String metricsToLogAnalytics = + System.getenv("APPLICATIONINSIGHTS_METRICS_TO_LOGANALYTICS_ENABLED"); + if (metricsToLogAnalytics != null && metricsToLogAnalytics.equalsIgnoreCase("true")) { + b.setEnvVar("APPLICATIONINSIGHTS_METRICS_TO_LOGANALYTICS_ENABLED", "true"); + } + return b.build(); } public static SmokeTestExtensionBuilder builder() {