diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeAsyncIntegration.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeAsyncIntegration.cs index a163209668d1..ee831e173def 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeAsyncIntegration.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeAsyncIntegration.cs @@ -51,6 +51,13 @@ internal static CallTargetState OnMethodBegin(TTarge if (scope?.Span.Tags is AwsSdkTags tags) { tags.Region = executionContext.RequestContext?.ClientConfig?.RegionEndpoint?.SystemName; + bool isOutbound = (tags.SpanKind == SpanKinds.Client) || (tags.SpanKind == SpanKinds.Producer); + if (isOutbound) + { + tags = PeerServiceHelpers.DerivePeerService(tags); + } + + Tracer.Instance.CurrentTraceSettings.Schema.RemapPeerService(tags); } return new CallTargetState(scope, state: executionContext); diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeSyncIntegration.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeSyncIntegration.cs index 5cab734d57e3..96ad49789d81 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeSyncIntegration.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SDK/RuntimePipelineInvokeSyncIntegration.cs @@ -51,6 +51,13 @@ internal static CallTargetState OnMethodBegin(TTarge if (scope?.Span.Tags is AwsSdkTags tags) { tags.Region = executionContext.RequestContext?.ClientConfig?.RegionEndpoint?.SystemName; + bool isOutbound = (tags.SpanKind == SpanKinds.Client) || (tags.SpanKind == SpanKinds.Producer); + if (isOutbound) + { + tags = PeerServiceHelpers.DerivePeerService(tags); + } + + Tracer.Instance.CurrentTraceSettings.Schema.RemapPeerService(tags); } return new CallTargetState(scope, state: executionContext); diff --git a/tracer/src/Datadog.Trace/Util/PeerServiceHelpers.cs b/tracer/src/Datadog.Trace/Util/PeerServiceHelpers.cs new file mode 100644 index 000000000000..daa37d69e2d1 --- /dev/null +++ b/tracer/src/Datadog.Trace/Util/PeerServiceHelpers.cs @@ -0,0 +1,134 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +#nullable enable + +using Datadog.Trace.Tagging; + +namespace Datadog.Trace.Util +{ + /// + /// Helper to set peer.service and peer.service.source tags + /// + internal static class PeerServiceHelpers + { + /// + /// Sets peer.service tag for AwsSdk spans based on the service, environment, and region + /// + /// AwsSdkTags for the current span + public static AwsSdkTags DerivePeerService(AwsSdkTags tags) + { + var service = tags.AwsService; + var region = tags.Region; + var isAwsLambda = EnvironmentHelpers.IsAwsLambda(); + if (isAwsLambda && tags.Region != null) + { + switch (service) + { + case "DynamoDB": + tags.PeerService = "dynamodb." + region + ".amazonaws.com"; + break; + case "EventBridge": + tags.PeerService = "events." + region + ".amazonaws.com"; + break; + case "Kinesis": + tags.PeerService = "kinesis." + region + ".amazonaws.com"; + break; + case "S3": + var s3Tags = (AwsS3Tags)tags; + if (s3Tags.BucketName != null) + { + tags.PeerService = s3Tags.BucketName + ".s3." + region + ".amazonaws.com"; + } + else + { + tags.PeerService = "s3." + region + ".amazonaws.com"; + } + + break; + case "SNS": + tags.PeerService = "sns." + region + ".amazonaws.com"; + break; + case "SQS": + tags.PeerService = "sqs." + region + ".amazonaws.com"; + break; + } + + tags.PeerServiceSource = "peer.service"; + } + else if (!isAwsLambda) + { + switch (service) + { + case "DynamoDB": + if (tags is AwsDynamoDbTags) + { + var dbTags = (AwsDynamoDbTags)tags; + tags.PeerService = dbTags.TableName; + tags.PeerServiceSource = Trace.Tags.TableName; + } + + break; + case "EventBridge": + if (tags is AwsEventBridgeTags) + { + var eventTags = (AwsEventBridgeTags)tags; + tags.PeerService = eventTags.RuleName; + tags.PeerServiceSource = Trace.Tags.RuleName; + } + + break; + case "Kinesis": + if (tags is AwsKinesisTags) + { + var kinesisTags = (AwsKinesisTags)tags; + tags.PeerService = kinesisTags.StreamName; + tags.PeerServiceSource = Trace.Tags.StreamName; + } + + break; + case "S3": + if (tags is AwsS3Tags) + { + var s3Tags = (AwsS3Tags)tags; + tags.PeerService = s3Tags.BucketName; + tags.PeerServiceSource = Trace.Tags.BucketName; + } + + break; + case "SNS": + if (tags is AwsSnsTags) + { + var snsTags = (AwsSnsTags)tags; + tags.PeerService = snsTags.TopicName; + tags.PeerServiceSource = Trace.Tags.TopicName; + } + + break; + case "SQS": + if (tags is AwsSqsTags) + { + var sqsTags = (AwsSqsTags)tags; + tags.PeerService = sqsTags.QueueName; + tags.PeerServiceSource = Trace.Tags.QueueName; + } + + break; + case "StepFunctions": + if (tags is AwsStepFunctionsTags) + { + var stepTags = (AwsStepFunctionsTags)tags; + tags.PeerService = stepTags.StateMachineName; + tags.PeerServiceSource = Trace.Tags.StateMachineName; + } + + break; + } + } + + return tags; + } + } +} diff --git a/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataAPI.cs b/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataAPI.cs index b077f47f1a53..ca7640d9f459 100644 --- a/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataAPI.cs +++ b/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataAPI.cs @@ -66,23 +66,23 @@ public static Result IsAspNetCoreMvc(this MockSpan span, string metadataSchemaVe public static Result IsAwsS3Request(this MockSpan span) => span.IsAwsS3RequestV0(); - public static Result IsAwsSqsInbound(this MockSpan span) => span.IsAwsSqsRequestV0(); + public static Result IsAwsSqsInbound(this MockSpan span) => span.IsAwsSqsInboundV0(); - public static Result IsAwsSqsOutbound(this MockSpan span) => span.IsAwsSqsRequestV0(); + public static Result IsAwsSqsOutbound(this MockSpan span) => span.IsAwsSqsOutboundV0(); - public static Result IsAwsSqsRequest(this MockSpan span) => span.IsAwsSqsRequestV0(); + public static Result IsAwsSqsRequest(this MockSpan span) => span.IsAwsSqsOutboundV0(); - public static Result IsAwsSnsInbound(this MockSpan span) => span.IsAwsSnsRequestV0(); + public static Result IsAwsSnsInbound(this MockSpan span) => span.IsAwsSnsInboundV0(); - public static Result IsAwsSnsOutbound(this MockSpan span) => span.IsAwsSnsRequestV0(); + public static Result IsAwsSnsOutbound(this MockSpan span) => span.IsAwsSnsOutboundV0(); - public static Result IsAwsSnsRequest(this MockSpan span) => span.IsAwsSnsRequestV0(); + public static Result IsAwsSnsRequest(this MockSpan span) => span.IsAwsSnsOutboundV0(); - public static Result IsAwsEventBridgeInbound(this MockSpan span) => span.IsAwsEventBridgeRequestV0(); + public static Result IsAwsEventBridgeInbound(this MockSpan span) => span.IsAwsEventBridgeInboundV0(); - public static Result IsAwsEventBridgeOutbound(this MockSpan span) => span.IsAwsEventBridgeRequestV0(); + public static Result IsAwsEventBridgeOutbound(this MockSpan span) => span.IsAwsEventBridgeOutboundV0(); - public static Result IsAwsEventBridgeRequest(this MockSpan span) => span.IsAwsEventBridgeRequestV0(); + public static Result IsAwsEventBridgeRequest(this MockSpan span) => span.IsAwsEventBridgeOutboundV0(); public static Result IsAwsStepFunctionsInbound(this MockSpan span) => span.IsAwsStepFunctionsRequestV0(); diff --git a/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataV0Rules.cs b/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataV0Rules.cs index 2beab4abe0a0..5b78f29a6812 100644 --- a/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataV0Rules.cs +++ b/tracer/test/Datadog.Trace.TestHelpers/SpanMetadataV0Rules.cs @@ -146,6 +146,8 @@ public static Result IsAwsDynamoDbV0(this MockSpan span) => Result.FromSpan(span .IsPresent("http.method") .IsPresent("http.status_code") .IsPresent("http.url") + .IsPresent("peer.service") + .IsPresent("_dd.peer.service.source") .Matches("component", "aws-sdk") .IsOptional("_dd.base_service") .Matches("span.kind", "client")); @@ -167,6 +169,8 @@ public static Result IsAwsKinesisOutboundV0(this MockSpan span) => Result.FromSp .IsPresent("http.method") .IsPresent("http.status_code") .IsPresent("http.url") + .IsPresent("peer.service") + .IsPresent("_dd.peer.service.source") .Matches("component", "aws-sdk") .IsOptional("_dd.base_service") .Matches("span.kind", "producer")); @@ -188,11 +192,13 @@ public static Result IsAwsS3RequestV0(this MockSpan span) => Result.FromSpan(spa .IsPresent("http.method") .IsPresent("http.status_code") .IsPresent("http.url") + .IsOptional("peer.service") + .IsOptional("_dd.peer.service.source") .IsOptional("_dd.base_service") .Matches("component", "aws-sdk") .Matches("span.kind", "client")); - public static Result IsAwsSqsRequestV0(this MockSpan span) => Result.FromSpan(span) + public static Result IsAwsSqsInboundV0(this MockSpan span) => Result.FromSpan(span) .Properties(s => s .Matches(Name, "sqs.request") .Matches(Type, "http")) @@ -212,9 +218,33 @@ public static Result IsAwsSqsRequestV0(this MockSpan span) => Result.FromSpan(sp .IsPresent("http.url") .IsOptional("_dd.base_service") .Matches("component", "aws-sdk") - .MatchesOneOf("span.kind", "producer", "client", "consumer")); + .Matches("span.kind", "consumer")); - public static Result IsAwsSnsRequestV0(this MockSpan span) => Result.FromSpan(span) + public static Result IsAwsSqsOutboundV0(this MockSpan span) => Result.FromSpan(span) + .Properties(s => s + .Matches(Name, "sqs.request") + .Matches(Type, "http")) + .Tags(s => s + .Matches("aws.agent", "dotnet-aws-sdk") + .IsPresent("aws.operation") + .IsOptional("aws.region") + .IsOptional("region") + .IsPresent("aws.requestId") + .Matches("aws.service", "SQS") + .Matches("aws_service", "SQS") + .IsPresent("aws.queue.name") + .IsPresent("queuename") + .IsOptional("aws.queue.url") + .IsPresent("http.method") + .IsPresent("http.status_code") + .IsPresent("http.url") + .IsPresent("peer.service") + .IsPresent("_dd.peer.service.source") + .IsOptional("_dd.base_service") + .Matches("component", "aws-sdk") + .MatchesOneOf("span.kind", "producer", "client")); + + public static Result IsAwsSnsInboundV0(this MockSpan span) => Result.FromSpan(span) .Properties(s => s .Matches(Name, "sns.request") .Matches(Type, "http")) @@ -234,9 +264,53 @@ public static Result IsAwsSnsRequestV0(this MockSpan span) => Result.FromSpan(sp .IsPresent("http.url") .IsOptional("_dd.base_service") .Matches("component", "aws-sdk") + .Matches("span.kind", "consumer")); + + public static Result IsAwsSnsOutboundV0(this MockSpan span) => Result.FromSpan(span) + .Properties(s => s + .Matches(Name, "sns.request") + .Matches(Type, "http")) + .Tags(s => s + .Matches("aws.agent", "dotnet-aws-sdk") + .IsPresent("aws.operation") + .IsOptional("aws.region") + .IsOptional("region") + .IsPresent("aws.requestId") + .Matches("aws.service", "SNS") + .Matches("aws_service", "SNS") + .IsPresent("aws.topic.name") + .IsPresent("topicname") + .IsOptional("aws.topic.arn") + .IsPresent("http.method") + .IsPresent("http.status_code") + .IsPresent("http.url") + .IsPresent("peer.service") + .IsPresent("_dd.peer.service.source") + .IsOptional("_dd.base_service") + .Matches("component", "aws-sdk") .MatchesOneOf("span.kind", "producer", "client")); - public static Result IsAwsEventBridgeRequestV0(this MockSpan span) => Result.FromSpan(span) + public static Result IsAwsEventBridgeInboundV0(this MockSpan span) => Result.FromSpan(span) + .Properties(s => s + .Matches(Name, "eventbridge.request") + .Matches(Type, "http")) + .Tags(s => s + .Matches("aws.agent", "dotnet-aws-sdk") + .IsPresent("aws.operation") + .IsOptional("aws.region") + .IsOptional("region") + .IsPresent("aws.requestId") + .Matches("aws.service", "EventBridge") + .Matches("aws_service", "EventBridge") + .IsPresent("rulename") + .IsPresent("http.method") + .IsPresent("http.status_code") + .IsPresent("http.url") + .IsOptional("_dd.base_service") + .Matches("component", "aws-sdk") + .Matches("span.kind", "consumer")); + + public static Result IsAwsEventBridgeOutboundV0(this MockSpan span) => Result.FromSpan(span) .Properties(s => s .Matches(Name, "eventbridge.request") .Matches(Type, "http")) @@ -252,6 +326,8 @@ public static Result IsAwsEventBridgeRequestV0(this MockSpan span) => Result.Fro .IsPresent("http.method") .IsPresent("http.status_code") .IsPresent("http.url") + .IsPresent("peer.service") + .IsPresent("_dd.peer.service.source") .IsOptional("_dd.base_service") .Matches("component", "aws-sdk") .MatchesOneOf("span.kind", "producer", "client")); @@ -272,6 +348,8 @@ public static Result IsAwsStepFunctionsRequestV0(this MockSpan span) => Result.F .IsPresent("http.method") .IsPresent("http.status_code") .IsPresent("http.url") + .IsOptional("peer.service") + .IsOptional("_dd.peer.service.source") .IsOptional("_dd.base_service") .Matches("component", "aws-sdk") .Matches("span.kind", "producer")); diff --git a/tracer/test/snapshots/AwsDynamoDbTests.NetCore.SchemaV0.verified.txt b/tracer/test/snapshots/AwsDynamoDbTests.NetCore.SchemaV0.verified.txt index 5d73e03b9162..4fc3275ad838 100644 --- a/tracer/test/snapshots/AwsDynamoDbTests.NetCore.SchemaV0.verified.txt +++ b/tracer/test/snapshots/AwsDynamoDbTests.NetCore.SchemaV0.verified.txt @@ -1,4 +1,4 @@ -[ +[ { TraceId: Id_1, SpanId: Id_2, @@ -62,10 +62,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTableName, runtime-id: Guid_1, span.kind: client, tablename: MyTableName, - _dd.base_service: Samples.AWS.DynamoDBv2 + _dd.base_service: Samples.AWS.DynamoDBv2, + _dd.peer.service.source: tablename }, Metrics: { _dd.top_level: 1.0 @@ -91,10 +93,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTableName, runtime-id: Guid_1, span.kind: client, tablename: MyTableName, - _dd.base_service: Samples.AWS.DynamoDBv2 + _dd.base_service: Samples.AWS.DynamoDBv2, + _dd.peer.service.source: tablename }, Metrics: { _dd.top_level: 1.0 @@ -120,10 +124,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTableName, runtime-id: Guid_1, span.kind: client, tablename: MyTableName, - _dd.base_service: Samples.AWS.DynamoDBv2 + _dd.base_service: Samples.AWS.DynamoDBv2, + _dd.peer.service.source: tablename }, Metrics: { _dd.top_level: 1.0 @@ -159,10 +165,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTableName, runtime-id: Guid_1, span.kind: client, tablename: MyTableName, - _dd.base_service: Samples.AWS.DynamoDBv2 + _dd.base_service: Samples.AWS.DynamoDBv2, + _dd.peer.service.source: tablename }, Metrics: { _dd.top_level: 1.0 @@ -198,10 +206,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTableName, runtime-id: Guid_1, span.kind: client, tablename: MyTableName, - _dd.base_service: Samples.AWS.DynamoDBv2 + _dd.base_service: Samples.AWS.DynamoDBv2, + _dd.peer.service.source: tablename }, Metrics: { _dd.top_level: 1.0 @@ -227,10 +237,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTableName, runtime-id: Guid_1, span.kind: client, tablename: MyTableName, - _dd.base_service: Samples.AWS.DynamoDBv2 + _dd.base_service: Samples.AWS.DynamoDBv2, + _dd.peer.service.source: tablename }, Metrics: { _dd.top_level: 1.0 @@ -256,10 +268,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTableName, runtime-id: Guid_1, span.kind: client, tablename: MyTableName, - _dd.base_service: Samples.AWS.DynamoDBv2 + _dd.base_service: Samples.AWS.DynamoDBv2, + _dd.peer.service.source: tablename }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsEventBridgeTests.NetCore.SchemaV0.verified.txt b/tracer/test/snapshots/AwsEventBridgeTests.NetCore.SchemaV0.verified.txt index e71507ddef76..263a56063ed6 100644 --- a/tracer/test/snapshots/AwsEventBridgeTests.NetCore.SchemaV0.verified.txt +++ b/tracer/test/snapshots/AwsEventBridgeTests.NetCore.SchemaV0.verified.txt @@ -1,4 +1,4 @@ -[ +[ { TraceId: Id_1, SpanId: Id_2, @@ -62,10 +62,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyEventBus, rulename: MyEventBus, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.EventBridge + _dd.base_service: Samples.AWS.EventBridge, + _dd.peer.service.source: rulename }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsKinesisTests.NetCore.SchemaV0.verified.txt b/tracer/test/snapshots/AwsKinesisTests.NetCore.SchemaV0.verified.txt index 914487ad03ab..4e4918ddb2d5 100644 --- a/tracer/test/snapshots/AwsKinesisTests.NetCore.SchemaV0.verified.txt +++ b/tracer/test/snapshots/AwsKinesisTests.NetCore.SchemaV0.verified.txt @@ -1,4 +1,4 @@ -[ +[ { TraceId: Id_1, SpanId: Id_2, @@ -62,10 +62,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyStreamName, runtime-id: Guid_1, span.kind: producer, streamname: MyStreamName, - _dd.base_service: Samples.AWS.Kinesis + _dd.base_service: Samples.AWS.Kinesis, + _dd.peer.service.source: streamname }, Metrics: { _dd.top_level: 1.0 @@ -91,10 +93,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyStreamName, runtime-id: Guid_1, span.kind: producer, streamname: MyStreamName, - _dd.base_service: Samples.AWS.Kinesis + _dd.base_service: Samples.AWS.Kinesis, + _dd.peer.service.source: streamname }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsS3Tests.NetCore.SchemaV0.verified.txt b/tracer/test/snapshots/AwsS3Tests.NetCore.SchemaV0.verified.txt index b26a0069de3f..f8cc9e2fa752 100644 --- a/tracer/test/snapshots/AwsS3Tests.NetCore.SchemaV0.verified.txt +++ b/tracer/test/snapshots/AwsS3Tests.NetCore.SchemaV0.verified.txt @@ -38,9 +38,11 @@ http.status_code: 200, http.url: http://localhost:00000/my-bucket/, language: dotnet, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -68,9 +70,11 @@ http.url: http://localhost:00000/my-bucket/sample.txt, language: dotnet, objectkey: sample.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -108,9 +112,11 @@ http.url: http://localhost:00000/my-bucket/sample.txt, language: dotnet, objectkey: sample.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -138,9 +144,11 @@ http.url: http://localhost:00000/my-bucket/copy.txt, language: dotnet, objectkey: copy.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -177,9 +185,11 @@ http.status_code: 200, http.url: http://localhost:00000/my-bucket/, language: dotnet, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -207,9 +217,11 @@ http.url: http://localhost:00000/my-bucket/copy.txt, language: dotnet, objectkey: copy.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -236,9 +248,11 @@ http.status_code: 200, http.url: http://localhost:00000/my-bucket/, language: dotnet, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -266,9 +280,11 @@ http.url: http://localhost:00000/my-bucket/multipart.txt, language: dotnet, objectkey: multipart.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -296,9 +312,11 @@ http.url: http://localhost:00000/my-bucket/multipart.txt, language: dotnet, objectkey: multipart.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -326,9 +344,11 @@ http.url: http://localhost:00000/my-bucket/multipart.txt, language: dotnet, objectkey: multipart.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -356,9 +376,11 @@ http.url: http://localhost:00000/my-bucket/multipart.txt, language: dotnet, objectkey: multipart.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -396,7 +418,8 @@ language: dotnet, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -423,9 +446,11 @@ http.status_code: 200, http.url: http://localhost:00000/my-bucket/, language: dotnet, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -453,9 +478,11 @@ http.url: http://localhost:00000/my-bucket/multipart.txt, language: dotnet, objectkey: multipart.txt, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 @@ -482,9 +509,11 @@ http.status_code: 204, http.url: http://localhost:00000/my-bucket/, language: dotnet, + peer.service: my-bucket, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.S3 + _dd.base_service: Samples.AWS.S3, + _dd.peer.service.source: bucketname }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.pre3.7.3.verified.txt b/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.pre3.7.3.verified.txt index d566c86518a9..ca9689c43235 100644 --- a/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.pre3.7.3.verified.txt +++ b/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.pre3.7.3.verified.txt @@ -1,4 +1,4 @@ -[ +[ { TraceId: Id_1, SpanId: Id_2, @@ -64,10 +64,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTopic, runtime-id: Guid_1, span.kind: producer, topicname: MyTopic, - _dd.base_service: Samples.AWS.SimpleNotificationService + _dd.base_service: Samples.AWS.SimpleNotificationService, + _dd.peer.service.source: topicname }, Metrics: { _dd.top_level: 1.0 @@ -95,10 +97,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTopic, runtime-id: Guid_1, span.kind: producer, topicname: MyTopic, - _dd.base_service: Samples.AWS.SimpleNotificationService + _dd.base_service: Samples.AWS.SimpleNotificationService, + _dd.peer.service.source: topicname }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.verified.txt b/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.verified.txt index 5861631f5be4..4a3cc659b4c5 100644 --- a/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.verified.txt +++ b/tracer/test/snapshots/AwsSnsTests.NetCore.SchemaV0.verified.txt @@ -1,4 +1,4 @@ -[ +[ { TraceId: Id_1, SpanId: Id_2, @@ -64,10 +64,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTopic, runtime-id: Guid_1, span.kind: producer, topicname: MyTopic, - _dd.base_service: Samples.AWS.SimpleNotificationService + _dd.base_service: Samples.AWS.SimpleNotificationService, + _dd.peer.service.source: topicname }, Metrics: { _dd.top_level: 1.0 @@ -95,10 +97,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyTopic, runtime-id: Guid_1, span.kind: producer, topicname: MyTopic, - _dd.base_service: Samples.AWS.SimpleNotificationService + _dd.base_service: Samples.AWS.SimpleNotificationService, + _dd.peer.service.source: topicname }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.pre3_7_300.verified.txt b/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.pre3_7_300.verified.txt index af5d1dbf462a..dd8f9b997f4f 100644 --- a/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.pre3_7_300.verified.txt +++ b/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.pre3_7_300.verified.txt @@ -1,4 +1,4 @@ -[ +[ { TraceId: Id_1, SpanId: Id_2, @@ -39,10 +39,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -70,10 +72,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -226,10 +230,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -288,10 +294,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -319,10 +327,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue2, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -381,10 +391,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue2, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -412,10 +424,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -474,10 +488,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -505,10 +521,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue2, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -567,10 +585,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue2, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -598,10 +618,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -660,10 +682,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -691,10 +715,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue2, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -753,10 +779,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue2, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -784,10 +812,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -815,10 +845,12 @@ http.status_code: 200, http.url: http://localhost:00000/000000000000/MyAsyncSQSQueue2, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.verified.txt b/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.verified.txt index 600129c34155..a988ccae64bd 100644 --- a/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.verified.txt +++ b/tracer/test/snapshots/AwsSqsTests.NetCore.SchemaV0.verified.txt @@ -1,4 +1,4 @@ -[ +[ { TraceId: Id_1, SpanId: Id_2, @@ -39,10 +39,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -70,10 +72,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -226,10 +230,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -288,10 +294,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -319,10 +327,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -381,10 +391,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -412,10 +424,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -474,10 +488,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -505,10 +521,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -567,10 +585,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -598,10 +618,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -660,10 +682,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -691,10 +715,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: producer, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -753,10 +779,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -784,10 +812,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue, queuename: MyAsyncSQSQueue, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 @@ -815,10 +845,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: MyAsyncSQSQueue2, queuename: MyAsyncSQSQueue2, runtime-id: Guid_1, span.kind: client, - _dd.base_service: Samples.AWS.SQS + _dd.base_service: Samples.AWS.SQS, + _dd.peer.service.source: queuename }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0.verified.txt b/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0.verified.txt index 52c13956bca4..fcb6f37180a8 100644 --- a/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0.verified.txt +++ b/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0.verified.txt @@ -62,10 +62,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: StepFunction, runtime-id: Guid_1, span.kind: producer, statemachinename: StepFunction, - _dd.base_service: Samples.AWS.StepFunctions + _dd.base_service: Samples.AWS.StepFunctions, + _dd.peer.service.source: statemachinename }, Metrics: { _dd.top_level: 1.0 diff --git a/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0_pre3_7_0.verified.txt b/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0_pre3_7_0.verified.txt index 52c13956bca4..fcb6f37180a8 100644 --- a/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0_pre3_7_0.verified.txt +++ b/tracer/test/snapshots/AwsStepFunctionsTests.NetCore.SchemaV0_pre3_7_0.verified.txt @@ -62,10 +62,12 @@ http.status_code: 200, http.url: http://localhost:00000/, language: dotnet, + peer.service: StepFunction, runtime-id: Guid_1, span.kind: producer, statemachinename: StepFunction, - _dd.base_service: Samples.AWS.StepFunctions + _dd.base_service: Samples.AWS.StepFunctions, + _dd.peer.service.source: statemachinename }, Metrics: { _dd.top_level: 1.0