Skip to content

Commit 6e6c031

Browse files
committed
[receiver/datadog] Bump Semantic Conventions
This addresses part of the concerns raised in open-telemetry#36924. Up until now, datadogreceiver used v1.16 of the semantic conventions, leading to mismatches in field names.
1 parent d50c5cc commit 6e6c031

File tree

5 files changed

+36
-18
lines changed

5 files changed

+36
-18
lines changed

receiver/datadogreceiver/internal/translator/series_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/stretchr/testify/require"
1515
"go.opentelemetry.io/collector/component"
1616
"go.opentelemetry.io/collector/pdata/pmetric"
17+
semconv "go.opentelemetry.io/collector/semconv/v1.27.0"
1718
)
1819

1920
func strPtr(s string) *string { return &s }
@@ -400,13 +401,13 @@ func TestTranslateSeriesV2(t *testing.T) {
400401
requireMetricAndDataPointCounts(t, result, 1, 0)
401402

402403
require.Equal(t, 1, result.ResourceMetrics().Len())
403-
v, exists := result.ResourceMetrics().At(0).Resource().Attributes().Get("host.name")
404+
v, exists := result.ResourceMetrics().At(0).Resource().Attributes().Get(semconv.AttributeHostName)
404405
require.True(t, exists)
405406
require.Equal(t, "Host1", v.AsString())
406-
v, exists = result.ResourceMetrics().At(0).Resource().Attributes().Get("deployment.environment")
407+
v, exists = result.ResourceMetrics().At(0).Resource().Attributes().Get(semconv.AttributeDeploymentEnvironmentName)
407408
require.True(t, exists)
408409
require.Equal(t, "tag1", v.AsString())
409-
v, exists = result.ResourceMetrics().At(0).Resource().Attributes().Get("service.version")
410+
v, exists = result.ResourceMetrics().At(0).Resource().Attributes().Get(semconv.AttributeServiceVersion)
410411
require.True(t, exists)
411412
require.Equal(t, "tag2", v.AsString())
412413

receiver/datadogreceiver/internal/translator/tags.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,22 @@ import (
88
"sync"
99

1010
"go.opentelemetry.io/collector/pdata/pcommon"
11-
semconv "go.opentelemetry.io/otel/semconv/v1.16.0"
11+
semconv "go.opentelemetry.io/otel/semconv/v1.27.0"
1212
)
1313

1414
// See:
1515
// https://docs.datadoghq.com/opentelemetry/schema_semantics/semantic_mapping/
1616
// https://github.com/DataDog/opentelemetry-mapping-go/blob/main/pkg/otlp/attributes/attributes.go
1717
var datadogKnownResourceAttributes = map[string]string{
18-
"env": string(semconv.DeploymentEnvironmentKey),
18+
"env": string(semconv.DeploymentEnvironmentNameKey),
1919
"service": string(semconv.ServiceNameKey),
2020
"version": string(semconv.ServiceVersionKey),
2121

2222
// Container-related attributes
2323
"container_id": string(semconv.ContainerIDKey),
2424
"container_name": string(semconv.ContainerNameKey),
2525
"image_name": string(semconv.ContainerImageNameKey),
26-
"image_tag": string(semconv.ContainerImageTagKey),
26+
"image_tag": string(semconv.ContainerImageTagsKey),
2727
"runtime": string(semconv.ContainerRuntimeKey),
2828

2929
// Cloud-related attributes
@@ -136,8 +136,12 @@ func tagsToAttributes(tags []string, host string, stringPool *StringPool) attrib
136136
for _, tag := range tags {
137137
key, val = translateDatadogTagToKeyValuePair(tag)
138138
if attr, ok := datadogKnownResourceAttributes[key]; ok {
139-
val = stringPool.Intern(val) // No need to intern the key if we already have it
140-
attrs.resource.PutStr(attr, val)
139+
val = stringPool.Intern(val) // No need to intern the key if we already have it
140+
if attr == string(semconv.ContainerImageTagsKey) { // type: string[]
141+
attrs.resource.PutEmptySlice(attr).AppendEmpty().SetStr(val)
142+
} else {
143+
attrs.resource.PutStr(attr, val)
144+
}
141145
} else {
142146
key = stringPool.Intern(translateDatadogKeyToOTel(key))
143147
val = stringPool.Intern(val)

receiver/datadogreceiver/internal/translator/tags_test.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"github.com/stretchr/testify/assert"
1010
"go.opentelemetry.io/collector/pdata/pcommon"
11+
semconv "go.opentelemetry.io/collector/semconv/v1.27.0"
1112
)
1213

1314
func TestGetMetricAttributes(t *testing.T) {
@@ -32,7 +33,7 @@ func TestGetMetricAttributes(t *testing.T) {
3233
tags: []string{},
3334
host: "host",
3435
expectedResourceAttrs: newMapFromKV(t, map[string]any{
35-
"host.name": "host",
36+
semconv.AttributeHostName: "host",
3637
}),
3738
expectedScopeAttrs: pcommon.NewMap(),
3839
expectedDpAttrs: pcommon.NewMap(),
@@ -42,10 +43,10 @@ func TestGetMetricAttributes(t *testing.T) {
4243
tags: []string{"env:prod", "service:my-service", "version:1.0"},
4344
host: "host",
4445
expectedResourceAttrs: newMapFromKV(t, map[string]any{
45-
"host.name": "host",
46-
"deployment.environment": "prod",
47-
"service.name": "my-service",
48-
"service.version": "1.0",
46+
semconv.AttributeHostName: "host",
47+
semconv.AttributeDeploymentEnvironmentName: "prod",
48+
semconv.AttributeServiceName: "my-service",
49+
semconv.AttributeServiceVersion: "1.0",
4950
}),
5051
expectedScopeAttrs: pcommon.NewMap(),
5152
expectedDpAttrs: pcommon.NewMap(),
@@ -55,8 +56,8 @@ func TestGetMetricAttributes(t *testing.T) {
5556
tags: []string{"env:prod", "foo"},
5657
host: "host",
5758
expectedResourceAttrs: newMapFromKV(t, map[string]any{
58-
"host.name": "host",
59-
"deployment.environment": "prod",
59+
semconv.AttributeHostName: "host",
60+
semconv.AttributeDeploymentEnvironmentName: "prod",
6061
}),
6162
expectedScopeAttrs: pcommon.NewMap(),
6263
expectedDpAttrs: newMapFromKV(t, map[string]any{
@@ -148,3 +149,15 @@ func TestTranslateDataDogKeyToOtel(t *testing.T) {
148149
})
149150
}
150151
}
152+
153+
func TestImageTags(t *testing.T) {
154+
// make sure container.image.tags is a string[]
155+
expected := "[\"tag1\"]"
156+
tags := []string{"env:prod", "foo", "image_tag:tag1"}
157+
host := "host"
158+
pool := newStringPool()
159+
160+
attrs := tagsToAttributes(tags, host, pool)
161+
imageTags, _ := attrs.resource.Get(semconv.AttributeContainerImageTags)
162+
assert.Equal(t, expected, imageTags.AsString())
163+
}

receiver/datadogreceiver/internal/translator/traces_translator.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"github.com/hashicorp/golang-lru/v2/simplelru"
2121
"go.opentelemetry.io/collector/pdata/pcommon"
2222
"go.opentelemetry.io/collector/pdata/ptrace"
23-
semconv "go.opentelemetry.io/otel/semconv/v1.16.0"
23+
semconv "go.opentelemetry.io/otel/semconv/v1.27.0"
2424
oteltrace "go.opentelemetry.io/otel/trace"
2525
"go.uber.org/zap"
2626
"google.golang.org/protobuf/proto"
@@ -98,7 +98,7 @@ func ToTraces(logger *zap.Logger, payload *pb.TracerPayload, req *http.Request,
9898
string(semconv.ContainerIDKey): payload.ContainerID,
9999
string(semconv.TelemetrySDKLanguageKey): payload.LanguageName,
100100
string(semconv.ProcessRuntimeVersionKey): payload.LanguageVersion,
101-
string(semconv.DeploymentEnvironmentKey): payload.Env,
101+
string(semconv.DeploymentEnvironmentNameKey): payload.Env,
102102
string(semconv.HostNameKey): payload.Hostname,
103103
string(semconv.ServiceVersionKey): payload.AppVersion,
104104
string(semconv.TelemetrySDKNameKey): "Datadog",

receiver/datadogreceiver/internal/translator/traces_translator_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
"github.com/stretchr/testify/require"
1818
vmsgp "github.com/vmihailenco/msgpack/v5"
1919
"go.opentelemetry.io/collector/pdata/pcommon"
20-
semconv "go.opentelemetry.io/otel/semconv/v1.16.0"
20+
semconv "go.opentelemetry.io/otel/semconv/v1.27.0"
2121
"go.uber.org/zap"
2222
"google.golang.org/protobuf/proto"
2323

0 commit comments

Comments
 (0)