From 233e552022df636324e6bfd5b8e8d53a2d337f11 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Fri, 1 Dec 2023 10:45:35 -0800 Subject: [PATCH] Use new `mapping.omit_attributes_prefix` option while encoding --- .../elasticsearchexporter/logs_exporter.go | 6 +++++- exporter/elasticsearchexporter/model.go | 18 ++++++++++++++---- .../elasticsearchexporter/trace_exporter.go | 6 +++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/exporter/elasticsearchexporter/logs_exporter.go b/exporter/elasticsearchexporter/logs_exporter.go index b74a5f942ae2..b2c4410ee692 100644 --- a/exporter/elasticsearchexporter/logs_exporter.go +++ b/exporter/elasticsearchexporter/logs_exporter.go @@ -53,7 +53,11 @@ func newLogsExporter(logger *zap.Logger, cfg *Config) (*elasticsearchLogsExporte maxAttempts = cfg.Retry.MaxRequests } - model := &encodeModel{dedup: cfg.Mapping.Dedup, dedot: cfg.Mapping.Dedot} + model := &encodeModel{ + dedup: cfg.Mapping.Dedup, + dedot: cfg.Mapping.Dedot, + omitAttributesPrefix: cfg.Mapping.OmitAttributesPrefix, + } indexStr := cfg.LogsIndex if cfg.Index != "" { diff --git a/exporter/elasticsearchexporter/model.go b/exporter/elasticsearchexporter/model.go index c727de45e644..ca57e5c2ddf1 100644 --- a/exporter/elasticsearchexporter/model.go +++ b/exporter/elasticsearchexporter/model.go @@ -28,8 +28,9 @@ type mappingModel interface { // // See: https://github.com/open-telemetry/oteps/blob/master/text/logs/0097-log-data-model.md type encodeModel struct { - dedup bool - dedot bool + dedup bool + dedot bool + omitAttributesPrefix bool } const ( @@ -47,7 +48,7 @@ func (m *encodeModel) encodeLog(resource pcommon.Resource, record plog.LogRecord document.AddString("SeverityText", record.SeverityText()) document.AddInt("SeverityNumber", int64(record.SeverityNumber())) document.AddAttribute("Body", record.Body()) - document.AddAttributes("Attributes", record.Attributes()) + m.encodeAttributes(&document, record.Attributes()) document.AddAttributes("Resource", resource.Attributes()) document.AddAttributes("Scope", scopeToAttributes(scope)) @@ -74,7 +75,7 @@ func (m *encodeModel) encodeSpan(resource pcommon.Resource, span ptrace.Span, sc document.AddInt("TraceStatus", int64(span.Status().Code())) document.AddString("TraceStatusDescription", span.Status().Message()) document.AddString("Link", spanLinksToString(span.Links())) - document.AddAttributes("Attributes", span.Attributes()) + m.encodeAttributes(&document, span.Attributes()) document.AddAttributes("Resource", resource.Attributes()) document.AddEvents("Events", span.Events()) document.AddInt("Duration", durationAsMicroseconds(span.StartTimestamp().AsTime(), span.EndTimestamp().AsTime())) // unit is microseconds @@ -91,6 +92,15 @@ func (m *encodeModel) encodeSpan(resource pcommon.Resource, span ptrace.Span, sc return buf.Bytes(), err } +func (m *encodeModel) encodeAttributes(document *objmodel.Document, attributes pcommon.Map) { + if m.omitAttributesPrefix { + rawDoc := objmodel.DocumentFromAttributes(attributes) + document.MergeFrom(rawDoc) + } else { + document.AddAttributes("Attributes", attributes) + } +} + func spanLinksToString(spanLinkSlice ptrace.SpanLinkSlice) string { linkArray := make([]map[string]any, 0, spanLinkSlice.Len()) for i := 0; i < spanLinkSlice.Len(); i++ { diff --git a/exporter/elasticsearchexporter/trace_exporter.go b/exporter/elasticsearchexporter/trace_exporter.go index bfa3c485271f..0470b13c5191 100644 --- a/exporter/elasticsearchexporter/trace_exporter.go +++ b/exporter/elasticsearchexporter/trace_exporter.go @@ -49,7 +49,11 @@ func newTracesExporter(logger *zap.Logger, cfg *Config) (*elasticsearchTracesExp maxAttempts = cfg.Retry.MaxRequests } - model := &encodeModel{dedup: cfg.Mapping.Dedup, dedot: cfg.Mapping.Dedot} + model := &encodeModel{ + dedup: cfg.Mapping.Dedup, + dedot: cfg.Mapping.Dedot, + omitAttributesPrefix: cfg.Mapping.OmitAttributesPrefix, + } return &elasticsearchTracesExporter{ logger: logger,