[Tracing] Update mapping from Datadog to OTLP spans#8385
[Tracing] Update mapping from Datadog to OTLP spans#8385zacharycmontoya wants to merge 4 commits intomasterfrom
Conversation
Snapshots difference summaryThe following differences have been observed in committed snapshots. It is meant to help the reviewer. 1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "DeprecatedHttpStatusTagName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "InnerSpanError"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "InnerSpanOk"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "InnerSpanUpdated"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "OperationNameRootSpan"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
+ {
+ "key": "runtime-id",
+ "value": {
+ "stringValue": "Guid_1"
+ }
+ },
5 occurrences of : - },
- {
- "key": "runtime-id",
- "value": {
- "stringValue": "Guid_1"
- }
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "http.server.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "web"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "http.client.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "redis.query"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "db"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "kafka.receive"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "kafka.receive"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "web"
+ }
+ },
2 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "kafka.receive"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "aws.s3.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "aws.client.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
1 occurrences of : - "key": "span.kind",
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "grpc.client.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
+ {
+ "key": "span.kind",
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "grpc.server.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "web"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "aws.my_function.invoke"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "datasource.invoke"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "web"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "graphql.server.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "web"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "amqp.server.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "web"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "server.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "web"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "amqp.client.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "client.request"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "http"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "consumer"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "producer"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceName"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "servicenameoverride"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "operationnameoverride"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "ResourceNameOverride"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "SpanTypeOverride"
+ }
+ },
+ {
+ "key": "runtime-id",
+ "value": {
+ "stringValue": "Guid_1"
+ }
+ },
2 occurrences of : - {
- "key": "runtime-id",
- "value": {
- "stringValue": "Guid_1"
- }
- },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "Response"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "saying_hello"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "SayHello"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
+ {
+ "key": "runtime-id",
+ "value": {
+ "stringValue": "Guid_1"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "SayHello2"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
+ {
+ "key": "runtime-id",
+ "value": {
+ "stringValue": "Guid_1"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "SayHello3"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
+ {
+ "key": "runtime-id",
+ "value": {
+ "stringValue": "Guid_1"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "samples.opentelemetrysdk"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "service.name should be the DefaultServiceName value"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
+ {
+ "key": "runtime-id",
+ "value": {
+ "stringValue": "Guid_1"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "SomeHttpSpan"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "StartActiveSpan.Child"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "StartRootSpan"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "StartSpan"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "myservicename"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "StartSpan2"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
1 occurrences of : + {
+ "key": "service.name",
+ "value": {
+ "stringValue": "samples.opentelemetrysdk"
+ }
+ },
+ {
+ "key": "operation.name",
+ "value": {
+ "stringValue": "internal"
+ }
+ },
+ {
+ "key": "resource.name",
+ "value": {
+ "stringValue": "Transform"
+ }
+ },
+ {
+ "key": "span.type",
+ "value": {
+ "stringValue": "custom"
+ }
+ },
+ {
+ "key": "runtime-id",
+ "value": {
+ "stringValue": "Guid_1"
+ }
+ },
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 069cf30216
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| var tagWriter = new TagWriter(writeKeyValue, tagProcessors, count, limit); | ||
| spanModel.Span.Tags.EnumerateTags(ref tagWriter); | ||
| count += tagWriter.Count; |
There was a problem hiding this comment.
Stop double-counting attributes before writing metrics
In EmitAttributesFromSpan, TagWriter.Count is initialized with the current count, so after the new service/operation/resource/type attributes are written, count += tagWriter.Count double-counts already-emitted attributes. This inflated count is then passed to the metrics writer, which causes metric attributes to be dropped earlier than limit (for example, with a low limit, metrics can all be dropped even when there is still real capacity left).
Useful? React with 👍 / 👎.
BenchmarksBenchmark execution time: 2026-03-27 22:26:56 Comparing candidate commit 069cf30 in PR branch Found 9 performance improvements and 7 performance regressions! Performance is the same for 259 metrics, 13 unstable metrics.
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8385) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (72ms) : 69, 74
master - mean (72ms) : 70, 74
section Bailout
This PR (8385) - mean (76ms) : 74, 78
master - mean (76ms) : 74, 78
section CallTarget+Inlining+NGEN
This PR (8385) - mean (1,075ms) : 1031, 1119
master - mean (1,077ms) : 1025, 1129
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (113ms) : 109, 116
master - mean (113ms) : 110, 116
section Bailout
This PR (8385) - mean (114ms) : 111, 117
master - mean (114ms) : 111, 116
section CallTarget+Inlining+NGEN
This PR (8385) - mean (799ms) : 780, 818
master - mean (795ms) : 770, 820
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (100ms) : 97, 103
master - mean (100ms) : 96, 104
section Bailout
This PR (8385) - mean (101ms) : 97, 104
master - mean (100ms) : 98, 103
section CallTarget+Inlining+NGEN
This PR (8385) - mean (948ms) : 913, 983
master - mean (951ms) : 902, 1000
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (99ms) : 95, 102
master - mean (99ms) : 96, 102
section Bailout
This PR (8385) - mean (99ms) : 97, 101
master - mean (100ms) : 98, 102
section CallTarget+Inlining+NGEN
This PR (8385) - mean (830ms) : 792, 869
master - mean (832ms) : 791, 872
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (204ms) : 198, 210
master - mean (219ms) : 208, 230
section Bailout
This PR (8385) - mean (210ms) : 203, 216
master - mean (225ms) : 212, 237
section CallTarget+Inlining+NGEN
This PR (8385) - mean (1,206ms) : 1156, 1256
master - mean (1,253ms) : 1197, 1309
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (296ms) : 287, 305
master - mean (315ms) : 298, 332
section Bailout
This PR (8385) - mean (294ms) : 288, 301
master - mean (313ms) : 299, 327
section CallTarget+Inlining+NGEN
This PR (8385) - mean (991ms) : 960, 1022
master - mean (1,038ms) : 1003, 1072
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (289ms) : 278, 301
master - mean (311ms) : 295, 326
section Bailout
This PR (8385) - mean (291ms) : 280, 301
master - mean (315ms) : 294, 335
section CallTarget+Inlining+NGEN
This PR (8385) - mean (1,179ms) : 1145, 1212
master - mean (1,220ms) : 1144, 1296
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8385) - mean (287ms) : 277, 297
master - mean (314ms) : 291, 338
section Bailout
This PR (8385) - mean (288ms) : 280, 296
master - mean (313ms) : 292, 334
section CallTarget+Inlining+NGEN
This PR (8385) - mean (1,067ms) : 990, 1144
master - mean (1,184ms) : 1112, 1257
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Summary of changes
Add core Datadog semantics as span attributes. This ensures that the core semantics are identified when the Datadog Agent / backend receives OTLP spans and translates them into Datadog spans that power the backend.
Reason for change
We should keep the same Datadog experience regardless of the tracing protocol used. These changes facilitate that.
Implementation details
Updates
Datadog.Trace.OpenTelemetry.OtlpMapper.EmitAttributesFromSpanto add several span attributes sourced fromDatadog.Trace.Spanproperties:Span.ServiceName=>OtlpSpan.Attributes["service.name"]Span.OperationName=>OtlpSpan.Attributes["operation.name"]Span.ResourceName=>OtlpSpan.Attributes["resource.name"]Span.Type=>OtlpSpan.Attributes["span.type"]Test coverage
Datadog.Trace.OpenTelemetry.OtlpMapperwhich handles the mapping from Datadog-specific concepts into OTLP attributesOpenTelemetrySdkTestsOther details
N/A