Strumenti e Tecniche Essenziali per il Debug dei Problemi del Cluster Elasticsearch
Debug dei problemi del cluster Elasticsearch con API cat, spiegazione dell'allocazione, log, statistiche dei nodi e controlli mirati sugli shard.
Strumenti e Tecniche Essenziali per il Debug dei Problemi del Cluster Elasticsearch
I problemi del cluster Elasticsearch si manifestano solitamente con uno stato di salute red o yellow, ricerche lente, scritture rifiutate o nodi che abbandonano il cluster. Il modo più rapido per eseguire il debug è iniziare con la salute del cluster, poi restringere il problema agli shard, ai nodi, alle regole di allocazione, ai log o alla pressione delle risorse.
Questa guida illustra gli strumenti integrati che utilizzerai più spesso: le API _cat, _cluster/allocation/explain, le statistiche dei nodi, le attività in sospeso e i log di Elasticsearch.
Comprendere la Salute del Cluster Elasticsearch
La salute del cluster fornisce il primo segnale:
green: Tutti gli shard primari e replica sono allocati.yellow: Tutti gli shard primari sono allocati, ma uno o più shard replica non lo sono.red: Uno o più shard primari non sono assegnati, quindi alcuni dati non sono disponibili.
Un cluster yellow può ancora servire letture e scritture per gli shard primari disponibili, ma ha meno ridondanza. Un cluster red richiede un'indagine immediata perché gli shard primari interessati non sono disponibili.
Iniziare con le API _cat
Le API _cat sono progettate per controlli rapidi e leggibili dall'uomo.
curl -X GET "localhost:9200/_cat/health?v"
curl -X GET "localhost:9200/_cat/nodes?v&h=name,ip,heap.percent,ram.percent,cpu,disk.used_percent,load_1m,node.role"
curl -X GET "localhost:9200/_cat/shards?v"
curl -X GET "localhost:9200/_cat/indices?v"
Usa _cat/health per confermare lo stato generale. Usa _cat/shards per trovare shard UNASSIGNED, INITIALIZING o in ripetuta rilocazione. Usa _cat/nodes per individuare pressione su heap, CPU o disco su un nodo specifico.
Per un cluster red o yellow, questo comando fornisce una vista mirata:
curl -X GET "localhost:9200/_cat/shards?v&h=index,shard,prirep,state,unassigned.reason,node&s=state,index"
Spiegare l'Allocazione degli Shard
Quando uno shard non è assegnato, _cluster/allocation/explain ti dice perché Elasticsearch non può posizionarlo.
curl -X GET "localhost:9200/_cluster/allocation/explain?pretty" \
-H 'Content-Type: application/json' -d'
{
"index": "my_index",
"shard": 0,
"primary": true
}'
Puoi anche chiedere a Elasticsearch di spiegare il primo shard non assegnato che trova:
curl -X GET "localhost:9200/_cluster/allocation/explain?pretty" \
-H 'Content-Type: application/json' -d'{}'
Leggi i campi can_allocate, allocate_explanation e node_allocation_decisions. Le cause comuni includono watermarks del disco, filtri di allocazione, nodi mancanti, impostazioni dell'indice incompatibili o un numero insufficiente di nodi dati per il numero di repliche richiesto.
Controllare le Statistiche dei Nodi e del Cluster
Quando la salute è verde ma le ricerche o le scritture sono lente, controlla la pressione delle risorse.
curl -X GET "localhost:9200/_nodes/stats/jvm,fs,os,process,thread_pool?pretty"
curl -X GET "localhost:9200/_cluster/stats?pretty"
Cerca un uso elevato dell'heap JVM, pressione del disco, attività di ricerca o scrittura rifiutate e nodi con un carico molto superiore rispetto ai loro pari. Un singolo nodo sovraccarico può rallentare l'intero cluster se possiede shard caldi.
Per i rifiuti del pool di thread, usa:
curl -X GET "localhost:9200/_cat/thread_pool/search,write?v&h=node_name,name,active,queue,rejected,completed"
Le attività rifiutate di solito significano che il nodo non riusciva a tenere il passo con il tasso di richieste. Risolvi la causa prima di aumentare le code: riduci il costo delle query, distribuisci gli shard, scala i nodi o rallenta l'indicizzazione bulk.
Esaminare le Attività in Sospeso e il Recupero
Se le modifiche allo stato del cluster sembrano bloccate, controlla le attività in sospeso:
curl -X GET "localhost:9200/_cluster/pending_tasks?pretty"
Una lunga coda può indicare pressione sul nodo master, aggiornamenti frequenti del mapping, cambiamenti degli shard o nodi instabili.
Per il movimento e il recupero degli shard, usa:
curl -X GET "localhost:9200/_cat/recovery?v&active_only=true"
Questo aiuta a distinguere un cluster che si sta attivamente riprendendo da uno bloccato da regole di allocazione o dati mancanti.
Leggere i Log di Elasticsearch
I log di Elasticsearch spesso spiegano ciò che le API suggeriscono solo. Controlla i log sul nodo interessato, non solo su un nodo casuale del cluster.
Cerca messaggi come:
master not discoveredflood-stage disk watermarkcircuit_breaking_exceptionrejected executionfailed to obtain node locksshard failed
Ad esempio, un watermark del disco in fase di flood può bloccare le scritture impostando gli indici interessati in sola lettura fino a quando la pressione del disco non viene risolta. Dopo aver liberato spazio su disco o aggiunto capacità, rimuovi il blocco di scrittura solo dopo aver capito perché il disco si è riempito:
curl -X PUT "localhost:9200/*/_settings?expand_wildcards=all" \
-H 'Content-Type: application/json' -d'
{
"index.blocks.read_only_allow_delete": null
}'
Un Flusso di Debug Pratico
Usa questo ordine quando non sai da dove iniziare:
- Controlla
_cat/health?vper vedere se il problema è a livello di cluster. - Usa
_cat/shards?vper trovare shard non assegnati, in rilocazione o caldi. - Esegui
_cluster/allocation/explainper gli shard non assegnati. - Controlla
_cat/nodesper heap, CPU, disco e ruoli dei nodi. - Esamina i log dei nodi per messaggi di allocazione, disco, JVM e circuit breaker.
- Usa le statistiche dei nodi e del pool di thread se il problema è la latenza o le richieste rifiutate.
Punto Chiave
Il debug di Elasticsearch funziona meglio quando si passa da controlli di salute ampi allo shard, nodo o impostazione specifica che causa il problema. Inizia con _cat/health, _cat/shards e la spiegazione dell'allocazione, poi usa i log e le statistiche dei nodi per confermare la causa principale prima di modificare le impostazioni.