Skip to content

Commit 972760d

Browse files
Default RoleInstance to HostName (Azure#23592)
* default to hostname * fix breaking tests * update comment * minor * undo comment * resolve PR comment
1 parent 2214295 commit 972760d

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed

sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/TelemetryPartA.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Diagnostics;
67
using System.Globalization;
7-
8+
using System.Net;
89
using Azure.Monitor.OpenTelemetry.Exporter.Models;
910

1011
using OpenTelemetry.Logs;
@@ -155,6 +156,18 @@ internal static void InitRoleInfo(Resource resource)
155156
{
156157
RoleName = serviceName;
157158
}
159+
160+
if (RoleInstance == null)
161+
{
162+
try
163+
{
164+
RoleInstance = Dns.GetHostName();
165+
}
166+
catch (Exception ex)
167+
{
168+
AzureMonitorExporterEventSource.Log.Write($"ErrorInitializingRoleInstanceToHostName{EventLevelSuffix.Error}", $"{ex.ToInvariantString()}");
169+
}
170+
}
158171
}
159172

160173
internal static string FormatUtcTimestamp(System.DateTime utcTimestamp)

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

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Collections.Generic;
66
using System.Diagnostics;
77
using System.Globalization;
8+
using System.Net;
89
using Xunit;
910

1011
using Azure.Monitor.OpenTelemetry.Exporter.Models;
@@ -56,7 +57,7 @@ public void InitRoleInfo_Default()
5657
TelemetryPartA.InitRoleInfo(resource);
5758

5859
Assert.StartsWith("unknown_service", TelemetryPartA.RoleName);
59-
Assert.Null(TelemetryPartA.RoleInstance);
60+
Assert.Equal(Dns.GetHostName(), TelemetryPartA.RoleInstance);
6061
}
6162

6263
[Fact]
@@ -66,7 +67,7 @@ public void InitRoleInfo_ServiceName()
6667
TelemetryPartA.InitRoleInfo(resource);
6768

6869
Assert.Equal("my-service", TelemetryPartA.RoleName);
69-
Assert.Null(TelemetryPartA.RoleInstance);
70+
Assert.Equal(Dns.GetHostName(), TelemetryPartA.RoleInstance);
7071
}
7172

7273
[Fact]
@@ -86,7 +87,7 @@ public void InitRoleInfo_ServiceNamespace()
8687
TelemetryPartA.InitRoleInfo(resource);
8788

8889
Assert.StartsWith("my-namespace.unknown_service", TelemetryPartA.RoleName);
89-
Assert.Null(TelemetryPartA.RoleInstance);
90+
Assert.Equal(Dns.GetHostName(), TelemetryPartA.RoleInstance);
9091
}
9192

9293
[Fact]
@@ -128,7 +129,7 @@ public void GeneratePartAEnvelope_DefaultActivity_DefaultResource()
128129
Assert.Equal("RemoteDependency", telemetryItem.Name);
129130
Assert.Equal(TelemetryPartA.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time);
130131
Assert.StartsWith("unknown_service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
131-
Assert.Null(telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
132+
Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
132133
Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
133134
Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
134135
Assert.Throws<KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
@@ -177,7 +178,7 @@ public void GeneratePartAEnvelope_Activity_WithParentSpanId()
177178
Assert.Equal("RemoteDependency", telemetryItem.Name);
178179
Assert.Equal(TelemetryPartA.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time);
179180
Assert.StartsWith("unknown_service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]);
180-
Assert.Null(telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
181+
Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
181182
Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]);
182183
Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]);
183184
Assert.Equal(activity.ParentSpanId.ToHexString(), telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]);
@@ -322,6 +323,42 @@ public void AiUserAgentIsNullByDefault()
322323
Assert.Null(telemetryItem.Tags["ai.user.userAgent"]);
323324
}
324325

326+
[Fact]
327+
public void RoleInstanceIsSetToHostNameByDefault()
328+
{
329+
using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
330+
using var activity = activitySource.StartActivity(
331+
ActivityName,
332+
ActivityKind.Server,
333+
null,
334+
startTime: DateTime.UtcNow);
335+
var resource = CreateTestResource();
336+
337+
var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);
338+
339+
var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);
340+
341+
Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
342+
}
343+
344+
[Fact]
345+
public void RoleInstanceIsNotOverwrittenIfSetViaServiceInstanceId()
346+
{
347+
using ActivitySource activitySource = new ActivitySource(ActivitySourceName);
348+
using var activity = activitySource.StartActivity(
349+
ActivityName,
350+
ActivityKind.Server,
351+
null,
352+
startTime: DateTime.UtcNow);
353+
var resource = CreateTestResource(null, null, "serviceinstance");
354+
355+
var monitorTags = AzureMonitorConverter.EnumerateActivityTags(activity);
356+
357+
var telemetryItem = TelemetryPartA.GetTelemetryItem(activity, ref monitorTags, resource, null);
358+
359+
Assert.Equal("serviceinstance", telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]);
360+
}
361+
325362
/// <summary>
326363
/// If SERVICE.NAME is not defined, it will fall-back to "unknown_service".
327364
/// (https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource/semantic_conventions#semantic-attributes-with-sdk-provided-default-value).

0 commit comments

Comments
 (0)