Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions internal/elasticattr/attributes.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,6 @@ const (
FaaSExecution = "faas.execution"
FaaSTriggerRequestID = "faas.trigger.request_id"
HostHostName = "host.hostname"
HostOSPlatform = "host.os.platform"
ProcessRuntimeName = "process.runtime.name"
ProcessRuntimeVersion = "process.runtime.version"
ServiceLanguageName = "service.language.name"
ServiceLanguageVersion = "service.language.version"
ServiceRuntimeName = "service.runtime.name"
ServiceRuntimeVersion = "service.runtime.version"
ServiceOriginID = "service.origin.id"
ServiceOriginName = "service.origin.name"
ServiceOriginVersion = "service.origin.version"
Expand Down
14 changes: 5 additions & 9 deletions processor/elasticapmprocessor/internal/ecs/ecs_translation.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ import (
"strconv"
"strings"

"github.com/elastic/opentelemetry-collector-components/internal/elasticattr"
"go.opentelemetry.io/collector/pdata/pcommon"
semconv26 "go.opentelemetry.io/otel/semconv/v1.26.0"
semconv "go.opentelemetry.io/otel/semconv/v1.27.0"

"github.com/elastic/opentelemetry-collector-components/internal/elasticattr"
)

// Supported ECS resource attributes
Expand Down Expand Up @@ -181,12 +182,8 @@ func isSupportedAttribute(attr string) bool {
string(semconv.ServiceVersionKey),
string(semconv.ServiceInstanceIDKey),
string(semconv.ServiceNamespaceKey),
elasticattr.ServiceLanguageName,
elasticattr.ServiceLanguageVersion,
elasticattr.ServiceFrameworkName,
elasticattr.ServiceFrameworkVersion,
elasticattr.ServiceRuntimeName,
elasticattr.ServiceRuntimeVersion,
elasticattr.ServiceOriginID,
elasticattr.ServiceOriginName,
elasticattr.ServiceOriginVersion,
Expand Down Expand Up @@ -246,8 +243,7 @@ func isSupportedAttribute(attr string) bool {
string(semconv.HostIDKey),
string(semconv.HostTypeKey),
string(semconv.HostArchKey),
string(semconv.HostIPKey),
elasticattr.HostOSPlatform:
string(semconv.HostIPKey):
return true

// process.*
Expand All @@ -256,8 +252,8 @@ func isSupportedAttribute(attr string) bool {
string(semconv.ProcessExecutableNameKey),
string(semconv.ProcessCommandLineKey),
string(semconv.ProcessExecutablePathKey),
elasticattr.ProcessRuntimeName,
elasticattr.ProcessRuntimeVersion,
string(semconv.ProcessRuntimeNameKey),
string(semconv.ProcessRuntimeVersionKey),
string(semconv.ProcessOwnerKey):
return true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,58 @@ func TestTranslateResourceMetadata(t *testing.T) {
wantKey: "labels.x_y_z_w",
wantAbsent: `x.y*z"w`,
},
{
name: "supported telemetry sdk language",
inputKey: string(semconv.TelemetrySDKLanguageKey),
inputVal: "dotnet",
wantKey: string(semconv.TelemetrySDKLanguageKey),
},
{
name: "supported telemetry sdk version",
inputKey: string(semconv.TelemetrySDKVersionKey),
inputVal: "8.0.0",
wantKey: string(semconv.TelemetrySDKVersionKey),
},
{
name: "supported process runtime name",
inputKey: string(semconv.ProcessRuntimeNameKey),
inputVal: "node",
wantKey: string(semconv.ProcessRuntimeNameKey),
},
{
name: "supported process runtime version",
inputKey: string(semconv.ProcessRuntimeVersionKey),
inputVal: "20.11.1",
wantKey: string(semconv.ProcessRuntimeVersionKey),
},
{
name: "legacy service language name moved to labels",
inputKey: "service.language.name",
inputVal: "ecmascript",
wantKey: "labels.service_language_name",
wantAbsent: "service.language.name",
},
{
name: "legacy service language version moved to labels",
inputKey: "service.language.version",
inputVal: "20",
wantKey: "labels.service_language_version",
wantAbsent: "service.language.version",
},
{
name: "legacy service runtime name moved to labels",
inputKey: "service.runtime.name",
inputVal: "node",
wantKey: "labels.service_runtime_name",
wantAbsent: "service.runtime.name",
},
{
name: "legacy service runtime version moved to labels",
inputKey: "service.runtime.version",
inputVal: "20.11.1",
wantKey: "labels.service_runtime_version",
wantAbsent: "service.runtime.version",
},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,6 @@ resourceLogs:
- key: host.arch
value:
stringValue: amd64
# host.* elastic attributes
- key: host.os.platform
value:
stringValue: linux
# process.* attributes
- key: process.pid
value:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ resourceLogs:
- key: service.namespace
value:
stringValue: production
- key: service.language.name
- key: labels.service_language_name
value:
stringValue: go
- key: service.language.version
- key: labels.service_language_version
value:
stringValue: 1.21.0
- key: service.framework.name
Expand All @@ -56,10 +56,10 @@ resourceLogs:
- key: service.framework.version
value:
stringValue: 1.9.0
- key: service.runtime.name
- key: labels.service_runtime_name
value:
stringValue: go
- key: service.runtime.version
- key: labels.service_runtime_version
value:
stringValue: go1.21.0
- key: service.origin.id
Expand Down Expand Up @@ -179,9 +179,6 @@ resourceLogs:
- key: host.arch
value:
stringValue: amd64
- key: host.os.platform
value:
stringValue: linux
- key: process.pid
value:
intValue: "12345"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,6 @@ resourceMetrics:
- key: host.arch
value:
stringValue: amd64
# host.* elastic attributes
- key: host.os.platform
value:
stringValue: linux
# process.* attributes
- key: process.pid
value:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,6 @@ resourceMetrics:
- key: host.name
value:
stringValue: node-1
- key: host.os.platform
value:
stringValue: linux
- key: host.type
value:
stringValue: t3.medium
Expand Down Expand Up @@ -179,6 +176,18 @@ resourceMetrics:
- key: labels.other_value
value:
stringValue: foo
- key: labels.service_language_name
value:
stringValue: go
- key: labels.service_language_version
value:
stringValue: 1.21.0
- key: labels.service_runtime_name
value:
stringValue: go
- key: labels.service_runtime_version
value:
stringValue: go1.21.0
- key: labels.unsupported_key
value:
stringValue: foo
Expand Down Expand Up @@ -257,12 +266,6 @@ resourceMetrics:
- key: service.instance.id
value:
stringValue: instance-123
- key: service.language.name
value:
stringValue: go
- key: service.language.version
value:
stringValue: 1.21.0
- key: service.name
value:
stringValue: test-service
Expand All @@ -278,12 +281,6 @@ resourceMetrics:
- key: service.origin.version
value:
stringValue: 2.0.0
- key: service.runtime.name
value:
stringValue: go
- key: service.runtime.version
value:
stringValue: go1.21.0
- key: service.target.name
value:
stringValue: target-service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,6 @@ resourceSpans:
- key: host.arch
value:
stringValue: amd64
# host.* elastic attributes
- key: host.os.platform
value:
stringValue: linux
# process.* attributes
- key: process.pid
value:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ resourceSpans:
- key: service.namespace
value:
stringValue: production
- key: service.language.name
- key: labels.service_language_name
value:
stringValue: go
- key: service.language.version
- key: labels.service_language_version
value:
stringValue: 1.21.0
- key: service.framework.name
Expand All @@ -53,10 +53,10 @@ resourceSpans:
- key: service.framework.version
value:
stringValue: 1.9.0
- key: service.runtime.name
- key: labels.service_runtime_name
value:
stringValue: go
- key: service.runtime.version
- key: labels.service_runtime_version
value:
stringValue: go1.21.0
- key: service.origin.id
Expand Down Expand Up @@ -179,9 +179,6 @@ resourceSpans:
- key: host.arch
value:
stringValue: amd64
- key: host.os.platform
value:
stringValue: linux
- key: process.pid
value:
intValue: "12345"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,6 @@ func SetDerivedResourceAttributes(event *modelpb.APMEvent, attributes pcommon.Ma
attributes.PutStr(elasticattr.AgentName, event.Agent.Name)
attributes.PutStr(elasticattr.AgentVersion, event.Agent.Version)
}

if event.Service != nil {
if event.Service.Language != nil {
putNonEmptyStr(attributes, elasticattr.ServiceLanguageName, event.Service.Language.Name)
putNonEmptyStr(attributes, elasticattr.ServiceLanguageVersion, event.Service.Language.Version)
}
}
}

// SetDerivedFieldsForMetrics sets fields that are NOT part of OTel for metrics. These fields are derived by the Enrichment lib in case of OTLP input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,10 +413,6 @@ func SetElasticSpecificResourceAttributes(event *modelpb.APMEvent, attributesMap
putNonEmptyStr(attributesMap, elasticattr.ServiceFrameworkName, event.Service.Framework.Name)
putNonEmptyStr(attributesMap, elasticattr.ServiceFrameworkVersion, event.Service.Framework.Version)
}
if event.Service.Runtime != nil {
putNonEmptyStr(attributesMap, elasticattr.ServiceRuntimeName, event.Service.Runtime.Name)
putNonEmptyStr(attributesMap, elasticattr.ServiceRuntimeVersion, event.Service.Runtime.Version)
}
if event.Service.Origin != nil {
putNonEmptyStr(attributesMap, elasticattr.ServiceOriginID, event.Service.Origin.Id)
putNonEmptyStr(attributesMap, elasticattr.ServiceOriginName, event.Service.Origin.Name)
Expand All @@ -425,9 +421,6 @@ func SetElasticSpecificResourceAttributes(event *modelpb.APMEvent, attributesMap
}

if event.Host != nil {
if event.Host.Os != nil {
putNonEmptyStr(attributesMap, elasticattr.HostOSPlatform, event.Host.Os.Platform)
}
putNonEmptyStr(attributesMap, elasticattr.HostHostName, event.Host.Hostname)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
package mappers // import "github.com/elastic/opentelemetry-collector-components/receiver/elasticapmintakereceiver/internal/mappers"

import (
"strings"

"go.opentelemetry.io/collector/pdata/pcommon"
semconv22 "go.opentelemetry.io/otel/semconv/v1.22.0"
semconv "go.opentelemetry.io/otel/semconv/v1.27.0"
Expand All @@ -34,8 +32,13 @@ func TranslateToOtelResourceAttributes(event *modelpb.APMEvent, attributes pcomm
if event.Service != nil {
putNonEmptyStr(attributes, string(semconv.ServiceNameKey), event.Service.Name)
putNonEmptyStr(attributes, string(semconv.ServiceVersionKey), event.Service.Version)
if event.Service.Language != nil && event.Service.Language.Name != "" {
attributes.PutStr(string(semconv.TelemetrySDKLanguageKey), translateElasticServiceLanguageToOtelSdkLanguage(event.Service.Language.Name))
if event.Service.Language != nil {
putNonEmptyStr(attributes, string(semconv.TelemetrySDKLanguageKey), event.Service.Language.Name)
putNonEmptyStr(attributes, string(semconv.TelemetrySDKVersionKey), event.Service.Language.Version)
Comment thread
isaacaflores2 marked this conversation as resolved.
}
if event.Service.Runtime != nil {
putNonEmptyStr(attributes, string(semconv.ProcessRuntimeNameKey), event.Service.Runtime.Name)
putNonEmptyStr(attributes, string(semconv.ProcessRuntimeVersionKey), event.Service.Runtime.Version)
}
attributes.PutStr(string(semconv.TelemetrySDKNameKey), "ElasticAPM")
if event.Service.Environment != "" {
Expand All @@ -53,6 +56,7 @@ func TranslateToOtelResourceAttributes(event *modelpb.APMEvent, attributes pcomm
putNonEmptyStr(attributes, string(semconv.HostArchKey), event.Host.Architecture)
if event.Host.Os != nil {
putNonEmptyStr(attributes, string(semconv.OSNameKey), event.Host.Os.Name)
putNonEmptyStr(attributes, string(semconv.OSTypeKey), event.Host.Os.Platform)
putNonEmptyStr(attributes, string(semconv.OSVersionKey), event.Host.Os.Version)
}
}
Expand All @@ -70,19 +74,6 @@ func TranslateToOtelResourceAttributes(event *modelpb.APMEvent, attributes pcomm
translateFaasAttributes(event, attributes)
}

// SemConv defines a well known list of values of telemetry.sdk.language: https://opentelemetry.io/docs/specs/semconv/attributes-registry/telemetry/
// The classic Elastic APM Agents report values that may not be in the SemConv well known list.
// This method maps those values to the closest SemConv well known value.
func translateElasticServiceLanguageToOtelSdkLanguage(language string) string {
language_lower_case := strings.ToLower(language)
switch language_lower_case {
case "c#":
return "dotnet"
default:
return language_lower_case
}
}

// TranslateIntakeV2TransactionToOTelAttributes translates transaction attributes from the Elastic APM model to SemConv attributes
func TranslateIntakeV2TransactionToOTelAttributes(event *modelpb.APMEvent, attributes pcommon.Map) {
translateHttpAttributes(event, attributes)
Expand Down
Loading
Loading