From 4df22c56291c38c743b8c61c86046df3d75cae54 Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Fri, 3 Dec 2021 14:40:08 -0300 Subject: [PATCH 01/11] open-telemetry#1909 Added an option to use span name as datadog resource name. --- exporter/datadogexporter/config/config.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/exporter/datadogexporter/config/config.go b/exporter/datadogexporter/config/config.go index a2359da6c7c2..97404c542f8d 100644 --- a/exporter/datadogexporter/config/config.go +++ b/exporter/datadogexporter/config/config.go @@ -58,6 +58,11 @@ type APIConfig struct { // It can also be set through the `DD_SITE` environment variable. // The default value is "datadoghq.com". Site string `mapstructure:"site"` + + // If set to true the OpenTelemetry span name will used in the Datadog resource name. + // If set to false the resource name will be filled with the instrumentation library name + span kind. + // The default value is `false`. + SpanNameAsResourceName bool `mapstructure:"span_name_as_resource_name"` } // GetCensoredKey returns the API key censored for logging purposes From 7477ec5d1fe686d2702322a288fdfe737377e6fc Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Fri, 3 Dec 2021 15:54:50 -0300 Subject: [PATCH 02/11] open-telemetry#1909 - Added if statement to change the resource name in Datadog exporter. - Fixed tests --- exporter/datadogexporter/translate_traces.go | 11 +++++++++-- exporter/datadogexporter/translate_traces_test.go | 12 ++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/exporter/datadogexporter/translate_traces.go b/exporter/datadogexporter/translate_traces.go index 743ea53eed97..3823f7364178 100644 --- a/exporter/datadogexporter/translate_traces.go +++ b/exporter/datadogexporter/translate_traces.go @@ -292,7 +292,7 @@ func spanToDatadogSpan(s pdata.Span, span := &pb.Span{ TraceID: decodeAPMTraceID(s.TraceID().Bytes()), SpanID: decodeAPMSpanID(s.SpanID().Bytes()), - Name: remapDatadogSpanName(getDatadogSpanName(s, tags), spanNameMap), + Name: remapDatadogSpanName(getDatadogSpanName(s, tags, cfg.API.SpanNameAsResourceName), spanNameMap), Resource: resourceName, Service: normalizedServiceName, Start: int64(startTime), @@ -487,7 +487,14 @@ func decodeAPMId(id string) uint64 { return val } -func getDatadogSpanName(s pdata.Span, datadogTags map[string]string) string { +func getDatadogSpanName(s pdata.Span, datadogTags map[string]string, spanNameAsResourceName bool) string { + // Option created to maintain similarity with the OpenTelemetry semantic conventions + // https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions + // https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909 + if spanNameAsResourceName { + return s.Name() + } + // largely a port of logic here // https://github.com/open-telemetry/opentelemetry-python/blob/b2559409b2bf82e693f3e68ed890dd7fd1fa8eae/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py#L213 // Get span name by using instrumentation library name and span kind while backing off to span.kind diff --git a/exporter/datadogexporter/translate_traces_test.go b/exporter/datadogexporter/translate_traces_test.go index 1c8f5b7ff29f..bcbe5b309726 100644 --- a/exporter/datadogexporter/translate_traces_test.go +++ b/exporter/datadogexporter/translate_traces_test.go @@ -1055,12 +1055,12 @@ func TestSpanNameTranslation(t *testing.T) { "otel.library.name": "hyphenated-value", } - spanNameIl := getDatadogSpanName(span, ddIlTags) - spanNameDefault := getDatadogSpanName(span, ddNoIlTags) - spanNameOld := getDatadogSpanName(span, ddIlTagsOld) - spanNameCur := getDatadogSpanName(span, ddIlTagsCur) - spanNameUnusual := getDatadogSpanName(span, ddIlTagsUnusual) - spanNameHyphen := getDatadogSpanName(span, ddIlTagsHyphen) + spanNameIl := getDatadogSpanName(span, ddIlTags, false) + spanNameDefault := getDatadogSpanName(span, ddNoIlTags, false) + spanNameOld := getDatadogSpanName(span, ddIlTagsOld, false) + spanNameCur := getDatadogSpanName(span, ddIlTagsCur, false) + spanNameUnusual := getDatadogSpanName(span, ddIlTagsUnusual, false) + spanNameHyphen := getDatadogSpanName(span, ddIlTagsHyphen, false) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "il_name", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameIl) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "opentelemetry", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameDefault) From fa177652fb78277ce53750585b0ce8b9a825b356 Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Fri, 3 Dec 2021 16:18:37 -0300 Subject: [PATCH 03/11] Added test case to the new option in datadog exporter. --- exporter/datadogexporter/translate_traces_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/exporter/datadogexporter/translate_traces_test.go b/exporter/datadogexporter/translate_traces_test.go index bcbe5b309726..ebf18054e7ba 100644 --- a/exporter/datadogexporter/translate_traces_test.go +++ b/exporter/datadogexporter/translate_traces_test.go @@ -1028,7 +1028,8 @@ func TestSpanResourceTranslationRpcFallback(t *testing.T) { // ensure that the datadog span name uses IL name +kind when available and falls back to opetelemetry + kind func TestSpanNameTranslation(t *testing.T) { span := pdata.NewSpan() - span.SetName("Default Name") + spanName := "Default Name" + span.SetName(spanName) span.SetKind(pdata.SpanKindServer) ddIlTags := map[string]string{ @@ -1061,6 +1062,7 @@ func TestSpanNameTranslation(t *testing.T) { spanNameCur := getDatadogSpanName(span, ddIlTagsCur, false) spanNameUnusual := getDatadogSpanName(span, ddIlTagsUnusual, false) spanNameHyphen := getDatadogSpanName(span, ddIlTagsHyphen, false) + spanNameAsResourceName := getDatadogSpanName(span, ddIlTagsHyphen, true) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "il_name", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameIl) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "opentelemetry", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameDefault) @@ -1068,6 +1070,7 @@ func TestSpanNameTranslation(t *testing.T) { assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "current_value", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameCur) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "unusual_value", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameUnusual) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "hyphenated_value", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameHyphen) + assert.Equal(t, spanName, spanNameAsResourceName) } // ensure that the datadog span name uses IL name +kind when available and falls back to opetelemetry + kind From 9a841e3a6569a69a7a45af3c77aa1a7d8a4a7230 Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Tue, 7 Dec 2021 09:09:57 -0300 Subject: [PATCH 04/11] open-telemetry#1909 Added readme description of the option. --- exporter/datadogexporter/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/exporter/datadogexporter/README.md b/exporter/datadogexporter/README.md index df94f1262835..a5af2959b3c3 100644 --- a/exporter/datadogexporter/README.md +++ b/exporter/datadogexporter/README.md @@ -28,6 +28,15 @@ datadog: site: datadoghq.eu ``` + If you want to use the OpenTelemetry Span Name as the Datadog Resource Name you can set the `span_name_as_resource_name` variable to `true` (default is `false`). For more info on the downsides of this option check [this](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909) issue. + + ```yaml +datadog: + api: + key: "" + span_name_as_resource_name: true +``` + The hostname, environment, service and version can be set in the configuration for unified service tagging. The exporter will try to retrieve a hostname following the OpenTelemetry semantic conventions if there is one available. From 31189d4e5400af95ee4877c7ac73fda11326dd33 Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Tue, 7 Dec 2021 14:07:10 -0300 Subject: [PATCH 05/11] open-telemetry#1909 Change configuration place. --- exporter/datadogexporter/README.md | 3 ++- exporter/datadogexporter/config/config.go | 10 +++++----- exporter/datadogexporter/translate_traces.go | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/exporter/datadogexporter/README.md b/exporter/datadogexporter/README.md index a5af2959b3c3..b9fe46c2df29 100644 --- a/exporter/datadogexporter/README.md +++ b/exporter/datadogexporter/README.md @@ -34,7 +34,8 @@ datadog: datadog: api: key: "" - span_name_as_resource_name: true + traces: + span_name_as_resource_name: true ``` The hostname, environment, service and version can be set in the configuration for unified service tagging. diff --git a/exporter/datadogexporter/config/config.go b/exporter/datadogexporter/config/config.go index 97404c542f8d..467bf07c62a5 100644 --- a/exporter/datadogexporter/config/config.go +++ b/exporter/datadogexporter/config/config.go @@ -58,11 +58,6 @@ type APIConfig struct { // It can also be set through the `DD_SITE` environment variable. // The default value is "datadoghq.com". Site string `mapstructure:"site"` - - // If set to true the OpenTelemetry span name will used in the Datadog resource name. - // If set to false the resource name will be filled with the instrumentation library name + span kind. - // The default value is `false`. - SpanNameAsResourceName bool `mapstructure:"span_name_as_resource_name"` } // GetCensoredKey returns the API key censored for logging purposes @@ -158,6 +153,11 @@ type TracesConfig struct { // instrumentation:express.server: express // go.opentelemetry.io_contrib_instrumentation_net_http_otelhttp.client: http.client SpanNameRemappings map[string]string `mapstructure:"span_name_remappings"` + + // If set to true the OpenTelemetry span name will used in the Datadog resource name. + // If set to false the resource name will be filled with the instrumentation library name + span kind. + // The default value is `false`. + SpanNameAsResourceName bool `mapstructure:"span_name_as_resource_name"` } // TagsConfig defines the tag-related configuration diff --git a/exporter/datadogexporter/translate_traces.go b/exporter/datadogexporter/translate_traces.go index 80a2157ab443..b701e8728d46 100644 --- a/exporter/datadogexporter/translate_traces.go +++ b/exporter/datadogexporter/translate_traces.go @@ -292,7 +292,7 @@ func spanToDatadogSpan(s pdata.Span, span := &pb.Span{ TraceID: decodeAPMTraceID(s.TraceID().Bytes()), SpanID: decodeAPMSpanID(s.SpanID().Bytes()), - Name: remapDatadogSpanName(getDatadogSpanName(s, tags, cfg.API.SpanNameAsResourceName), spanNameMap), + Name: remapDatadogSpanName(getDatadogSpanName(s, tags, cfg.Traces.SpanNameAsResourceName), spanNameMap), Resource: resourceName, Service: normalizedServiceName, Start: int64(startTime), From 2d6032db01876cc220673e5f5bb2dd5c69426b89 Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Tue, 7 Dec 2021 14:25:21 -0300 Subject: [PATCH 06/11] open-telemetry#1909 Added option to config example. --- exporter/datadogexporter/example/config.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/exporter/datadogexporter/example/config.yaml b/exporter/datadogexporter/example/config.yaml index 3c3466842d60..3a43667892cd 100644 --- a/exporter/datadogexporter/example/config.yaml +++ b/exporter/datadogexporter/example/config.yaml @@ -148,6 +148,12 @@ exporters: # instrumentation:express.server: express # go.opentelemetry.io_contrib_instrumentation_net_http_otelhttp.client: http.client + ## @param span_name_as_resource_name - use OpenTelemetry semantic convention for span naming - optional + ## Option created to maintain similarity with the OpenTelemetry semantic conventions as discussed in the issue below. + ## https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions + ## https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909 + # span_name_as_resource_name: true + service: pipelines: From 151d4c3108f0bf99698a4d19868680163969308c Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Wed, 8 Dec 2021 14:54:49 -0300 Subject: [PATCH 07/11] Removed boolean option from function. Added test to cover option use. --- exporter/datadogexporter/translate_traces.go | 16 +++---- .../datadogexporter/translate_traces_test.go | 46 +++++++++++++++---- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/exporter/datadogexporter/translate_traces.go b/exporter/datadogexporter/translate_traces.go index b701e8728d46..1f5e6ff136e1 100644 --- a/exporter/datadogexporter/translate_traces.go +++ b/exporter/datadogexporter/translate_traces.go @@ -289,10 +289,15 @@ func spanToDatadogSpan(s pdata.Span, resourceName := getDatadogResourceName(s, tags) + name := s.Name() + if !cfg.Traces.SpanNameAsResourceName { + name = getDatadogSpanName(s, tags) + } + span := &pb.Span{ TraceID: decodeAPMTraceID(s.TraceID().Bytes()), SpanID: decodeAPMSpanID(s.SpanID().Bytes()), - Name: remapDatadogSpanName(getDatadogSpanName(s, tags, cfg.Traces.SpanNameAsResourceName), spanNameMap), + Name: remapDatadogSpanName(name, spanNameMap), Resource: resourceName, Service: normalizedServiceName, Start: int64(startTime), @@ -487,14 +492,7 @@ func decodeAPMId(id string) uint64 { return val } -func getDatadogSpanName(s pdata.Span, datadogTags map[string]string, spanNameAsResourceName bool) string { - // Option created to maintain similarity with the OpenTelemetry semantic conventions - // https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions - // https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909 - if spanNameAsResourceName { - return s.Name() - } - +func getDatadogSpanName(s pdata.Span, datadogTags map[string]string) string { // largely a port of logic here // https://github.com/open-telemetry/opentelemetry-python/blob/b2559409b2bf82e693f3e68ed890dd7fd1fa8eae/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py#L213 // Get span name by using instrumentation library name and span kind while backing off to span.kind diff --git a/exporter/datadogexporter/translate_traces_test.go b/exporter/datadogexporter/translate_traces_test.go index 6f996261c226..0237718a2c76 100644 --- a/exporter/datadogexporter/translate_traces_test.go +++ b/exporter/datadogexporter/translate_traces_test.go @@ -1028,8 +1028,7 @@ func TestSpanResourceTranslationRpcFallback(t *testing.T) { // ensure that the datadog span name uses IL name +kind when available and falls back to opetelemetry + kind func TestSpanNameTranslation(t *testing.T) { span := pdata.NewSpan() - spanName := "Default Name" - span.SetName(spanName) + span.SetName("Default Name") span.SetKind(pdata.SpanKindServer) ddIlTags := map[string]string{ @@ -1056,13 +1055,12 @@ func TestSpanNameTranslation(t *testing.T) { "otel.library.name": "hyphenated-value", } - spanNameIl := getDatadogSpanName(span, ddIlTags, false) - spanNameDefault := getDatadogSpanName(span, ddNoIlTags, false) - spanNameOld := getDatadogSpanName(span, ddIlTagsOld, false) - spanNameCur := getDatadogSpanName(span, ddIlTagsCur, false) - spanNameUnusual := getDatadogSpanName(span, ddIlTagsUnusual, false) - spanNameHyphen := getDatadogSpanName(span, ddIlTagsHyphen, false) - spanNameAsResourceName := getDatadogSpanName(span, ddIlTagsHyphen, true) + spanNameIl := getDatadogSpanName(span, ddIlTags) + spanNameDefault := getDatadogSpanName(span, ddNoIlTags) + spanNameOld := getDatadogSpanName(span, ddIlTagsOld) + spanNameCur := getDatadogSpanName(span, ddIlTagsCur) + spanNameUnusual := getDatadogSpanName(span, ddIlTagsUnusual) + spanNameHyphen := getDatadogSpanName(span, ddIlTagsHyphen) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "il_name", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameIl) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "opentelemetry", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameDefault) @@ -1070,7 +1068,6 @@ func TestSpanNameTranslation(t *testing.T) { assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "current_value", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameCur) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "unusual_value", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameUnusual) assert.Equal(t, strings.ToLower(fmt.Sprintf("%s.%s", "hyphenated_value", strings.TrimPrefix(pdata.SpanKindServer.String(), "SPAN_KIND_"))), spanNameHyphen) - assert.Equal(t, spanName, spanNameAsResourceName) } // ensure that the datadog span name uses IL name +kind when available and falls back to opetelemetry + kind @@ -1532,3 +1529,32 @@ func TestSpanRateLimitTag(t *testing.T) { assert.Equal(t, 0.5, outputTraces[0].Traces[0].Spans[0].Metrics["_sample_rate"]) } + +func TestTracesSpanNamingOption(t *testing.T) { + hostname := "testhostname" + denylister := newDenylister([]string{}) + + // generate mock trace, span and parent span ids + mockTraceID := [16]byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F} + mockSpanID := [8]byte{0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8} + mockParentSpanID := [8]byte{0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xE9, 0xE8} + + mockEndTime := time.Now().Round(time.Second) + + // create mock resource span data + // toggle on errors and custom service naming to test edge case code paths + rs := NewResourceSpansData(mockTraceID, mockSpanID, mockParentSpanID, pdata.StatusCodeUnset, false, mockEndTime) + + // start with span name as resource name set to true + cfgSpanNameAsResourceName := config.Config{ + Traces: config.TracesConfig{ + SpanNameAsResourceName: true, + }, + } + + // translate mocks to datadog traces + datadogPayloadSpanNameAsResourceName := resourceSpansToDatadogSpans(rs, hostname, &cfgSpanNameAsResourceName, denylister, map[string]string{}) + + // ensure the resource name is replaced with the span name when the option is set + assert.Equal(t, "End-To-End Here", datadogPayloadSpanNameAsResourceName.Traces[0].Spans[0].Name) +} \ No newline at end of file From 48c496d863c4718763c80cf362e42634823b8979 Mon Sep 17 00:00:00 2001 From: gfonseca-tc Date: Thu, 9 Dec 2021 11:39:07 -0300 Subject: [PATCH 08/11] Linted test code. --- exporter/datadogexporter/translate_traces_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exporter/datadogexporter/translate_traces_test.go b/exporter/datadogexporter/translate_traces_test.go index 0237718a2c76..4ea7187f650c 100644 --- a/exporter/datadogexporter/translate_traces_test.go +++ b/exporter/datadogexporter/translate_traces_test.go @@ -1544,7 +1544,7 @@ func TestTracesSpanNamingOption(t *testing.T) { // create mock resource span data // toggle on errors and custom service naming to test edge case code paths rs := NewResourceSpansData(mockTraceID, mockSpanID, mockParentSpanID, pdata.StatusCodeUnset, false, mockEndTime) - + // start with span name as resource name set to true cfgSpanNameAsResourceName := config.Config{ Traces: config.TracesConfig{ @@ -1554,7 +1554,7 @@ func TestTracesSpanNamingOption(t *testing.T) { // translate mocks to datadog traces datadogPayloadSpanNameAsResourceName := resourceSpansToDatadogSpans(rs, hostname, &cfgSpanNameAsResourceName, denylister, map[string]string{}) - + // ensure the resource name is replaced with the span name when the option is set assert.Equal(t, "End-To-End Here", datadogPayloadSpanNameAsResourceName.Traces[0].Spans[0].Name) -} \ No newline at end of file +} From 9d7e48fe2e1e6ef214d02ce10adfd9eb98504f50 Mon Sep 17 00:00:00 2001 From: Gabriel Fonseca Date: Wed, 5 Jan 2022 16:29:21 -0300 Subject: [PATCH 09/11] Added entry to changelog. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a0d014e78bc..f2d847b96804 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - `prometheusremotewriteexporter`: Handling Staleness flag from OTLP (#6679) - `mysqlreceiver`: Add Integration test (#6916) - `datadogexporter`: Add compatibility with ECS Fargate semantic conventions (#6670) +- `datadogexporter`: Add configuration option to use OTel span name into the Datatog resource name (#6611) - `k8s_observer`: discover k8s.node endpoints (#6820) - `redisreceiver`: Add missing description fields to keyspace metrics (#6940) - `kafkaexporter`: Allow controlling Kafka acknowledgment behaviour (#6301) From dfbd8d3c31626bd1c3b107bd42ed4628eeaae6d2 Mon Sep 17 00:00:00 2001 From: gfonseca-tc <93946129+gfonseca-tc@users.noreply.github.com> Date: Thu, 6 Jan 2022 10:09:12 -0300 Subject: [PATCH 10/11] Update exporter/datadogexporter/README.md Co-authored-by: Alex Boten --- exporter/datadogexporter/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporter/datadogexporter/README.md b/exporter/datadogexporter/README.md index b9fe46c2df29..fd24c42127ea 100644 --- a/exporter/datadogexporter/README.md +++ b/exporter/datadogexporter/README.md @@ -28,7 +28,7 @@ datadog: site: datadoghq.eu ``` - If you want to use the OpenTelemetry Span Name as the Datadog Resource Name you can set the `span_name_as_resource_name` variable to `true` (default is `false`). For more info on the downsides of this option check [this](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909) issue. + If you want to use the OpenTelemetry Span Name as the Datadog Resource Name you can set the `span_name_as_resource_name` configuration option to `true` (default is `false`). For more info on the downsides of this option check [this](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909) issue. ```yaml datadog: From 7327f09108ce76ce7771c61ced0abc65ba78dad3 Mon Sep 17 00:00:00 2001 From: gfonseca-tc <93946129+gfonseca-tc@users.noreply.github.com> Date: Thu, 6 Jan 2022 10:09:39 -0300 Subject: [PATCH 11/11] Update exporter/datadogexporter/example/config.yaml Co-authored-by: Alex Boten --- exporter/datadogexporter/example/config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/exporter/datadogexporter/example/config.yaml b/exporter/datadogexporter/example/config.yaml index 3a43667892cd..20089322de33 100644 --- a/exporter/datadogexporter/example/config.yaml +++ b/exporter/datadogexporter/example/config.yaml @@ -152,6 +152,7 @@ exporters: ## Option created to maintain similarity with the OpenTelemetry semantic conventions as discussed in the issue below. ## https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions ## https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909 + # # span_name_as_resource_name: true