From e2e77226222edd1004b8ff801336fe03605a9aa2 Mon Sep 17 00:00:00 2001 From: "Timothy Mothra Lee (from Dev Box)" Date: Fri, 14 Feb 2025 11:21:41 -0800 Subject: [PATCH 1/5] fix DependencyTarget --- .../CHANGELOG.md | 3 +++ .../Models/RemoteDependencyData.cs | 3 +++ .../src/Internals/AzMonListExtensions.cs | 4 ++-- .../RemoteDependencyDataTests.cs | 20 +++++++++++++++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md index 7d0c08c67eec..8756cb1c570a 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md @@ -8,6 +8,9 @@ ### Bugs Fixed +* Always set Dependency.Target if "server.address" is set. + ([]()) + ### Other Changes ## 1.4.0-beta.2 (2024-10-11) diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs index 3c6767fad2e4..802601bfa64d 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs @@ -34,6 +34,9 @@ public RemoteDependencyData(int version, Activity activity, ref ActivityTagsProc case OperationType.Messaging: SetMessagingDependencyProperties(activity, ref activityTagsProcessor.MappedTags); break; + default: + Target = activityTagsProcessor.MappedTags.GetTargetUsingServerAttributes(); + break; } dependencyName ??= activity.DisplayName; diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs index 90c60104ac8a..f937bc809953 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs @@ -248,12 +248,12 @@ internal static string GetDefaultDbPort(string? dbSystem) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal static string? GetTargetUsingServerAttributes(this AzMonList tagObjects, string defaultPort) + internal static string? GetTargetUsingServerAttributes(this AzMonList tagObjects, string? defaultPort = null) { var values = AzMonList.GetTagValues(ref tagObjects, SemanticConventions.AttributeServerAddress, SemanticConventions.AttributeServerSocketAddress, SemanticConventions.AttributeServerPort); string? target = values[0]?.ToString() ?? values[1]?.ToString(); var port = values[2]?.ToString(); - if (!string.IsNullOrWhiteSpace(target) && port != null && port != defaultPort) + if (!string.IsNullOrWhiteSpace(target) && port != null && port != defaultPort) { target = target + ":" + port; } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs index ed218ba86c6c..2c3a6077482e 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs @@ -190,5 +190,25 @@ public void HttpDependencyNameIsActivityDisplayNameByDefault() Assert.Equal(activity.DisplayName, remoteDependencyDataName); } + + [Fact] + public void VerifyAllDependenciesSetTarget() + { + using ActivitySource activitySource = new ActivitySource(ActivitySourceName); + using var activity = activitySource.StartActivity( + ActivityName, + ActivityKind.Client, + parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), + startTime: DateTime.UtcNow); + + Assert.NotNull(activity); + activity.SetTag(SemanticConventions.AttributeServerAddress, "unitTestValue"); + + var activityTagsProcessor = TraceHelper.EnumerateActivityTags(activity); + + var remoteDependencyData = new RemoteDependencyData(2, activity, ref activityTagsProcessor); + + Assert.Equal("unitTestValue", remoteDependencyData.Target); + } } } From 572081882b8cd08896fcd8dab360916d1f6f2ce3 Mon Sep 17 00:00:00 2001 From: "Timothy Mothra Lee (from Dev Box)" Date: Fri, 14 Feb 2025 11:24:35 -0800 Subject: [PATCH 2/5] changelog --- sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md index 8756cb1c570a..bb33274eb3cf 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md @@ -9,7 +9,7 @@ ### Bugs Fixed * Always set Dependency.Target if "server.address" is set. - ([]()) + ([#48317](https://github.com/Azure/azure-sdk-for-net/pull/48317)) ### Other Changes From 5319f60b09d10ba9892ffc2e04bf024459be20be Mon Sep 17 00:00:00 2001 From: "Timothy Mothra Lee (from Dev Box)" Date: Fri, 14 Feb 2025 13:48:16 -0800 Subject: [PATCH 3/5] update based on feedback --- .../CHANGELOG.md | 2 +- .../Models/RemoteDependencyData.cs | 3 ++- .../src/Internals/AzMonListExtensions.cs | 20 +++++++++++++- .../RemoteDependencyDataTests.cs | 27 ++++++++++++++++--- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md index bb33274eb3cf..da959d33c89e 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md @@ -8,7 +8,7 @@ ### Bugs Fixed -* Always set Dependency.Target if "server.address" is set. +* Always set Dependency.Target to "server.address" and "server.port" if present. ([#48317](https://github.com/Azure/azure-sdk-for-net/pull/48317)) ### Other Changes diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs index 802601bfa64d..1fbde9262928 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; using System.Diagnostics; using System.Globalization; using Azure.Core; @@ -35,7 +36,7 @@ public RemoteDependencyData(int version, Activity activity, ref ActivityTagsProc SetMessagingDependencyProperties(activity, ref activityTagsProcessor.MappedTags); break; default: - Target = activityTagsProcessor.MappedTags.GetTargetUsingServerAttributes(); + Target = activityTagsProcessor.MappedTags.GetTargetUsingServerAddressAndPort(); break; } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs index f937bc809953..966547a43daf 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs @@ -248,7 +248,7 @@ internal static string GetDefaultDbPort(string? dbSystem) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal static string? GetTargetUsingServerAttributes(this AzMonList tagObjects, string? defaultPort = null) + internal static string? GetTargetUsingServerAttributes(this AzMonList tagObjects, string defaultPort) { var values = AzMonList.GetTagValues(ref tagObjects, SemanticConventions.AttributeServerAddress, SemanticConventions.AttributeServerSocketAddress, SemanticConventions.AttributeServerPort); string? target = values[0]?.ToString() ?? values[1]?.ToString(); @@ -261,6 +261,24 @@ internal static string GetDefaultDbPort(string? dbSystem) return target; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static string? GetTargetUsingServerAddressAndPort(this AzMonList tagObjects) + { + var serverAttributes = AzMonList.GetTagValues(ref tagObjects, SemanticConventions.AttributeServerAddress, SemanticConventions.AttributeServerPort); + + var serverAddress = serverAttributes[0]?.ToString(); + if (!string.IsNullOrEmpty(serverAddress)) + { + var serverPort = serverAttributes[1]?.ToString(); + + return string.IsNullOrEmpty(serverPort) + ? serverAddress + : serverAddress + ":" + serverPort; + } + + return null; + } + /// /// Gets Http dependency target from activity tag objects. /// diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs index 2c3a6077482e..f2108aa0af22 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs @@ -192,7 +192,7 @@ public void HttpDependencyNameIsActivityDisplayNameByDefault() } [Fact] - public void VerifyAllDependenciesSetTarget() + public void VerifyAllDependenciesSetTargetViaServerAddress() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( @@ -202,13 +202,34 @@ public void VerifyAllDependenciesSetTarget() startTime: DateTime.UtcNow); Assert.NotNull(activity); - activity.SetTag(SemanticConventions.AttributeServerAddress, "unitTestValue"); + activity.SetTag(SemanticConventions.AttributeServerAddress, "unitTestAddress"); var activityTagsProcessor = TraceHelper.EnumerateActivityTags(activity); var remoteDependencyData = new RemoteDependencyData(2, activity, ref activityTagsProcessor); - Assert.Equal("unitTestValue", remoteDependencyData.Target); + Assert.Equal("unitTestAddress", remoteDependencyData.Target); + } + + [Fact] + public void VerifyAllDependenciesSetTargetViaServerAddressAndPort() + { + using ActivitySource activitySource = new ActivitySource(ActivitySourceName); + using var activity = activitySource.StartActivity( + ActivityName, + ActivityKind.Client, + parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), + startTime: DateTime.UtcNow); + + Assert.NotNull(activity); + activity.SetTag(SemanticConventions.AttributeServerAddress, "unitTestAddress"); + activity.SetTag(SemanticConventions.AttributeServerPort, "unitTestPort"); + + var activityTagsProcessor = TraceHelper.EnumerateActivityTags(activity); + + var remoteDependencyData = new RemoteDependencyData(2, activity, ref activityTagsProcessor); + + Assert.Equal("unitTestAddress:unitTestPort", remoteDependencyData.Target); } } } From cd792d6ba535f66fecf10754f53fa9df4251430d Mon Sep 17 00:00:00 2001 From: "Timothy Mothra Lee (from Dev Box)" Date: Fri, 14 Feb 2025 13:48:54 -0800 Subject: [PATCH 4/5] cleanup --- .../src/Internals/AzMonListExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs index 966547a43daf..132777870ce7 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs @@ -253,7 +253,7 @@ internal static string GetDefaultDbPort(string? dbSystem) var values = AzMonList.GetTagValues(ref tagObjects, SemanticConventions.AttributeServerAddress, SemanticConventions.AttributeServerSocketAddress, SemanticConventions.AttributeServerPort); string? target = values[0]?.ToString() ?? values[1]?.ToString(); var port = values[2]?.ToString(); - if (!string.IsNullOrWhiteSpace(target) && port != null && port != defaultPort) + if (!string.IsNullOrWhiteSpace(target) && port != null && port != defaultPort) { target = target + ":" + port; } From 41be14d1b25dac3f87a8e4f9c8d8858453347a7b Mon Sep 17 00:00:00 2001 From: "Timothy Mothra Lee (from Dev Box)" Date: Fri, 14 Feb 2025 13:49:45 -0800 Subject: [PATCH 5/5] cleanup --- .../src/Customizations/Models/RemoteDependencyData.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs index 1fbde9262928..d09c636d9ed3 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs @@ -1,10 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -using System; using System.Diagnostics; using System.Globalization; -using Azure.Core; using Azure.Monitor.OpenTelemetry.Exporter.Internals; namespace Azure.Monitor.OpenTelemetry.Exporter.Models