From ae7d5abbc9aa6e8a19875c3599e8a553c31541b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Old=C5=99ich=20Jedli=C4=8Dka?= Date: Wed, 18 Dec 2024 16:30:28 +0100 Subject: [PATCH] Translate OTEL log's InstrumentationScope as logger name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit InstrumentationScope usually contains the name of the instrumentation library. However, in the case of logs, it may also contain the name of the logger if the log source defines it, see [here][1]. An instrumentation library usually has a version set, so assume that the name without the version is the name of the logger. [1]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/logs/api.md#get-a-logger Signed-off-by: Oldřich Jedlička --- input/otlp/logs.go | 2 +- input/otlp/metadata.go | 30 +++++++++++++++++++++++++++++- input/otlp/metrics.go | 2 +- input/otlp/traces.go | 2 +- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/input/otlp/logs.go b/input/otlp/logs.go index 78748b36..835cc6b7 100644 --- a/input/otlp/logs.go +++ b/input/otlp/logs.go @@ -119,7 +119,7 @@ func (c *Consumer) convertLogRecord( event := baseEvent.CloneVT() initEventLabels(event) - translateScopeMetadata(scope, event) + translateLogScopeMetadata(scope, event) if record.Timestamp() == 0 { event.Timestamp = modelpb.FromTime(record.ObservedTimestamp().AsTime().Add(timeDelta)) diff --git a/input/otlp/metadata.go b/input/otlp/metadata.go index 2a1e854c..db9baab3 100644 --- a/input/otlp/metadata.go +++ b/input/otlp/metadata.go @@ -456,7 +456,7 @@ func translateResourceMetadata(resource pcommon.Resource, out *modelpb.APMEvent) } } -func translateScopeMetadata(scope pcommon.InstrumentationScope, out *modelpb.APMEvent) { +func translateScopeCommonMetadata(scope pcommon.InstrumentationScope, out *modelpb.APMEvent) { scope.Attributes().Range(func(k string, v pcommon.Value) bool { switch k { // data_stream.* @@ -473,7 +473,9 @@ func translateScopeMetadata(scope pcommon.InstrumentationScope, out *modelpb.APM } return true }) +} +func translateScopeFrameworkMetadata(scope pcommon.InstrumentationScope, out *modelpb.APMEvent) { if name := scope.Name(); name != "" { if out.Service == nil { out.Service = &modelpb.Service{} @@ -485,6 +487,32 @@ func translateScopeMetadata(scope pcommon.InstrumentationScope, out *modelpb.APM } } +func translateLogScopeMetadata(scope pcommon.InstrumentationScope, out *modelpb.APMEvent) { + translateScopeCommonMetadata(scope, out) + if version := scope.Version(); version != "" { + // If the version is set, we assume the name is an instrumentation library name + translateScopeFrameworkMetadata(scope, out) + } else { + // If the version is not set, we assume the name is a logger name + if name := scope.Name(); name != "" { + if out.Log == nil { + out.Log = &modelpb.Log{} + } + out.Log.Logger = name + } + } +} + +func translateSpanScopeMetadata(scope pcommon.InstrumentationScope, out *modelpb.APMEvent) { + translateScopeCommonMetadata(scope, out) + translateScopeFrameworkMetadata(scope, out) +} + +func translateMetricsScopeMetadata(scope pcommon.InstrumentationScope, out *modelpb.APMEvent) { + translateScopeCommonMetadata(scope, out) + translateScopeFrameworkMetadata(scope, out) +} + func cleanServiceName(name string) string { return serviceNameInvalidRegexp.ReplaceAllString(truncate(name), "_") } diff --git a/input/otlp/metrics.go b/input/otlp/metrics.go index 796fbd36..ef10f75f 100644 --- a/input/otlp/metrics.go +++ b/input/otlp/metrics.go @@ -159,7 +159,7 @@ func (c *Consumer) handleScopeMetrics( for key, ms := range ms { event := baseEvent.CloneVT() - translateScopeMetadata(in.Scope(), event) + translateMetricsScopeMetadata(in.Scope(), event) event.Timestamp = modelpb.FromTime(key.timestamp.Add(timeDelta)) metrs := make([]*modelpb.MetricsetSample, 0, len(ms.samples)) diff --git a/input/otlp/traces.go b/input/otlp/traces.go index cbb2f522..071d47fb 100644 --- a/input/otlp/traces.go +++ b/input/otlp/traces.go @@ -178,7 +178,7 @@ func (c *Consumer) convertSpan( representativeCount := getRepresentativeCountFromTracestateHeader(otelSpan.TraceState().AsRaw()) event := baseEvent.CloneVT() - translateScopeMetadata(otelLibrary, event) + translateSpanScopeMetadata(otelLibrary, event) initEventLabels(event) event.Timestamp = modelpb.FromTime(startTime.Add(timeDelta))