Skip to content

Commit 06c3e70

Browse files
author
Timothy Mothra
authored
[AzureMonitorExporter] Set Dependency.Target whenever "server.address" is set (Azure#48317)
* fix DependencyTarget * changelog * update based on feedback * cleanup * cleanup
1 parent d5f74c2 commit 06c3e70

File tree

4 files changed

+65
-1
lines changed

4 files changed

+65
-1
lines changed

sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
### Bugs Fixed
1010

11+
* Always set Dependency.Target to "server.address" and "server.port" if present.
12+
([#48317](https://github.com/Azure/azure-sdk-for-net/pull/48317))
13+
1114
### Other Changes
1215

1316
## 1.4.0-beta.2 (2024-10-11)

sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RemoteDependencyData.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
using System.Diagnostics;
55
using System.Globalization;
6-
using Azure.Core;
76
using Azure.Monitor.OpenTelemetry.Exporter.Internals;
87

98
namespace Azure.Monitor.OpenTelemetry.Exporter.Models
@@ -34,6 +33,9 @@ public RemoteDependencyData(int version, Activity activity, ref ActivityTagsProc
3433
case OperationType.Messaging:
3534
SetMessagingDependencyProperties(activity, ref activityTagsProcessor.MappedTags);
3635
break;
36+
default:
37+
Target = activityTagsProcessor.MappedTags.GetTargetUsingServerAddressAndPort();
38+
break;
3739
}
3840

3941
dependencyName ??= activity.DisplayName;

sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Internals/AzMonListExtensions.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,24 @@ internal static string GetDefaultDbPort(string? dbSystem)
261261
return target;
262262
}
263263

264+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
265+
internal static string? GetTargetUsingServerAddressAndPort(this AzMonList tagObjects)
266+
{
267+
var serverAttributes = AzMonList.GetTagValues(ref tagObjects, SemanticConventions.AttributeServerAddress, SemanticConventions.AttributeServerPort);
268+
269+
var serverAddress = serverAttributes[0]?.ToString();
270+
if (!string.IsNullOrEmpty(serverAddress))
271+
{
272+
var serverPort = serverAttributes[1]?.ToString();
273+
274+
return string.IsNullOrEmpty(serverPort)
275+
? serverAddress
276+
: serverAddress + ":" + serverPort;
277+
}
278+
279+
return null;
280+
}
281+
264282
///<summary>
265283
/// Gets Http dependency target from activity tag objects.
266284
///</summary>

sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RemoteDependencyDataTests.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,5 +190,46 @@ public void HttpDependencyNameIsActivityDisplayNameByDefault()
190190

191191
Assert.Equal(activity.DisplayName, remoteDependencyDataName);
192192
}
193+
194+
[Fact]
195+
public void VerifyAllDependenciesSetTargetViaServerAddress()
196+
{
197+
using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
198+
using var activity = activitySource.StartActivity(
199+
ActivityName,
200+
ActivityKind.Client,
201+
parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded),
202+
startTime: DateTime.UtcNow);
203+
204+
Assert.NotNull(activity);
205+
activity.SetTag(SemanticConventions.AttributeServerAddress, "unitTestAddress");
206+
207+
var activityTagsProcessor = TraceHelper.EnumerateActivityTags(activity);
208+
209+
var remoteDependencyData = new RemoteDependencyData(2, activity, ref activityTagsProcessor);
210+
211+
Assert.Equal("unitTestAddress", remoteDependencyData.Target);
212+
}
213+
214+
[Fact]
215+
public void VerifyAllDependenciesSetTargetViaServerAddressAndPort()
216+
{
217+
using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
218+
using var activity = activitySource.StartActivity(
219+
ActivityName,
220+
ActivityKind.Client,
221+
parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded),
222+
startTime: DateTime.UtcNow);
223+
224+
Assert.NotNull(activity);
225+
activity.SetTag(SemanticConventions.AttributeServerAddress, "unitTestAddress");
226+
activity.SetTag(SemanticConventions.AttributeServerPort, "unitTestPort");
227+
228+
var activityTagsProcessor = TraceHelper.EnumerateActivityTags(activity);
229+
230+
var remoteDependencyData = new RemoteDependencyData(2, activity, ref activityTagsProcessor);
231+
232+
Assert.Equal("unitTestAddress:unitTestPort", remoteDependencyData.Target);
233+
}
193234
}
194235
}

0 commit comments

Comments
 (0)