-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Component(s)
exporter/elasticsearch
What happened?
Description
I think the Elasticsearch exporter does not report failures properly in the otelcol_exporter_send_failed_log_records
metrics.
I am testing the behaviour of the elasticsearch exporter in the context of various failures. Eg.:
- mapping conflicts when pushing log records to an ES index
- missing permissions from the ES client to create new indices
During these tests I can see error being reported in logs, eg for a mapping conflict: see log output for an example.
Though I can't see such failures on the otelcol_exporter_send_failed_log_records
:
I saw the very same behavior with another type of error: missing Elasticsearch permissions to create indices, which prevent the exporter from creating a new index when pushing if said index does not exists.
Steps to Reproduce
Trigger an Elasticsearch push failure:
- Push a log record conflicting with the Elasticsearch index mapping.
As an example: map Body field as a long while pushing a typical log record from any receiver such as filelog. - Push a log record to a non-existing index while missing create permissions on the Elasticsearch role used by the OTEL Collector)
Expected Result
otelcol_exporter_send_failed_log_records
counter is increased according to the failed log records.
Actual Result
otelcol_exporter_send_failed_log_records
does not increase.
Collector version
v0.97.0
Environment information
Environment
Kubernetes 1.28
OpenTelemetry Collector configuration
exporters:
elasticsearch/logs:
endpoints: [--redacted--]
user: --redacted--
password: --redacted--
logs_index: --redacted--
logs_dynamic_index:
enabled: true
mapping:
mode: none
dedup: true
dedot: true
sending_queue:
enabled: true
num_consumers: 20
queue_size: 1000
pipelines:
logs:
receivers: [--redacted--]
processors:
- memory_limiter
- resourcedetection
- resource
- k8sattributes
- batch
- groupbyattrs/compaction
exporters:
- elasticsearch/logs
Log output
{"level":"error","ts":1712773343.8512416,"caller":"[email protected]/elasticsearch_bulk.go:219","msg":"Drop docs: failed to index: struct { Type string \"json:\\\"type\\\"\"; Reason string \"json:\\\"reason\\\"\"; Cause struct { Type string \"json:\\\"type\\\"\"; Reason string \"json:\\\"reason\\\"\" } \"json:\\\"caused_by\\\"\" }{Type:\"mapper_parsing_exception\", Reason:\"object mapping for [Body] tried to parse field [Body] as object, but found a concrete value\", Cause:struct { Type string \"json:\\\"type\\\"\"; Reason string \"json:\\\"reason\\\"\" }{Type:\"\", Reason:\"\"}}","kind":"exporter","data_type":"logs","name":"elasticsearch/logs","attempt":1,"status":400,"stacktrace":"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter.pushDocuments.func1\n\tgithub.com/open-telemetry/opentelemetry-collector-contrib/exporter/[email protected]/elasticsearch_bulk.go:219\ngithub.com/elastic/go-elasticsearch/v7/esutil.(*worker).flush\n\tgithub.com/elastic/go-elasticsearch/[email protected]/esutil/bulk_indexer.go:599\ngithub.com/elastic/go-elasticsearch/v7/esutil.(*bulkIndexer).init.func1\n\tgithub.com/elastic/go-elasticsearch/[email protected]/esutil/bulk_indexer.go:321"}
Additional context
No response