<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Elasticsearch Operations Guides on Netdata</title><link>https://www.netdata.cloud/guides/elasticsearch/</link><description>Recent content in Elasticsearch Operations Guides on Netdata</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.netdata.cloud/guides/elasticsearch/index.xml" rel="self" type="application/rss+xml"/><item><title>Elasticsearch all shards failed: diagnosing search_phase_execution_exception</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-all-shards-failed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-all-shards-failed/</guid><description>&lt;h1 id="elasticsearch-all-shards-failed-diagnosing-search_phase_execution_exception">Elasticsearch all shards failed: diagnosing search_phase_execution_exception&lt;/h1>
&lt;p>You run a search and Elasticsearch returns &lt;code>search_phase_execution_exception&lt;/code> with reason &lt;code>all shards failed&lt;/code>. Every shard copy involved in the query returned a failure to the coordinating node. The outer error is a container; the actual root cause lives in the per-shard failure reasons inside the response body. Do not assume the cluster is down. This error fires on clusters with green health and stable nodes when a query is malformed, a mapping is incompatible, or a resource limit is breached uniformly across every target shard.&lt;/p></description></item><item><title>Elasticsearch ALLOCATION_FAILED after max retries: reroute and corrupt shard recovery</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-shard-allocation-failed-max-retries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-shard-allocation-failed-max-retries/</guid><description>&lt;h1 id="elasticsearch-allocation_failed-after-max-retries-reroute-and-corrupt-shard-recovery">Elasticsearch ALLOCATION_FAILED after max retries: reroute and corrupt shard recovery&lt;/h1>
&lt;p>A shard that repeatedly fails allocation exhausts &lt;code>index.allocation.max_retries&lt;/code> (default 5) and becomes permanently UNASSIGNED. Elasticsearch stops automatic placement. Cluster health is RED if the shard is a primary, YELLOW if it is a replica. Indexing to the affected index is blocked until the primary is assigned.&lt;/p>
&lt;p>This state typically follows transient node restarts, disk pressure events, or translog corruption. After the fifth failed attempt, the allocator stops retrying. The shard will not move without explicit operator action: &lt;code>POST /_cluster/reroute?retry_failed=true&lt;/code> for transient failures, or forced allocation with accepted data loss when no valid copy remains.&lt;/p></description></item><item><title>Elasticsearch authentication failures: audit logs, brute force, and credential drift</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-authentication-failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-authentication-failures/</guid><description>&lt;h1 id="elasticsearch-authentication-failures-audit-logs-brute-force-and-credential-drift">Elasticsearch authentication failures: audit logs, brute force, and credential drift&lt;/h1>
&lt;p>Elasticsearch does not expose authentication failure counts through &lt;code>_nodes/stats&lt;/code> or &lt;code>_cluster/health&lt;/code>. The security audit log is the only structured source for &lt;code>authentication_failed&lt;/code>, &lt;code>access_denied&lt;/code>, and &lt;code>run_as_denied&lt;/code> events. Without it, brute force attempts, credential stuffing, and expiring service tokens are invisible until they cause an outage.&lt;/p>
&lt;h2 id="what-this-means">What this means&lt;/h2>
&lt;p>When &lt;code>xpack.security.audit.enabled&lt;/code> is &lt;code>true&lt;/code>, each node writes security events to a local audit log file. The events that matter for auth issues are:&lt;/p></description></item><item><title>Elasticsearch CircuitBreakingException: [parent] Data too large - causes and fixes</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-circuitbreakingexception-parent-data-too-large/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-circuitbreakingexception-parent-data-too-large/</guid><description>&lt;h1 id="elasticsearch-circuitbreakingexception-parent-data-too-large---causes-and-fixes">Elasticsearch CircuitBreakingException: [parent] Data too large - causes and fixes&lt;/h1>
&lt;p>When a search or indexing request returns HTTP 429 with &lt;code>CircuitBreakingException: [parent] Data too large, data for [&amp;lt;http_request&amp;gt;] would be [X], which is larger than the limit of [Y]&lt;/code>, the parent circuit breaker has rejected the operation. This is Elasticsearch protecting the JVM from an out-of-memory kill, not a client-side rate limit.&lt;/p>
&lt;p>Since version 7.0, the parent breaker tracks real memory usage by default. It can trip even when individual child breakers are within limits. The node is under genuine heap pressure. Determine quickly whether the cause is a single abusive query or structural memory exhaustion.&lt;/p></description></item><item><title>Elasticsearch cluster health red: unassigned primaries and how to recover</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-health-red/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-health-red/</guid><description>&lt;h1 id="elasticsearch-cluster-health-red-unassigned-primaries-and-how-to-recover">Elasticsearch cluster health red: unassigned primaries and how to recover&lt;/h1>
&lt;p>Cluster health &lt;code>red&lt;/code> means at least one primary shard is unassigned. Queries against affected indices return partial results or fail; writes are blocked. &lt;code>yellow&lt;/code> only signals missing replicas, but &lt;code>red&lt;/code> signals active data unavailability.&lt;/p>
&lt;p>Cluster health is a lagging indicator. A red status sustained longer than two minutes after the cluster has formed is a real fault; a brief flash during startup is normal. By the time the status turns red, a node has likely departed, a disk has crossed a watermark, or a shard copy has been rejected as corrupt.&lt;/p></description></item><item><title>Elasticsearch cluster health yellow: unassigned replicas vs real allocation blocks</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-health-yellow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-health-yellow/</guid><description>&lt;h1 id="elasticsearch-cluster-health-yellow-unassigned-replicas-vs-real-allocation-blocks">Elasticsearch cluster health yellow: unassigned replicas vs real allocation blocks&lt;/h1>
&lt;p>&lt;code>GET /_cluster/health&lt;/code> returning &lt;code>status: yellow&lt;/code> means all primaries are assigned but at least one replica is not. Some clusters are yellow by design. Others are yellow because a disk cascade, stuck allocator, or failed shard is blocking recovery. Benign yellow resolves. Structural yellow persists. If your cluster has been yellow for more than thirty minutes, something is actively blocking allocation. Teams that treat yellow as cosmetic often miss the transition from transient recovery to a real incident, leaving them one node failure away from red.&lt;/p></description></item><item><title>Elasticsearch cluster state too large: field count, index count, and per-node heap</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-state-too-large/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-state-too-large/</guid><description>&lt;h1 id="elasticsearch-cluster-state-too-large-field-count-index-count-and-per-node-heap">Elasticsearch cluster state too large: field count, index count, and per-node heap&lt;/h1>
&lt;p>Every node holds a copy of the cluster state in heap. When it grows large, the cost is paid everywhere: 200 MB of state consumes 200 MB on every node, and the elected master burns additional CPU and heap serializing and publishing updates. Symptoms show up indirectly: the master feels sluggish, pending tasks queue for minutes, heap pressure climbs on nodes that should be idle, and master elections stall indexing and shard allocation. The usual drivers are too many indices from per-minute or per-hour time-series patterns; a mapping explosion from uncontrolled dynamic fields; excessive aliases; or churn from frequent template and setting changes. Raw size measured via &lt;code>/_cluster/state&lt;/code> is a rough proxy. The indicators that matter are field-count growth, cluster state version churn, pending-task age, and master node heap pressure.&lt;/p></description></item><item><title>Elasticsearch cluster_block_exception: blocked by, the read-only blocks explained</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-block-exception/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cluster-block-exception/</guid><description>&lt;h1 id="elasticsearch-cluster_block_exception-blocked-by-the-read-only-blocks-explained">Elasticsearch cluster_block_exception: blocked by, the read-only blocks explained&lt;/h1>
&lt;p>Elasticsearch returns &lt;code>cluster_block_exception&lt;/code> when a write or metadata operation hits an active index or cluster-level block. The &lt;code>blocked by&lt;/code> array contains a &lt;code>FORBIDDEN&lt;/code> or &lt;code>TOO_MANY_REQUESTS&lt;/code> string, a numeric code, and an API label. Writes stop. Depending on the code, deletes and metadata changes may also fail.&lt;/p>
&lt;p>This article maps the four numeric codes most common in production, explains how to confirm which block is active, and gives the exact commands to clear it. Most incidents involve the &lt;code>/12&lt;/code> flood-stage disk watermark, but manual index blocks and cluster-level overrides produce the same exception and require different fixes.&lt;/p></description></item><item><title>Elasticsearch coordinating node overload: aggregation merge, heap spikes, and 429s</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-coordinating-node-overload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-coordinating-node-overload/</guid><description>&lt;h1 id="elasticsearch-coordinating-node-overload-aggregation-merge-heap-spikes-and-429s">Elasticsearch coordinating node overload: aggregation merge, heap spikes, and 429s&lt;/h1>
&lt;p>HTTP 429 or 503 responses appear on search requests while data nodes look healthy. Heap spikes on one node while others stay flat. The slow log shows heavy aggregation queries. That node is the coordinator, and it is running out of heap during the reduce phase.&lt;/p>
&lt;p>Every node can act as a coordinating node. For each search, the coordinator broadcasts the query to relevant shards, collects partial results, and merges them. Aggregations compute locally per shard and reduce in memory on the coordinator. High-cardinality terms aggregations, deep pagination, or large fetch sizes force the coordinator to hold massive intermediate structures in heap. If the estimate exceeds the circuit breaker limit, the request is rejected. If the breaker is too slow, the node may suffer long GC pauses or disconnect from the cluster.&lt;/p></description></item><item><title>Elasticsearch CPU saturation: search, merges, GC, and hot-spotting</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cpu-saturation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cpu-saturation/</guid><description>&lt;h1 id="elasticsearch-cpu-saturation-search-merges-gc-and-hot-spotting">Elasticsearch CPU saturation: search, merges, GC, and hot-spotting&lt;/h1>
&lt;p>Search latency climbs, bulk indexing slows, and clients see &lt;code>EsRejectedExecutionException&lt;/code> or HTTP 429. On data nodes, CPU is pinned above 90% and load average rises. Elasticsearch burns CPU in query execution, text analysis, segment merges, and JVM garbage collection. If saturation persists, &lt;code>search&lt;/code> and &lt;code>write&lt;/code> thread pool queues grow until the cluster rejects work.&lt;/p>
&lt;p>The first trap is assuming all CPU belongs to Elasticsearch. &lt;code>os.cpu.percent&lt;/code> includes every process on the host, co-located containers, and kernel work. In containers this diverges sharply from &lt;code>process.cpu.percent&lt;/code>, which tracks only the Elasticsearch process. A node may show 89% OS CPU and 67% process CPU, while the container runtime reports a third figure. Attribute CPU correctly before tuning thread pools or adding nodes.&lt;/p></description></item><item><title>Elasticsearch disk full: emergency recovery and freeing space safely</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-disk-full-emergency-recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-disk-full-emergency-recovery/</guid><description>&lt;h1 id="elasticsearch-disk-full-emergency-recovery-and-freeing-space-safely">Elasticsearch disk full: emergency recovery and freeing space safely&lt;/h1>
&lt;p>Writes fail with &lt;code>TOO_MANY_REQUESTS/12/index read-only / allow delete (api)&lt;/code>. Cluster health is red or yellow and data nodes are pinned above 90 percent disk. Indexers buffer or drop data while the cluster attempts shard relocations onto already-full disks. Recover without corrupting metadata or amplifying pressure.&lt;/p>
&lt;h2 id="what-this-means">What this means&lt;/h2>
&lt;p>Elasticsearch uses three disk watermarks. Low (85 percent) stops new shard allocation. High (90 percent) starts relocating shards off the node. Flood stage (95 percent) forces every index with a shard on that node into &lt;code>index.blocks.read_only_allow_delete: true&lt;/code>, which stops writes.&lt;/p></description></item><item><title>Elasticsearch disk I/O saturation: merges, fsync, and page-cache starvation</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-disk-io-saturation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-disk-io-saturation/</guid><description>&lt;h1 id="elasticsearch-disk-io-saturation-merges-fsync-and-page-cache-starvation">Elasticsearch disk I/O saturation: merges, fsync, and page-cache starvation&lt;/h1>
&lt;p>When Elasticsearch data nodes show climbing I/O wait while indexing and search latency rise, but CPU is not the bottleneck, the cluster stays green while throughput falls and thread pool queues grow. This pattern usually traces to one of three disk pressures: background segment merges rewriting data faster than storage can absorb, translog fsync overhead from durability guarantees, or OS page-cache eviction forcing every search to read from disk. This guide shows how to tell them apart, confirm the bottleneck with safe read-only checks, and relieve pressure.&lt;/p></description></item><item><title>Elasticsearch disk watermark cascade: from low watermark to cluster-wide read-only</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-disk-watermark-cascade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-disk-watermark-cascade/</guid><description>&lt;h1 id="elasticsearch-disk-watermark-cascade-from-low-watermark-to-cluster-wide-read-only">Elasticsearch disk watermark cascade: from low watermark to cluster-wide read-only&lt;/h1>
&lt;p>Writes fail with &lt;code>cluster_block_exception&lt;/code> or &lt;code>FORBIDDEN/12/index read-only / allow delete (api)&lt;/code>. Kibana becomes unreachable; Logstash and Beats buffer or drop data. The cluster did not fail at once. It crossed a sequence of thresholds that turned single-node disk pressure into a cluster-wide write outage. With homogeneous disk sizes, every data node likely hit the thresholds within minutes, leaving no relocation target and no relief valve.&lt;/p></description></item><item><title>Elasticsearch disk watermark tuning: thresholds, max_headroom, and multiple data paths</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-watermark-tuning-and-max-headroom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-watermark-tuning-and-max-headroom/</guid><description>&lt;h1 id="elasticsearch-disk-watermark-tuning-thresholds-max_headroom-and-multiple-data-paths">Elasticsearch disk watermark tuning: thresholds, max_headroom, and multiple data paths&lt;/h1>
&lt;p>Elasticsearch uses disk watermarks to decide when a node is too full to accept shards. The defaults (85%, 90%, 95%) were designed for small disks. On modern nodes with multi-terabyte volumes, those percentages leave hundreds of gigabytes free while still blocking allocation and triggering expensive rebalancing. Elasticsearch 8.x introduced &lt;code>max_headroom&lt;/code> to cap the free-space requirement on large disks, but the interaction between percentages, absolute bytes, and &lt;code>max_headroom&lt;/code> is not obvious. If you run multiple data paths, watermarks apply per path rather than per node, so a partially full disk can cause node-wide allocation restrictions. This article explains how the allocator evaluates disk space, how to tune thresholds without causing relocation storms, and why multiple data paths complicate the picture.&lt;/p></description></item><item><title>Elasticsearch document indexing failures: index_failed, bulk item errors, and version conflicts</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-document-indexing-failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-document-indexing-failures/</guid><description>&lt;h1 id="elasticsearch-document-indexing-failures-index_failed-bulk-item-errors-and-version-conflicts">Elasticsearch document indexing failures: index_failed, bulk item errors, and version conflicts&lt;/h1>
&lt;p>A bulk request can return HTTP 200 while rejecting individual documents inside it. &lt;code>indices.indexing.index_failed&lt;/code> climbs, but pipelines that only check HTTP status miss the rejections and documents disappear. This guide covers three failure classes: mapper parsing and type conflicts, per-item bulk errors hidden in HTTP 200 responses, and &lt;code>version_conflict_engine_exception&lt;/code> under concurrent updates. It also distinguishes these from node-level write rejections and circuit breaker trips, which produce different symptoms and require different fixes.&lt;/p></description></item><item><title>Elasticsearch EsRejectedExecutionException: write thread pool rejections and HTTP 429</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-esrejectedexecutionexception-write-queue/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-esrejectedexecutionexception-write-queue/</guid><description>&lt;h1 id="elasticsearch-esrejectedexecutionexception-write-thread-pool-rejections-and-http-429">Elasticsearch EsRejectedExecutionException: write thread pool rejections and HTTP 429&lt;/h1>
&lt;p>HTTP 429 responses from Elasticsearch, or stack traces containing &lt;code>EsRejectedExecutionException&lt;/code>, mean the &lt;code>write&lt;/code> thread pool queue is full. The &lt;code>write&lt;/code> thread pool (named &lt;code>bulk&lt;/code> before Elasticsearch 6.3) executes indexing, bulk, update, and delete operations on each data node using a bounded queue. When all threads are busy and the queue fills, the node rejects the operation. This guide covers how to confirm the diagnosis, distinguish it from other rejection paths, and fix the root cause instead of masking the symptom.&lt;/p></description></item><item><title>Elasticsearch expensive queries: leading wildcards, regex, deep pagination, and scripts</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-expensive-queries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-expensive-queries/</guid><description>&lt;h1 id="elasticsearch-expensive-queries-leading-wildcards-regex-deep-pagination-and-scripts">Elasticsearch expensive queries: leading wildcards, regex, deep pagination, and scripts&lt;/h1>
&lt;p>Search latency spikes and data-node CPU saturation usually trace to one of four query patterns: leading wildcards or unbounded regex, deep &lt;code>from+size&lt;/code> pagination, runtime Painless scripts, and deep aggregations. Elasticsearch uses a scatter-gather read path: the coordinating node broadcasts every query to one copy of every target shard. A single expensive query fans out, and the slowest shard sets overall latency. Coordinating-node heap pressure rises when it merges large intermediate result sets during the fetch phase or aggregation reduce phase.&lt;/p></description></item><item><title>Elasticsearch exposed without authentication: open clusters and snapshot exfiltration</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-exposed-without-authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-exposed-without-authentication/</guid><description>&lt;h1 id="elasticsearch-exposed-without-authentication-open-clusters-and-snapshot-exfiltration">Elasticsearch exposed without authentication: open clusters and snapshot exfiltration&lt;/h1>
&lt;p>TCP/9200 is externally reachable and responds without credentials. When Elasticsearch binds to a public interface with security disabled, anyone who can reach the HTTP port can query indices, modify cluster state, and register snapshot repositories. The fastest exfiltration path is not reading documents individually. It is registering an attacker-controlled snapshot repository and copying entire indices out in a single background operation.&lt;/p></description></item><item><title>Elasticsearch fielddata circuit breaker tripped: text-field aggregations and the keyword fix</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-fielddata-circuit-breaker-tripped/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-fielddata-circuit-breaker-tripped/</guid><description>&lt;h1 id="elasticsearch-fielddata-circuit-breaker-tripped-text-field-aggregations-and-the-keyword-fix">Elasticsearch fielddata circuit breaker tripped: text-field aggregations and the keyword fix&lt;/h1>
&lt;p>Queries return &lt;code>CircuitBreakingException: [fielddata] Data too large...&lt;/code> and HTTP 429s while JVM heap on one or more data nodes climbs toward the breaker limit. The node rejects queries to protect itself before OOM. This almost always means a query is aggregating, sorting, or scripting against an analyzed &lt;code>text&lt;/code> field that lacks a &lt;code>keyword&lt;/code> sub-field, forcing Elasticsearch to load an expensive fielddata cache into heap.&lt;/p></description></item><item><title>Elasticsearch FORBIDDEN/12/index read-only / allow delete (api) — flood stage recovery</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-forbidden-12-index-read-only-allow-delete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-forbidden-12-index-read-only-allow-delete/</guid><description>&lt;h1 id="elasticsearch-forbidden12index-read-only--allow-delete-api--flood-stage-recovery">Elasticsearch FORBIDDEN/12/index read-only / allow delete (api) — flood stage recovery&lt;/h1>
&lt;p>When Elasticsearch returns &lt;code>cluster_block_exception&lt;/code> with &lt;code>FORBIDDEN/12/index read-only / allow delete (api)&lt;/code>, every write, update, and index creation fails with HTTP 403. Search continues to work.&lt;/p>
&lt;p>This happens when a data node crosses the flood-stage disk watermark (95% by default). Elasticsearch auto-applies &lt;code>index.blocks.read_only_allow_delete&lt;/code> to every index with a shard on that node, preventing writes to avoid Lucene segment corruption from a full disk.&lt;/p></description></item><item><title>Elasticsearch heap pressure death spiral: GC, node removal, and the cascade</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-heap-pressure-death-spiral/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-heap-pressure-death-spiral/</guid><description>&lt;h1 id="elasticsearch-heap-pressure-death-spiral-gc-node-removal-and-the-cascade">Elasticsearch heap pressure death spiral: GC, node removal, and the cascade&lt;/h1>
&lt;p>When a node drops from &lt;code>_cat/nodes&lt;/code> and network tests pass, check its JVM GC logs. Stop-the-world pauses over 10 seconds cause the master to remove the node. Survivors then absorb recovery traffic, their heap climbs, and they begin missing fault-detection checks too. This feedback loop is the heap pressure death spiral. It masquerades as network instability because operators check connectivity while the real problem is memory saturation.&lt;/p></description></item><item><title>Elasticsearch high disk watermark [90%] exceeded: shard relocation and the cascade</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-high-disk-watermark-exceeded/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-high-disk-watermark-exceeded/</guid><description>&lt;h1 id="elasticsearch-high-disk-watermark-90-exceeded-shard-relocation-and-the-cascade">Elasticsearch high disk watermark [90%] exceeded: shard relocation and the cascade&lt;/h1>
&lt;p>When Elasticsearch logs &lt;code>high disk watermark [90%] exceeded on [node] ... shards will be relocated away&lt;/code>, the allocator immediately begins moving shards off the affected node. Relocation generates disk I/O and network traffic on both source and target. If targets were already close to their own watermarks, incoming shards can push them past 90%. This is the disk watermark cascade: a self-reinforcing loop where one full node triggers relocations that make other nodes full, eventually leaving the cluster with no legal allocation target and, if flood stage is hit, read-only indices.&lt;/p></description></item><item><title>Elasticsearch ILM stuck: indices not rolling over, shrinking, or deleting</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-ilm-stuck/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-ilm-stuck/</guid><description>&lt;h1 id="elasticsearch-ilm-stuck-indices-not-rolling-over-shrinking-or-deleting">Elasticsearch ILM stuck: indices not rolling over, shrinking, or deleting&lt;/h1>
&lt;p>Disk usage climbs steadily. Old indices that should have been deleted remain. Shard count grows, and the cluster approaches &lt;code>cluster.max_shards_per_node&lt;/code>. In ILM, indices are stuck in one phase for hours or days. This is the ILM stuck pattern: silent accumulation that becomes a disk watermark crisis, heap pressure, or unassigned shard storm when the cluster runs out of room.&lt;/p>
&lt;p>ILM polls every ten minutes by default. When an index cannot advance, it sits. Because the failure is gradual, it rarely pages until a secondary limit is breached. Detect the stuck state early and fix the root cause before accumulation triggers cascading failures.&lt;/p></description></item><item><title>Elasticsearch indexing pressure rejections: memory backpressure before heap failure</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-indexing-pressure-rejections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-indexing-pressure-rejections/</guid><description>&lt;h1 id="elasticsearch-indexing-pressure-rejections-memory-backpressure-before-heap-failure">Elasticsearch indexing pressure rejections: memory backpressure before heap failure&lt;/h1>
&lt;p>Bulk indexing clients report rejections while cluster health is green, disks are below the high watermark, and write thread pool queues are not saturated. Yet the nodes are pushing back. Pull &lt;code>_nodes/stats/indexing_pressure&lt;/code> and you will see climbing &lt;code>coordinating_rejections&lt;/code>, &lt;code>primary_rejections&lt;/code>, or &lt;code>replica_rejections&lt;/code>. This is the indexing pressure framework, introduced in Elasticsearch 7.9&lt;!-- TODO: verify exact version -->, enforcing memory-based backpressure. It tracks in-flight indexing bytes at the coordinating, primary, and replica stages. The default limit is 10% of the JVM heap for coordinating and primary work, and 1.5 times that limit for replica operations. It fires before write thread pool rejections, indicating that in-flight write memory is too high rather than disk or CPU.&lt;/p></description></item><item><title>Elasticsearch indexing rate dropped to zero: where the write path stalls</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-indexing-rate-dropped/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-indexing-rate-dropped/</guid><description>&lt;h1 id="elasticsearch-indexing-rate-dropped-to-zero-where-the-write-path-stalls">Elasticsearch indexing rate dropped to zero: where the write path stalls&lt;/h1>
&lt;p>Your ingestion pipeline reports healthy connections, but Elasticsearch stopped accepting writes. The &lt;code>index_total&lt;/code> counter is flat, upstream queues are building, and documents are erroring or disappearing. Because &lt;code>index_total&lt;/code> increments for every document, update, delete, and individual bulk item, a sustained rate of zero means the write path is stalled. The cluster may still report green health, nodes may still respond to pings, and search may still work, but the pipeline is backed up.&lt;/p></description></item><item><title>Elasticsearch ingest pipeline bottleneck: grok, enrich, and per-processor time</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-ingest-pipeline-bottleneck/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-ingest-pipeline-bottleneck/</guid><description>&lt;h1 id="elasticsearch-ingest-pipeline-bottleneck-grok-enrich-and-per-processor-time">Elasticsearch ingest pipeline bottleneck: grok, enrich, and per-processor time&lt;/h1>
&lt;p>Logstash or Beats instances log HTTP 429 errors. Elasticsearch indexing rate drops while upstream volume is flat. The write thread pool queue grows, but cluster health is green and there is no disk pressure or heap pressure. The culprit is often a single slow processor inside an ingest pipeline. A grok pattern backtracking on malformed logs, an enrich processor doing synchronous lookups, or a heavy Painless script throttles every document before it reaches Lucene. Because ingest processing runs on the write path, the backlog overflows the write thread pool queue and returns bulk rejections to upstream clients.&lt;/p></description></item><item><title>Elasticsearch IOException: Too many open files -- file descriptors, segments, and ulimit</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-too-many-open-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-too-many-open-files/</guid><description>&lt;h1 id="elasticsearch-ioexception-too-many-open-files----file-descriptors-segments-and-ulimit">Elasticsearch IOException: Too many open files &amp;ndash; file descriptors, segments, and ulimit&lt;/h1>
&lt;p>&lt;code>IOException: Too many open files&lt;/code> means the Elasticsearch process has reached its per-process &lt;code>RLIMIT_NOFILE&lt;/code>. Once &lt;code>open_file_descriptors&lt;/code> reaches &lt;code>max_file_descriptors&lt;/code>, the kernel returns &lt;code>EMFILE&lt;/code> on every new &lt;code>open()&lt;/code> call. The node cannot create Lucene segments, accept transport or HTTP connections, or maintain cluster membership. Each shard is a Lucene index composed of multiple segment files, and every network connection consumes a descriptor.&lt;/p></description></item><item><title>Elasticsearch JVM heap usage high: reading the sawtooth and the post-GC floor</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-jvm-heap-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-jvm-heap-high/</guid><description>&lt;h1 id="elasticsearch-jvm-heap-usage-high-reading-the-sawtooth-and-the-post-gc-floor">Elasticsearch JVM heap usage high: reading the sawtooth and the post-GC floor&lt;/h1>
&lt;p>Your Elasticsearch alert fires: &lt;code>jvm.mem.heap_used_percent&lt;/code> has crossed 75 percent and is holding there. You pull up the graph and see a jagged sawtooth climbing toward the ceiling. The first instinct is to add heap or restart the node. Both are usually wrong.&lt;/p>
&lt;p>The sawtooth is normal. Elasticsearch runs on the JVM with a young generation that fills with short-lived objects and empties on young garbage collections. The peak of the tooth is noise. The signal that matters is the post-GC floor: the minimum heap used immediately after a collection. In a healthy node, the floor stays between roughly 30 and 50 percent of max heap, and young GC dominates. When the floor trends upward, old generation objects are accumulating. Old GC pauses stop the world, and once a pause exceeds the cluster fault detection timeout, the master removes the node and triggers shard reallocation. That reallocation places more heap pressure on the survivors, beginning a death spiral.&lt;/p></description></item><item><title>Elasticsearch Limit of total fields [1000] in index has been exceeded — mapping explosion</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-limit-of-total-fields-exceeded/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-limit-of-total-fields-exceeded/</guid><description>&lt;h1 id="elasticsearch-limit-of-total-fields-1000-in-index-has-been-exceeded--mapping-explosion">Elasticsearch Limit of total fields [1000] in index has been exceeded — mapping explosion&lt;/h1>
&lt;p>Every write suddenly returns &lt;code>illegal_argument_exception: Limit of total fields [1000] in index [X] has been exceeded&lt;/code>. Indexing stops. The temptation is to raise &lt;code>index.mapping.total_fields.limit&lt;/code> and move on. Do not. This is a mapping explosion: dynamic mapping creates a new field for every unique key in your documents. The 1000-field limit is a guardrail, not the root cause. Runaway mappings bloat the cluster state, inflate heap on every node, and eventually destabilize the master. Diagnose the source, relieve pressure safely, and fix the data shape so it does not recur.&lt;/p></description></item><item><title>Elasticsearch long GC pauses: old-generation stop-the-world and node drops</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-old-gc-long-pauses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-old-gc-long-pauses/</guid><description>&lt;h1 id="elasticsearch-long-gc-pauses-old-generation-stop-the-world-and-node-drops">Elasticsearch long GC pauses: old-generation stop-the-world and node drops&lt;/h1>
&lt;p>In Elasticsearch 8.x, nodes can drop out of the cluster without logging errors. The master logs &lt;code>node-left&lt;/code> with reason &lt;code>disconnected&lt;/code>, while the departed node shows no ERROR entries because its JVM was frozen in an old-generation stop-the-world GC pause. A single pause longer than 10 seconds fails a fault-detection check; roughly 30 seconds of total unresponsiveness triggers removal. Once the master reallocates shards, remaining nodes face additional heap pressure and the cascade continues.&lt;/p></description></item><item><title>Elasticsearch mapper_parsing_exception: type conflicts and failed document indexing</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-mapper-parsing-exception/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-mapper-parsing-exception/</guid><description>&lt;h1 id="elasticsearch-mapper_parsing_exception-type-conflicts-and-failed-document-indexing">Elasticsearch mapper_parsing_exception: type conflicts and failed document indexing&lt;/h1>
&lt;p>Document counts do not match what your pipeline sent. The &lt;code>_bulk&lt;/code> endpoint returns HTTP 200, yet documents are missing from queries. In the Elasticsearch logs you see &lt;code>mapper_parsing_exception&lt;/code> with messages like &lt;code>failed to parse field [fieldname] of type [typename] in document with id [id]&lt;/code>. The &lt;code>indices.indexing.index_failed&lt;/code> counter is climbing. This is a per-document schema rejection, not a cluster outage, and it silently drops data.&lt;/p></description></item><item><title>Elasticsearch mapping explosion: dynamic mapping, cluster state bloat, and master pressure</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-mapping-explosion-dynamic-mapping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-mapping-explosion-dynamic-mapping/</guid><description>&lt;h1 id="elasticsearch-mapping-explosion-dynamic-mapping-cluster-state-bloat-and-master-pressure">Elasticsearch mapping explosion: dynamic mapping, cluster state bloat, and master pressure&lt;/h1>
&lt;p>Intermittent master elections, climbing heap on every node, and spiking indexing latency are hallmarks of a mapping explosion. Queries slow down. Administrative operations such as index creation or snapshot management crawl. If your data sources include unstructured JSON, such as application logs with variable keys, Kubernetes labels, or user-generated metadata, check mapping growth first.&lt;/p>
&lt;p>Dynamic mapping creates a new field for every unique key it encounters. Over hours, an index can accumulate tens of thousands of fields. Every mapping is part of the cluster state, which every node holds in its JVM heap. The master serializes and publishes the updated state on every mapping change. As the state grows, publication slows, pending tasks queue up, and the master becomes unstable. Unchecked, this leads to heap pressure death spirals and cascading node removals.&lt;/p></description></item><item><title>Elasticsearch master instability: frequent elections and metadata overload</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-master-instability-flapping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-master-instability-flapping/</guid><description>&lt;h1 id="elasticsearch-master-instability-frequent-elections-and-metadata-overload">Elasticsearch master instability: frequent elections and metadata overload&lt;/h1>
&lt;p>Index creation requests time out. &lt;code>_cluster/health&lt;/code> hangs or returns timeouts. The node listed by &lt;code>_cat/master&lt;/code> changes every few minutes outside planned maintenance. Shard allocation stalls, and new indices stay red or unassigned even though all data nodes are reachable. These symptoms indicate a master node that cannot keep up with cluster state updates, triggering repeated elections and leaving the cluster without stable coordination.&lt;/p></description></item><item><title>Elasticsearch master_not_discovered_exception: no elected master and stalled writes</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-no-master-not-discovered/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-no-master-not-discovered/</guid><description>&lt;h1 id="elasticsearch-master_not_discovered_exception-no-elected-master-and-stalled-writes">Elasticsearch master_not_discovered_exception: no elected master and stalled writes&lt;/h1>
&lt;p>HTTP 503 and &lt;code>master_not_discovered_exception&lt;/code> mean bulk indexing, index creation, mapping updates, and shard allocation checks are being rejected. Search requests that do not need fresh cluster state may return cached results briefly, but the cluster cannot process writes or administrative work. The data nodes may be healthy, but without an elected master, the cluster cannot update shard routing, publish state changes, or acknowledge document writes. The root cause is usually one of four problems inside the master-eligible cohort.&lt;/p></description></item><item><title>Elasticsearch merge storms: segment explosion, I/O saturation, and refresh tuning</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-merge-storms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-merge-storms/</guid><description>&lt;h1 id="elasticsearch-merge-storms-segment-explosion-io-saturation-and-refresh-tuning">Elasticsearch merge storms: segment explosion, I/O saturation, and refresh tuning&lt;/h1>
&lt;p>Search latency climbs, indexing slows, and heap usage rises while cluster health stays green. The cause is often a merge storm. Background Lucene segment consolidation has fallen behind, leaving nodes with hundreds or thousands of small segments. Each extra segment adds search overhead, consumes file descriptors, and increases memory pressure. This guide covers how merge storms develop, how to confirm the diagnosis, and how to fix them without making things worse.&lt;/p></description></item><item><title>Elasticsearch monitoring checklist: the signals every production cluster needs</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-monitoring-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-monitoring-checklist/</guid><description>&lt;h1 id="elasticsearch-monitoring-checklist-the-signals-every-production-cluster-needs">Elasticsearch monitoring checklist: the signals every production cluster needs&lt;/h1>
&lt;p>Elasticsearch failures cascade. A long GC pause on one node causes it to miss fault detection checks; the master removes it. Shards relocate to survivors, increasing heap pressure and thread pool load. If disk is near the high watermark, relocation I/O pushes other nodes toward flood stage, which sets indices to read-only and blocks writes. By the time &lt;code>GET /_cluster/health&lt;/code> returns red, the leading indicators fired minutes ago.&lt;/p></description></item><item><title>Elasticsearch monitoring maturity model: from survival to expert</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-monitoring-maturity-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-monitoring-maturity-model/</guid><description>&lt;h1 id="elasticsearch-monitoring-maturity-model-from-survival-to-expert">Elasticsearch monitoring maturity model: from survival to expert&lt;/h1>
&lt;p>Incidents escalate when teams monitor only the survival layer and miss leading indicators that predict cascades. A rising heap floor, a growing segment count, or a master task backlog surface long before cluster health turns red.&lt;/p>
&lt;p>This guide organizes Elasticsearch monitoring into four levels: survival, operational, mature, and expert. Each level adds signals that reduce mean time to detection and prevent composite failure patterns. Build level 1 before going live, level 2 before handling production traffic, and levels 3 and 4 after your first serious incident.&lt;/p></description></item><item><title>Elasticsearch node left the cluster: fault detection, reallocation, and recovery</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-node-left-cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-node-left-cluster/</guid><description>&lt;h1 id="elasticsearch-node-left-the-cluster-fault-detection-reallocation-and-recovery">Elasticsearch node left the cluster: fault detection, reallocation, and recovery&lt;/h1>
&lt;p>Your cluster health turned yellow and &lt;code>number_of_nodes&lt;/code> dropped by one. The master logs a &lt;code>NODE_LEFT&lt;/code> event, shards are unassigned, and the remaining nodes absorb extra load. In the next minute, the allocator decides whether to move data. Misread the cause and a transient restart becomes an expensive reallocation storm, or a genuine hardware failure goes unaddressed while replicas rebalance.&lt;/p>
&lt;p>This guide covers how Elasticsearch decides a node is gone, what happens to its shards, and how to recover without deepening the incident.&lt;/p></description></item><item><title>Elasticsearch node OOM-killed: heap ceiling, page cache, and container limits</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-out-of-memory-oom-killed/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-out-of-memory-oom-killed/</guid><description>&lt;h1 id="elasticsearch-node-oom-killed-heap-ceiling-page-cache-and-container-limits">Elasticsearch node OOM-killed: heap ceiling, page cache, and container limits&lt;/h1>
&lt;p>An Elasticsearch node leaves the cluster, restarts seconds later via systemd or a supervisor, and is killed again. Kernel logs show the OOM-killer terminated the Java process. &lt;code>heap.percent&lt;/code> often looks reasonable right up until the kill.&lt;/p>
&lt;p>The JVM heap is only one component of resident set size. Off-heap allocations, memory-mapped Lucene segments, and co-located processes all compete for the same memory budget. In containers, the cgroup limit is the hard boundary, not the host&amp;rsquo;s physical RAM.&lt;/p></description></item><item><title>Elasticsearch pending cluster tasks backlog: the master can't keep up</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-pending-tasks-backlog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-pending-tasks-backlog/</guid><description>&lt;h1 id="elasticsearch-pending-cluster-tasks-backlog-the-master-cant-keep-up">Elasticsearch pending cluster tasks backlog: the master can&amp;rsquo;t keep up&lt;/h1>
&lt;p>Index creation hangs, shards stop allocating, and administrative settings updates time out. &lt;code>GET /_cluster/pending_tasks&lt;/code> shows a queue that grows instead of draining, with some tasks waiting for minutes. The elected master cannot keep up with cluster state updates, and every metadata-dependent operation stalls.&lt;/p>
&lt;p>Elasticsearch processes cluster state changes serially on the master. Index creation, mapping updates, shard allocation decisions, and settings changes all enter a single priority-ordered queue. When tasks arrive faster than the master can compute, serialize, and publish the updated state to the rest of the cluster, the backlog grows. A healthy cluster typically holds zero to five pending tasks, each resolving in under a second. Once the queue exceeds a few hundred tasks, or any individual task ages past several minutes, the cluster is approaching an operational outage.&lt;/p></description></item><item><title>Elasticsearch refresh_interval tuning: search visibility vs indexing throughput</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-refresh-interval-tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-refresh-interval-tuning/</guid><description>&lt;h1 id="elasticsearch-refresh_interval-tuning-search-visibility-vs-indexing-throughput">Elasticsearch refresh_interval tuning: search visibility vs indexing throughput&lt;/h1>
&lt;p>Elasticsearch makes newly indexed documents searchable within one second by default. Every refresh creates a new Lucene segment, invalidates per-segment query caches, and adds merge debt. During bulk loads, reindexing, or high-throughput indexing, the default interval becomes a throughput bottleneck. Tuning refresh_interval requires understanding its interaction with the write path, the merge scheduler, and the query cache.&lt;/p>
&lt;p>In self-managed clusters, the default index.refresh_interval is one second, though recent versions implement lazy refresh: an index refreshes every second only if it received a search request in the last 30 seconds. If idle, auto-refresh stops until the next search arrives. Explicitly setting refresh_interval overrides lazy refresh and forces refreshes on the interval regardless of search traffic. In Elastic Cloud Serverless, the default is five seconds with a hard floor of five seconds (or -1). Setting the interval to -1 disables automatic refresh.&lt;/p></description></item><item><title>Elasticsearch replica lag: sequence-number gaps and in-sync set removal</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-replica-lag-sequence-numbers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-replica-lag-sequence-numbers/</guid><description>&lt;h1 id="elasticsearch-replica-lag-sequence-number-gaps-and-in-sync-set-removal">Elasticsearch replica lag: sequence-number gaps and in-sync set removal&lt;/h1>
&lt;p>A replica shard is falling behind its primary. The local checkpoint on the replica is lower than the global checkpoint on the primary, and the gap is growing across consecutive samples. If the replica cannot acknowledge writes fast enough, Elasticsearch removes it from the in-sync set. At that point, &lt;code>wait_for_active_shards&lt;/code> semantics change for the replication group and data redundancy is reduced. The replica must undergo peer recovery to rejoin. Read sequence-number checkpoints, find the bottleneck, and stop the lag before the master drops the replica.&lt;/p></description></item><item><title>Elasticsearch search latency high: query phase, fetch phase, and the slow shard</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-search-latency-high/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-search-latency-high/</guid><description>&lt;h1 id="elasticsearch-search-latency-high-query-phase-fetch-phase-and-the-slow-shard">Elasticsearch search latency high: query phase, fetch phase, and the slow shard&lt;/h1>
&lt;p>Elasticsearch P95 search latency jumped from 50 ms to multiple seconds. Cluster health is green, search thread pool queues are growing, and users report timeouts. Elasticsearch executes every search as a two-phase scatter-gather across targeted shards, so the slowest shard sets the floor for response time. The &lt;code>_nodes/stats&lt;/code> API reports cumulative counters, not per-shard or per-query latencies, meaning one bad shard or one expensive query can be invisible to cluster-wide averages while destroying tail latency. Determine whether time is lost in the query phase, the fetch phase, or the coordinating node merge step, then isolate the outlier.&lt;/p></description></item><item><title>Elasticsearch search thread pool rejections: failed queries and small search queues</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-search-thread-pool-rejections/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-search-thread-pool-rejections/</guid><description>&lt;h1 id="elasticsearch-search-thread-pool-rejections-failed-queries-and-small-search-queues">Elasticsearch search thread pool rejections: failed queries and small search queues&lt;/h1>
&lt;p>Your application logs show HTTP 429 responses from Elasticsearch. The error is &lt;code>es_rejected_execution_exception&lt;/code> and the message points to the &lt;code>search&lt;/code> thread pool. User-facing queries are failing, not just slowing down.&lt;/p>
&lt;p>The search thread pool uses a fixed number of threads and a bounded queue. The default queue size is 1000. Because search is a scatter-gather operation across shards, a single expensive query can hold a thread for seconds while the coordinating node waits for every shard to respond. The queue drains slowly, and under burst or pathological load it fills fast. Once full, Elasticsearch rejects new search requests immediately.&lt;/p></description></item><item><title>Elasticsearch shard recovery stuck: throttling, translog replay, and concurrent limits</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-shard-recovery-stuck/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-shard-recovery-stuck/</guid><description>&lt;h1 id="elasticsearch-shard-recovery-stuck-throttling-translog-replay-and-concurrent-limits">Elasticsearch shard recovery stuck: throttling, translog replay, and concurrent limits&lt;/h1>
&lt;p>You restart a data node during a rollout. Ten minutes later the cluster is still yellow. You check &lt;code>_cat/recovery&lt;/code> and see a replica pinned at 38 percent for the last hour. The network is not saturated, the source node is healthy, and there are no obvious errors in the logs, yet the shard refuses to reach STARTED state.&lt;/p>
&lt;p>Stuck recovery usually comes down to four constraints: a bandwidth throttle capping transfer speed, a large translog that must replay sequentially, a concurrent recovery limit serializing work, or a disk watermark on the target node blocking allocation entirely.&lt;/p></description></item><item><title>Elasticsearch slow search after restart: cold OS page cache and warmup</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cold-page-cache-after-restart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-cold-page-cache-after-restart/</guid><description>&lt;h1 id="elasticsearch-slow-search-after-restart-cold-os-page-cache-and-warmup">Elasticsearch slow search after restart: cold OS page cache and warmup&lt;/h1>
&lt;p>Restart an Elasticsearch node and searches that normally return in tens of milliseconds now take seconds. CPU stays low, disk read throughput spikes, and &lt;code>iowait&lt;/code> climbs. This is not a failing disk, a runaway query, or a JVM heap problem. It is a cold OS page cache.&lt;/p>
&lt;p>Elasticsearch relies on the OS filesystem cache to serve search requests from Lucene segment files. After any restart, that cache is empty. The kernel must read segments from disk into memory on demand. Until the working set is resident, queries incur disk I/O that should have been cache hits. Depending on the ratio of dataset size to available RAM, warmup can last minutes to hours.&lt;/p></description></item><item><title>Elasticsearch snapshot failed or partial: backups that silently stop working</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-snapshot-failed-or-partial/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-snapshot-failed-or-partial/</guid><description>&lt;h1 id="elasticsearch-snapshot-failed-or-partial-backups-that-silently-stop-working">Elasticsearch snapshot failed or partial: backups that silently stop working&lt;/h1>
&lt;p>You check backups and the last successful snapshot is three days old. Or you see PARTIAL snapshots where only some indices were captured. Cluster health is green, indexing and search are fine, but your recovery point is slipping. Elasticsearch does not fail the cluster when snapshots break, so the problem surfaces only when someone asks, &amp;ldquo;When did we last test a restore?&amp;rdquo;&lt;/p></description></item><item><title>Elasticsearch this action would add too many shards: max_shards_per_node limit</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-max-shards-per-node-exceeded/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-max-shards-per-node-exceeded/</guid><description>&lt;h1 id="elasticsearch-this-action-would-add-too-many-shards-max_shards_per_node-limit">Elasticsearch this action would add too many shards: max_shards_per_node limit&lt;/h1>
&lt;p>Creating an index or rolling over a data stream returns HTTP 400 &lt;code>validation_exception&lt;/code>: &amp;ldquo;this action would add [N] shards, but this cluster currently has [X]/[Y] maximum normal shards open&amp;rdquo;. The cluster has hit &lt;code>cluster.max_shards_per_node&lt;/code>, which defaults to 1000 open shards per non-frozen data node. Raising the limit via &lt;code>_cluster/settings&lt;/code> unblocks writes but postpones the outage. The durable fix is consolidation.&lt;/p></description></item><item><title>Elasticsearch thread pool queue growing: the precursor to rejection</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-thread-pool-queue-growing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-thread-pool-queue-growing/</guid><description>&lt;h1 id="elasticsearch-thread-pool-queue-growing-the-precursor-to-rejection">Elasticsearch thread pool queue growing: the precursor to rejection&lt;/h1>
&lt;p>A climbing &lt;code>write&lt;/code> or &lt;code>search&lt;/code> queue in &lt;code>_cat/thread_pool&lt;/code> means a node is receiving work faster than it can complete it. Rejections are the lagging indicator. By the time clients see &lt;code>EsRejectedExecutionException&lt;/code>, the cluster is already degraded.&lt;/p>
&lt;p>For the &lt;code>write&lt;/code> pool, the default queue size is 10000 (ES 7.x+). For &lt;code>search&lt;/code>, it is 1000. Sustained write queues above 1000 or search queues above 100 warrant investigation. The &lt;code>management&lt;/code> pool is different: even small amounts of sustained queuing mean the master is falling behind on cluster state operations, which blocks allocation, mapping updates, and recovery.&lt;/p></description></item><item><title>Elasticsearch TLS certificate expiry: cluster fragmentation and client lockout</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-tls-certificate-expiry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-tls-certificate-expiry/</guid><description>&lt;h1 id="elasticsearch-tls-certificate-expiry-cluster-fragmentation-and-client-lockout">Elasticsearch TLS certificate expiry: cluster fragmentation and client lockout&lt;/h1>
&lt;p>A node reboots and never rejoins the cluster. Kibana shows connection errors while your data pipeline buffers events. curl returns a TLS handshake failure even though the Elasticsearch process is still listening on port 9200. In Elasticsearch 8.x, security is enabled by default: every node and client relies on TLS certificates. When they expire, failure is abrupt and total. Transport-layer expiry fragments the cluster by rejecting inter-node handshakes. HTTP-layer expiry locks out clients while the cluster internals may still operate. There is no built-in grace period. At the expiry timestamp, connections fail immediately, often with no prior warning in the application logs.&lt;/p></description></item><item><title>Elasticsearch too many segments per shard: search slowdown and force-merge</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-too-many-segments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-too-many-segments/</guid><description>&lt;h1 id="elasticsearch-too-many-segments-per-shard-search-slowdown-and-force-merge">Elasticsearch too many segments per shard: search slowdown and force-merge&lt;/h1>
&lt;p>Searches that used to complete in tens of milliseconds are now taking hundreds. CPU on data nodes climbs without a traffic spike. Cluster health stays green, but query latency degrades and timeouts increase. The problem is invisible at the cluster level: shards have accumulated too many Lucene segments, and every query scans every segment in every relevant shard. When a shard holds more than roughly 100 segments, the background merge policy has fallen behind. Search slows, file descriptor usage rises, and merge I/O competes with indexing and queries. Since Elasticsearch 7.7, most segment metadata moved off-heap&lt;!-- TODO: verify 7.7 is the correct version for off-heap segment metadata change -->, so the node may not run out of JVM heap, but search performance degrades all the same.&lt;/p></description></item><item><title>Elasticsearch too many shards per node: overallocation and the heap tax</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-shard-overallocation-too-many-shards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-shard-overallocation-too-many-shards/</guid><description>&lt;h1 id="elasticsearch-too-many-shards-per-node-overallocation-and-the-heap-tax">Elasticsearch too many shards per node: overallocation and the heap tax&lt;/h1>
&lt;p>Searches slow from milliseconds to seconds. Nodes drop out after long GC pauses, triggering shard relocations that overload the remaining nodes. Cluster health stays green while &lt;code>_cat/nodes&lt;/code> shows climbing heap and &lt;code>segments.memory&lt;/code> growing steadily. The cause is usually shard overallocation: thousands of open shards with individual nodes carrying more than their heap can sustain.&lt;/p>
&lt;p>Each shard is a self-contained Lucene index. Elasticsearch keeps per-segment metadata in heap memory, and that overhead is charged per field, not per segment. A node with 1,000 shards may be spending multiple gigabytes of heap on metadata alone, leaving less room for caches, aggregations, and in-flight requests. &lt;!-- TODO: verify aggregate heap-to-disk ratio for segment metadata is approximately 1:4000 since ES 7.7 -->&lt;/p></description></item><item><title>Elasticsearch translog growing: flush problems, durability, and slow recovery</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-translog-growing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-translog-growing/</guid><description>&lt;h1 id="elasticsearch-translog-growing-flush-problems-durability-and-slow-recovery">Elasticsearch translog growing: flush problems, durability, and slow recovery&lt;/h1>
&lt;p>Shard recovery estimates climb from minutes to hours. A node restart stalls during translog replay. Disk usage creeps up on data nodes, and uncommitted translog size per shard is past the flush threshold. The translog is growing faster than Elasticsearch can flush it to Lucene commit points.&lt;/p>
&lt;p>Every indexing operation appends to the per-shard write-ahead log before the document is searchable. A flush commits those operations to a Lucene segment and truncates the log. When flush cannot keep pace with the write path, uncommitted operations accumulate. During recovery, Elasticsearch replays every operation sequentially. A multi-gigabyte translog translates directly into a multi-hour recovery window, extending time-to-recovery and increasing cascade risk if another node fails during replay.&lt;/p></description></item><item><title>Elasticsearch unassigned shards: reading allocation explain and fixing each reason</title><link>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-unassigned-shards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/elasticsearch-unassigned-shards/</guid><description>&lt;h1 id="elasticsearch-unassigned-shards-reading-allocation-explain-and-fixing-each-reason">Elasticsearch unassigned shards: reading allocation explain and fixing each reason&lt;/h1>
&lt;p>Yellow or red cluster health with &lt;code>unassigned_shards &amp;gt; 0&lt;/code> means the allocator cannot place one or more shard copies on any node. Missing primaries block queries and risk data loss; missing replicas only cost redundancy. Do not guess from the cluster color. The allocator already knows why it rejected every node. Ask it.&lt;/p>
&lt;h2 id="what-this-means">What this means&lt;/h2>
&lt;p>Unassigned primaries make their data unreachable. Affected indices return partial results or fail. Unassigned replicas remove redundancy; a second failure on those primaries drops the data. The master allocator evaluates every node through a chain of deciders: disk watermarks, allocation filters, awareness attributes, the same-shard rule, and retry limits. When every node is rejected, the shard stays &lt;code>UNASSIGNED&lt;/code> until the blocking condition clears or you intervene.&lt;/p></description></item><item><title>How Elasticsearch actually works in production: a mental model for operators</title><link>https://www.netdata.cloud/guides/elasticsearch/how-elasticsearch-works-in-production/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/elasticsearch/how-elasticsearch-works-in-production/</guid><description>&lt;h1 id="how-elasticsearch-actually-works-in-production-a-mental-model-for-operators">How Elasticsearch actually works in production: a mental model for operators&lt;/h1>
&lt;p>Elasticsearch is a distributed search and analytics engine built on Apache Lucene. Every node runs interacting subsystems that compete for the same resources. If you treat it as a black box that stores JSON, you will miss the failure modes that kill clusters at 3 a.m. The interactions between subsystems determine whether a cluster survives a traffic spike or collapses into a heap-pressure death spiral.&lt;/p></description></item></channel></rss>