diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RequestData.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RequestData.cs index da57a20204a9..a7599658f71c 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RequestData.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/RequestData.cs @@ -87,7 +87,6 @@ private void SetMessagingRequestProperties(Activity activity, ref AzMonList mess var (messagingUrl, source) = messagingTagObjects.GetMessagingUrlAndSourceOrTarget(activity.Kind); Url = messagingUrl?.Truncate(SchemaConstants.RequestData_Url_MaxLength); Source = source?.Truncate(SchemaConstants.RequestData_Source_MaxLength); - Name = activity.DisplayName; } } } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/TelemetryItem.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/TelemetryItem.cs index 901491c6c2f2..d03e513a7389 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/TelemetryItem.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/Customizations/Models/TelemetryItem.cs @@ -23,15 +23,30 @@ public TelemetryItem(Activity activity, ref ActivityTagsProcessor activityTagsPr Tags[ContextTagKeys.AiOperationId.ToString()] = activity.TraceId.ToHexString(); - if (activity.Kind == ActivityKind.Server && activityTagsProcessor.activityType.HasFlag(OperationType.V2)) + if (activity.GetTelemetryType() == TelemetryType.Request) { - Tags[ContextTagKeys.AiOperationName.ToString()] = TraceHelper.GetOperationNameV2(activity, ref activityTagsProcessor.MappedTags); - Tags[ContextTagKeys.AiLocationIp.ToString()] = TraceHelper.GetLocationIp(ref activityTagsProcessor.MappedTags); - } - else if (activity.Kind == ActivityKind.Server && activityTagsProcessor.activityType.HasFlag(OperationType.Http)) - { - Tags[ContextTagKeys.AiOperationName.ToString()] = TraceHelper.GetOperationName(activity, ref activityTagsProcessor.MappedTags); - Tags[ContextTagKeys.AiLocationIp.ToString()] = TraceHelper.GetLocationIp(ref activityTagsProcessor.MappedTags); + if (activityTagsProcessor.activityType.HasFlag(OperationType.V2)) + { + Tags[ContextTagKeys.AiOperationName.ToString()] = TraceHelper.GetOperationNameV2(activity, ref activityTagsProcessor.MappedTags); + } + else if (activityTagsProcessor.activityType.HasFlag(OperationType.Http)) + { + Tags[ContextTagKeys.AiOperationName.ToString()] = TraceHelper.GetOperationName(activity, ref activityTagsProcessor.MappedTags); + } + else + { + Tags[ContextTagKeys.AiOperationName.ToString()] = activity.DisplayName; + } + + // Set ip in case of server spans only. + if (activity.Kind == ActivityKind.Server) + { + var locationIp = TraceHelper.GetLocationIp(ref activityTagsProcessor.MappedTags); + if (locationIp != null) + { + Tags[ContextTagKeys.AiLocationIp.ToString()] = locationIp; + } + } } var userAgent = AzMonList.GetTagValue(ref activityTagsProcessor.MappedTags, SemanticConventions.AttributeUserAgentOriginal)?.ToString() diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/CommonTestFramework/TelemetryItemValidationHelper.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/CommonTestFramework/TelemetryItemValidationHelper.cs index d5f93d246c46..86e48da1a90a 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/CommonTestFramework/TelemetryItemValidationHelper.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/CommonTestFramework/TelemetryItemValidationHelper.cs @@ -141,7 +141,7 @@ public static void AssertActivity_As_RequestTelemetry( Assert.Equal(2, telemetryItem.Data.BaseData.Version); // telemetry api version Assert.Equal("00000000-0000-0000-0000-000000000000", telemetryItem.InstrumentationKey); - var expectedTagsCount = 5; + var expectedTagsCount = 6; Assert.Equal(expectedTagsCount, telemetryItem.Tags.Count); Assert.Equal(expectedTraceId, telemetryItem.Tags["ai.operation.id"]); diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RequestDataNewTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RequestDataNewTests.cs index c8fbeeab1c70..f2ef70838e35 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RequestDataNewTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/RequestDataNewTests.cs @@ -246,7 +246,8 @@ public void ValidateMessagingRequestData() var requestData = new RequestData(2, activity, ref activityTagsProcessor); - Assert.Equal("RequestDataNewActivity", requestData.Name); + // Name is set later via operation name on TelemetryItem + Assert.Null(requestData.Name); Assert.Equal(activity.Context.SpanId.ToHexString(), requestData.Id); Assert.Equal("my.servicebus.windows.net/queueName", requestData.Url); Assert.Equal("0", requestData.ResponseCode); diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryItemTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryItemTests.cs index 4f1e23adface..eb16549607fe 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryItemTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Azure.Monitor.OpenTelemetry.Exporter.Tests/TelemetryItemTests.cs @@ -277,7 +277,7 @@ public void AiUserAgentIsSetAsUserAgentOriginal() } [Fact] - public void AiLocationIpIsNullByDefault() + public void AiLocationIpIsNotSetByDefault() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( @@ -292,7 +292,7 @@ public void AiLocationIpIsNullByDefault() var telemetryItems = TraceHelper.OtelToAzureMonitorTrace(new Batch(new Activity[] { activity }, 1), null, "instrumentationKey"); var telemetryItem = telemetryItems.FirstOrDefault(); - Assert.Null(telemetryItem?.Tags[ContextTagKeys.AiLocationIp.ToString()]); + Assert.False(telemetryItem?.Tags.TryGetValue(ContextTagKeys.AiLocationIp.ToString(),out _)); } [Fact] @@ -404,6 +404,31 @@ public void RequestNameMatchesOperationNameV2() Assert.Equal(requestData.Name, telemetryItem?.Tags[ContextTagKeys.AiOperationName.ToString()]); } + [Fact] + public void RequestNameMatchesOperationNameForConsumerSpans() + { + using ActivitySource activitySource = new ActivitySource(ActivitySourceName); + using var activity = activitySource.StartActivity( + ActivityName, + ActivityKind.Consumer, + null, + startTime: DateTime.UtcNow); + + Assert.NotNull(activity); + activity.DisplayName = "displayname"; + + activity.SetTag(SemanticConventions.AttributeMessagingSystem, "Eventhub"); + + var activityTagsProcessor = TraceHelper.EnumerateActivityTags(activity); + var telemetryItems = TraceHelper.OtelToAzureMonitorTrace(new Batch(new Activity[] { activity }, 1), null, "instrumentationKey"); + var telemetryItem = telemetryItems.FirstOrDefault(); + var requestData = telemetryItem?.Data.BaseData as RequestData; + + Assert.NotNull(requestData); + Assert.Equal("displayname", requestData.Name); + Assert.Equal(requestData.Name, telemetryItem?.Tags[ContextTagKeys.AiOperationName.ToString()]); + } + /// /// If SERVICE.NAME is not defined, it will fall-back to "unknown_service". /// (https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/resource/semantic_conventions#semantic-attributes-with-sdk-provided-default-value). diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Integration.Tests/TestFramework/WebApplicationTestsBase.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Integration.Tests/TestFramework/WebApplicationTestsBase.cs index 648c3a06cb98..9917caf6300e 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Integration.Tests/TestFramework/WebApplicationTestsBase.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/tests/Integration.Tests/TestFramework/WebApplicationTestsBase.cs @@ -51,7 +51,6 @@ internal void AssertRequestTelemetry(TelemetryItem telemetryItem, string expecte // Tags Assert.Contains("ai.operation.id", telemetryItem.Tags.Keys); Assert.Contains("ai.operation.name", telemetryItem.Tags.Keys); - Assert.Contains("ai.location.ip", telemetryItem.Tags.Keys); Assert.Contains("ai.cloud.role", telemetryItem.Tags.Keys); Assert.Contains("ai.cloud.roleInstance", telemetryItem.Tags.Keys); Assert.Contains("ai.internal.sdkVersion", telemetryItem.Tags.Keys);