Mein ELK-Stack läuft in einer kleinen VM mit nur 1,4 GB RAM. Leider war das für Logstash und Elasticsearch schnell zu wenig, sodass vor allem Logstash vom System regelmäßig „gekillt“ wurde, weil kein RAM mehr verfügbar war. Logstash hat alleine schon mit über 800 MB Verbrauch zu Buche geschlagen – Elasticsearch auch nochmal mit ca. 250 – 300 MB. Zusammen mit den anderen Diensten in der VM war das zu viel. Mit wenigen Handgriffen kann man den Speicherkonsum von beiden Komponenten allerdings schnell zügeln.
Elasticsearch drosseln
Um den RAM-Verbrauch von Elasticsearch zu deckeln, wird die Konfigurationsdatei /etc/elasticsearch/elasticsearch.yml am Ende um folgende Zeile erweitert:
indices.fielddata.cache.size: 300mb
… und der ES-Dienst neu gestartet. Statt der „300mb“ kann man auch einen Anteil am gesamten RAM angeben, z.B.:
indices.fielddata.cache.size: 80%
Logstash drosseln
Logstash kann über die Konfigurationsdatei „/etc/default/logstash“ gezügelt werden. Dort wird die Zeile mit „LS_HEAP_SIZE“ einfach einkommentiert und ein beliebiger Wert für den maximalen Hauptspeicherverbrauch gesetzt, z.B. so:
LS_HEAP_SIZE="700m"
Logstash wird dann maximal 700 MB RAM nutzen. Achtet hier auf das einfache „m“ statt „mb“ (entsprechend dann für Gigabytes „g“). Ein Neustart des Logstash-Dienstes ist danach notwendig.
Mit den beiden Einstellungen habe ich den Speicherverbrauch meines ELK-Stacks nun im Griff und brauche mich nicht mehr ständig zu kontrollieren, ob Logstash von Linux wieder einmal aus dem RAM geworfen wurde.