2015-06-12 7 views
10

Ich öffne Kibana und mache eine Suche und bekomme den Fehler, wo Shards fehlgeschlagen sind. Ich schaute in der elasticsearch.log Datei und ich sah diesen Fehler:FIELDDATA Daten sind zu groß

org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [@timestamp] would be larger than limit of [622775500/593.9mb] 

Gibt es eine Möglichkeit, dass die Grenze von 593.9mb zu erhöhen?

+1

Sie können diesen Fehler auch direkt in Chrome sehen, indem Sie die Entwicklertools öffnen, die Registerkarte "Netzwerk" auswählen und die Suchanfrage erneut ausführen. Diese Fehlermeldung wird im Feld "Response" des Ereignisses '_msearch? 'Angezeigt. Dies hilft, wenn Sie keinen direkten Zugriff auf die Serverprotokolle haben. – anothermh

Antwort

15

Sie können versuchen, die fielddata circuit breaker Grenze auf 75% zu erhöhen (Standard: 60%) in Ihrer elasticsearch.yml Config-Datei und starten Sie den Cluster:

indices.breaker.fielddata.limit: 75% 

Oder wenn Sie es vorziehen, nicht den Cluster neu starten, können Sie ändern, Die Einstellung dynamisch mit:

curl -XPUT localhost:9200/_cluster/settings -d '{ 
    "persistent" : { 
    "indices.breaker.fielddata.limit" : "40%" 
    } 
}' 

Probieren Sie es aus.

+0

Dies löste sofort das Problem, das ich hatte und wird arbeiten, bis ich den verfügbaren Speicher erhöhen kann. – anothermh

+0

Wie machst du das für elasticsearch 5.x? – Amar

+0

Ich habe dies für _cluster und meinen Clusternamen versucht, aber wenn ich ein Get on _cluster/Einstellungen mache, scheint es nicht angewendet zu haben. –

1

Ich triff dieses Problem auch. Dann überprüfe ich den Felddatenspeicher.

Verwendung unten Anfrage:

`GET /_stats/fielddata?fields=*` 

die Ausgangsanzeige:

"logstash-2016.04.02": { 
    "primaries": { 
    "fielddata": { 
     "memory_size_in_bytes": 53009116, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    }, 
    "total": { 
    "fielddata": { 
     "memory_size_in_bytes": 53009116, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    } 
}, 
"logstash-2016.04.29": { 
    "primaries": { 
    "fielddata": { 
     "memory_size_in_bytes":0, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    }, 
    "total": { 
    "fielddata": { 
     "memory_size_in_bytes":0, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    } 
}, 

Sie können mein Indizes nennt Basis Datetime und Vertreibungen sind alles 0. Addition, 2016.04.02 Speicher sind 53.009.116 sehen, aber 2016.04.29 ist auch 0.

, so kann ich Schluss machen, müssen die alten Daten den gesamten Speicher belegen, so neue Daten, die sie verwenden kann nicht, und dann, wenn ich agg Abfrage neue Daten zu machen, erhöhen sie die CircuitBreakingException

Sie können config/Elasticsearch eingestellt. yml

es kann Daten löschen, wenn das Speicherlimit erreicht wird.

aber möglicherweise die wirkliche Lösung, die Sie Speicher in Zukunft hinzufügen sollten. Und überwachen Sie die Felddatenspeicher Verwendung ist gute Gewohnheiten.

Detail: https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html

0

Ich denke, es ist wichtig zu verstehen, warum dies in erster Linie geschieht. In meinem Fall hatte ich diesen Fehler, weil ich Aggregationen auf "analyzed" Felder ausgeführt habe. Wenn Sie Ihr Zeichenfolgenfeld wirklich benötigen, um analyzed zu sein, sollten Sie in Betracht ziehen, multifields zu verwenden und es analyzed für Suchen und not_analyzed für Aggregationen zu machen.

0

Ich lief neulich in dieser Ausgabe. Zusätzlich zum Überprüfen des Felddatenspeichers würde ich auch den JVM- und OS-Speicher prüfen. In meinem Fall hat der Administrator vergessen, die ES_HEAP_SIZE zu ändern und es bei 1gig belassen.