Monitor Elasticsearch with OpenTelemetry and SigNoz

SigNoz Cloud - This page applies to SigNoz Cloud editions.
Self-Host - This page applies to self-hosted SigNoz editions.

Overview

Monitor an Elasticsearch cluster in SigNoz using the OpenTelemetry Collector. You collect two signals:

  • Metrics: cluster health, node resource usage, index operations, search performance, JVM, cache, circuit breakers, and thread pools through the Collector elasticsearch receiver, which scrapes the Elasticsearch REST API.
  • Logs: the structured JSON logs Elasticsearch writes (server, deprecation, slow, and GC) through the Collector filelog receiver.

Prerequisites

  • A running Elasticsearch cluster (version 7.9 or later)
  • If Elasticsearch security features are enabled, a user with the monitor cluster privilege (for cluster health and node stats) and the monitor index privilege (for index stats). See the Elasticsearch authorization docs
  • OpenTelemetry Collector Contrib installed, with access to the Elasticsearch REST API (for metrics) and its log files (for logs)
  • An instance of SigNoz (Cloud or Self-Hosted)

Set Up Telemetry

Both signals flow through the OpenTelemetry Collector. Set up each one you want, then apply the config where your Collector runs.

Step 1: Configure the Collector

Add the elasticsearch receiver, a resource processor that tags the metrics with service.name, and a dedicated pipeline. Merge this into your existing Collector config:

config.yaml
receivers:
  elasticsearch:
    endpoint: http://<elasticsearch-host>:9200
    username: <your-username>
    password: <your-password>
    collection_interval: 30s
    metrics:
      elasticsearch.node.operations.get.completed:
        enabled: true
      elasticsearch.node.operations.get.time:
        enabled: true
      elasticsearch.index.cache.evictions:
        enabled: true
      elasticsearch.index.cache.memory.usage:
        enabled: true
      jvm.memory.heap.utilization:
        enabled: true
      elasticsearch.node.cache.size:
        enabled: true

processors:
  resource/elasticsearch:
    attributes:
      - key: service.name
        value: elasticsearch
        action: upsert
  batch: {}

exporters:
  # On Collector v0.144.0 and newer, use "otlp_http" to avoid a deprecation warning.
  otlphttp/elasticsearch:
    endpoint: "https://ingest.<region>.signoz.cloud:443"
    headers:
      "signoz-ingestion-key": "<your-ingestion-key>"

service:
  pipelines:
    metrics/elasticsearch:
      receivers: [elasticsearch]
      processors: [resource/elasticsearch, batch]
      exporters: [otlphttp/elasticsearch]

Verify these values:

  • <elasticsearch-host>:9200: your cluster's HTTP API address, use localhost:9200 if the Collector runs on the same host. Use https:// if TLS is enabled.
  • <your-username> / <your-password>: omit both if the cluster has no security features enabled.
  • <region>: your SigNoz Cloud region.
  • <your-ingestion-key>: your SigNoz Cloud ingestion key.

Step 2: Apply the config and restart the Collector

Pick the environment where your Collector runs:

The config lives at /etc/otelcol-contrib/config.yaml. Validate it, restart, and watch the logs:

sudo /usr/bin/otelcol-contrib validate --config /etc/otelcol-contrib/config.yaml
sudo systemctl restart otelcol-contrib
sudo journalctl -u otelcol-contrib -f

Validate

After you start the Collector, confirm each signal arrives in SigNoz.

  1. Metrics: Open Metrics Explorer and search for metrics that start with elasticsearch. (for example elasticsearch.cluster.health and elasticsearch.node.cache.size) and jvm..
  2. Logs: Open the Logs explorer and add filter service.name = elasticsearch.
Elasticsearch metrics in the SigNoz Metrics Explorer
Elasticsearch metrics in the SigNoz Metrics Explorer
Elasticsearch logs in the SigNoz Logs explorer, filtered by service.name = elasticsearch
Elasticsearch logs in SigNoz, filtered by service.name = elasticsearch

Troubleshooting

No elasticsearch. metrics in SigNoz

  • Cause: the Collector cannot reach the cluster's HTTP API, or the credentials are wrong.
  • Fix: confirm endpoint is reachable from the Collector host with curl <elasticsearch-host>:9200, and confirm the user has the monitor cluster privilege (and the monitor index privilege if security is enabled). If security is disabled, remove the username and password fields.
  • Verify: search for elasticsearch.cluster.health in Metrics Explorer.

Metrics appear but the dashboard is empty

  • Cause: the metrics/elasticsearch pipeline does not include the resource/elasticsearch processor, so the metrics do not have service.name.
  • Fix: add resource/elasticsearch to the metrics/elasticsearch processors list and restart the Collector.
  • Verify: filter Metrics Explorer by service.name = elasticsearch.

Node or index metrics are missing

  • Cause: nodes or indices filters exclude the ones you expect, or skip_cluster_metrics is set to true.
  • Fix: confirm the node and index filters in the receiver config match the nodes and indices you want to monitor.
  • Verify: elasticsearch.node.* and elasticsearch.index.* series appear for the expected node and index names.

Logs arrive but timestamps fail to parse

  • Cause: you are tailing the plaintext .log files, or the cluster runs Elasticsearch 7.x, which uses different JSON field names.
  • Fix: confirm the include glob targets the JSON files. On 7.x, switch the timestamp parse_from to attributes.timestamp and the severity parse_from to attributes.level.
  • Verify: entries appear in the Logs explorer with a parsed timestamp and severity.

Next Steps

Get Help

If you need help with the steps in this topic, please reach out to us on SigNoz Community Slack. If you are a SigNoz Cloud user, please use in product chat support located at the bottom right corner of your SigNoz instance or contact us at cloud-support@signoz.io.

Last updated: July 24, 2026

Edit on GitHub

Was this page helpful?

Your response helps us improve this page.