diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md index 2f00396bb96a..1d470b7249f5 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md @@ -4,6 +4,9 @@ ### Features Added +* Enabled resource metrics export by default. + ([#53432](https://github.com/Azure/azure-sdk-for-net/pull/53432)) + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/ResourceExtensions.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/ResourceExtensions.cs index 0b2a5fe7c71e..31293fdb5284 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/ResourceExtensions.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/ResourceExtensions.cs @@ -138,7 +138,7 @@ internal static class ResourceExtensions try { var exportResource = platform.GetEnvironmentVariable(EnvironmentVariableConstants.EXPORT_RESOURCE_METRIC); - if (exportResource != null && exportResource.Equals("true", StringComparison.OrdinalIgnoreCase)) + if (exportResource == null || exportResource.Equals("true", StringComparison.OrdinalIgnoreCase)) { shouldReportMetricTelemetry = true; } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/ResourceExtensionsTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/ResourceExtensionsTests.cs index bc56b2050ea0..e58e37d29342 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/ResourceExtensionsTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/ResourceExtensionsTests.cs @@ -49,7 +49,7 @@ public void DefaultResource(string? instrumentationKey, string envVarValue) Assert.StartsWith("unknown_service", azMonResource?.RoleName); Assert.Equal(Dns.GetHostName(), azMonResource?.RoleInstance); - if (envVarValue == "true") + if (envVarValue == "true" || envVarValue == null) { Assert.Equal(instrumentationKey != null, azMonResource?.MonitorBaseData != null); } @@ -338,7 +338,7 @@ public void MetricTelemetryIsAddedToResourceBasedOnEnvVar(string envVarValue) var resource = ResourceBuilder.CreateDefault().Build(); var azMonResource = resource.CreateAzureMonitorResource(platform: GetMockPlatform(enableResourceMetric: envVarValue), instrumentationKey: InstrumentationKey); - if (envVarValue == "true") + if (envVarValue == "true" || envVarValue == null) { Assert.NotNull(azMonResource?.MonitorBaseData); } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/StandardMetricTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/StandardMetricTests.cs index 3afefcc2c989..7b3cb8b7658f 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/StandardMetricTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/StandardMetricTests.cs @@ -507,7 +507,21 @@ public void ValidatePerfCounterMetrics() tracerProvider?.ForceFlush(); WaitForActivityExport(traceTelemetryItems); - standardMetricCustomProcessor._meterProvider?.ForceFlush(); + // Wait for performance counter collection cycle to complete + // Performance counters are collected periodically, so we need to wait for at least one collection cycle + var perfCountersCollected = SpinWait.SpinUntil( + condition: () => + { + standardMetricCustomProcessor._meterProvider?.ForceFlush(); + Thread.Sleep(100); + var requestRate = metricTelemetryItems + .Select(ti => (MetricsData)ti.Data.BaseData) + .FirstOrDefault(md => md.Metrics.Count > 0 && md.Metrics[0].Name == PerfCounterConstants.RequestRateMetricIdValue); + return requestRate != null && requestRate.Metrics[0].Value >= 1; + }, + timeout: TimeSpan.FromSeconds(5)); + + Assert.True(perfCountersCollected, "Performance counter metrics were not collected within the timeout period."); // We expect multiple metric telemetry items now (at least one per perf counter plus request duration histogram). Assert.True(metricTelemetryItems.Count >= 2, "Expected multiple metric telemetry items including perf counters.");