diff --git a/exporter/elasticsearchexporter/model.go b/exporter/elasticsearchexporter/model.go index 140b07206b1c..b3e8829a3006 100644 --- a/exporter/elasticsearchexporter/model.go +++ b/exporter/elasticsearchexporter/model.go @@ -89,71 +89,20 @@ func (m *encodeModel) encodeLog(resource pcommon.Resource, record plog.LogRecord func (m *encodeModel) encodeLogDefaultMode(resource pcommon.Resource, record plog.LogRecord, scope pcommon.InstrumentationScope) objmodel.Document { var document objmodel.Document - switch m.mode { - case MappingECS: - if record.Timestamp() != 0 { - document.AddTimestamp("@timestamp", record.Timestamp()) - } else { - document.AddTimestamp("@timestamp", record.ObservedTimestamp()) - } - - document.AddTraceID("trace.id", record.TraceID()) - document.AddSpanID("span.id", record.SpanID()) - - if n := record.SeverityNumber(); n != plog.SeverityNumberUnspecified { - document.AddInt("event.severity", int64(record.SeverityNumber())) - } - - document.AddString("log.level", record.SeverityText()) - - if record.Body().Type() == pcommon.ValueTypeStr { - document.AddAttribute("message", record.Body()) - } - - fieldMapper := func(k string) string { - switch k { - case "exception.type": - return "error.type" - case "exception.message": - return "error.message" - case "exception.stacktrace": - return "error.stack_trace" - default: - return k - } - } - - resource.Attributes().Range(func(k string, v pcommon.Value) bool { - k = fieldMapper(k) - document.AddAttribute(k, v) - return true - }) - scope.Attributes().Range(func(k string, v pcommon.Value) bool { - k = fieldMapper(k) - document.AddAttribute(k, v) - return true - }) - record.Attributes().Range(func(k string, v pcommon.Value) bool { - k = fieldMapper(k) - document.AddAttribute(k, v) - return true - }) - default: - docTimeStamp := record.Timestamp() - if docTimeStamp.AsTime().UnixNano() == 0 { - docTimeStamp = record.ObservedTimestamp() - } - document.AddTimestamp("@timestamp", docTimeStamp) // We use @timestamp in order to ensure that we can index if the default data stream logs template is used. - document.AddTraceID("TraceId", record.TraceID()) - document.AddSpanID("SpanId", record.SpanID()) - document.AddInt("TraceFlags", int64(record.Flags())) - document.AddString("SeverityText", record.SeverityText()) - document.AddInt("SeverityNumber", int64(record.SeverityNumber())) - document.AddAttribute("Body", record.Body()) - m.encodeAttributes(&document, record.Attributes()) - document.AddAttributes("Resource", resource.Attributes()) - document.AddAttributes("Scope", scopeToAttributes(scope)) + docTimeStamp := record.Timestamp() + if docTimeStamp.AsTime().UnixNano() == 0 { + docTimeStamp = record.ObservedTimestamp() } + document.AddTimestamp("@timestamp", docTimeStamp) // We use @timestamp in order to ensure that we can index if the default data stream logs template is used. + document.AddTraceID("TraceId", record.TraceID()) + document.AddSpanID("SpanId", record.SpanID()) + document.AddInt("TraceFlags", int64(record.Flags())) + document.AddString("SeverityText", record.SeverityText()) + document.AddInt("SeverityNumber", int64(record.SeverityNumber())) + document.AddAttribute("Body", record.Body()) + m.encodeAttributes(&document, record.Attributes()) + document.AddAttributes("Resource", resource.Attributes()) + document.AddAttributes("Scope", scopeToAttributes(scope)) if m.dedup { document.Dedup() @@ -179,7 +128,11 @@ func (m *encodeModel) encodeLogECSMode(resource pcommon.Resource, record plog.Lo // Finally, try to map record-level attributes to ECS fields. recordAttrsConversionMap := map[string]string{ - "event.name": "event.action", + "event.name": "event.action", + semconv.AttributeExceptionMessage: "error.message", + semconv.AttributeExceptionStacktrace: "error.stacktrace", + semconv.AttributeExceptionType: "error.type", + semconv.AttributeExceptionEscaped: "event.error.exception.handled", } encodeLogAttributesECSMode(&document, record.Attributes(), recordAttrsConversionMap) @@ -188,6 +141,17 @@ func (m *encodeModel) encodeLogECSMode(resource pcommon.Resource, record plog.Lo encodeLogAgentVersionECSMode(&document, resource) encodeLogHostOsTypeECSMode(&document, resource) encodeLogTimestampECSMode(&document, record) + document.AddTraceID("trace.id", record.TraceID()) + document.AddSpanID("span.id", record.SpanID()) + if n := record.SeverityNumber(); n != plog.SeverityNumberUnspecified { + document.AddInt("event.severity", int64(record.SeverityNumber())) + } + + document.AddString("log.level", record.SeverityText()) + + if record.Body().Type() == pcommon.ValueTypeStr { + document.AddAttribute("message", record.Body()) + } return document }