Elasticsearch – Ein praktischer Einstieg

Neues in Elasticsearch 5.0

Gestern ist mit Elasticsearch 5.0 der Nachfolger für die 2.x-Serie erschienen. Der Versionssprung erfolgte, um alle Projekte des elastic-Stacks auf eine einheitliche Versionsnummer zu ziehen, um die Kompatibilität zwischen den Systemen deutlich zu machen. In diesem Post beschreibe ich einige interessante Features der neuen Version.

Text- und Keyword-Felder

Eine kleine, aber komfortable Änderung gab es beim Mapping für Textfelder. Statt wie bisher ein String-Feld entweder als analyzed (für die Volltextsuche) oder als not_analyzed (für exakte Matches) anzulegen, wird dieses jetzt mit den eigenen Feld-Typen text und keyword unterstützt. Standardmäßig wird jetzt sogar über das dynamische Mapping ein zusätzliches Feld feldname.keyword vom Typ keyword angelegt, das für Sortierung oder Aggregation direkt verwendet werden kann.

Ingest Node

Die Ingest-Node-Funktionalität ist eingeführt worden, um die Verarbeitung von Inhalten zu beschleunigen, vor allem beim zentralisierten Logging. Ingest-Nodes können genutzt werden, um einzelne Komponenten, sogenannte Processoren, zu konfigurieren, die Lognachrichten aufspalten oder anreichern können. Einige verfügbare Processoren halten sich dabei vom Verhalten an bekannte Logstash-Filter, so existieren beispielsweise grok, split und date-Processoren. In Verbindung mit einem Log-Shipper wie Filebeat ist die Nutzung eines externen Logstash-Prozesses mit Ingest-Nodes nicht mehr zwingend nötig. Der Name Ingest-Node bezieht sich darauf, dass diese Verarbeitung dann auf einem dedizierten Knoten im Cluster erfolgen kann, damit die Stabilität des gesamten Clusters nicht beeinträchtigt wird.

Painless Scripting

Wie im Buch beschrieben gibt es was die Scripting-Unterstützung in Elasticsearch angeht eine unglückliche Vergangenheit. Nach und nach waren schon mehrere Skript-Sprachen für die dynamische Nutzung integriert, die alle auf Grund von Sicherheitsbedenken deaktiviert und entfernt werden mussten. Mit Elasticsearch 5 wird jetzt (hoffentlich) alles besser: Durch die eigens entwickelte Skriptsprache Painless gibt es jetzt wieder eine standardmäßig aktivierte Skriptsprache, die für unterschiedliche Funktionalitäten genutzt werden kann. Besonders interessant kann die Unterstützung für Scripting auch im Zusammenspiel mit der Reindex-API sein.

Java-REST-Client

Der in Elasticsearch enthaltene Standard-Client verwendet bisher zur Kommunikation das interne Protokoll, dass auch bei der Kommunikation im Cluster verwendet wird. Bei Nutzung des Node-Clients verhält sich dieser sogar wie ein Knoten im Cluster. Die Nutzung des Transport-Protokolls hat einige Nachteile:

Mit Elasticsearch 5.0 gibt es mit dem REST-Client eine Alternative, die eine Alternative für den Zugriff auf Elasticsearch bereitstellt. Zum momentanen Zeitpunkt bietet der Client nur Basis-Funktionalität wie das Sniffing zum Erkennen der Struktur des Clusters und die Fehlerbehandlung. Eine komfortable Unterstützung zur Erzeugung von Anfragen ist für die Zukunft angedacht.

Rollover-Indexing

Für zentralisiertes Logging werden meist zeitbasierte Indizes erzeugt, beispielsweise ein Index pro Tag. Dies hat den Vorteil, dass alte Daten einfach gelöscht und gleichmäßig verteilt werden können und dass die Konfiguration für neue Indizes leicht angepasst werden kann. Mit dem Rollover-Indexing gibt es ein neues Pattern, das die Verwaltung von zeitbasierten Indexen verbessert. Dabei kann ein zu voll werdender Index, der für eine optimale Schreiblast mit mehreren Shards ausgestattet sein kann, automatisch mit einem weiteren Index entlastet werden. Der volle Index kann über die Shrink-API dann auf weniger Shards geschrumpft werden, was die Suchperformance und die Ressourcenauslastung verbessern kann.

Betrieb

Beim Betrieb von Elasticsearch hat sich einiges geändert. Elasticsearch verweigert jetzt den Start bei bestimmten Konfigurationen und schlägt Optionen für Schreibfehler vor. Es ist jetzt nicht mehr ganz so einfach möglich, mehrere Knoten in der selben Installation zu starten. Über den Parameter node.max_local_storage_nodes kann dies allerdings wieder erlaubt werden.

Weiteres

Für das Upgrade auf Elasticsearch 5 steht ein Migration-Helper zur Verfügung. Neben den vorgestellten Features gibt es noch viele weitere Änderungen, die im Blogpost zum Release zusammengefasst sind.

Daneben haben sich auch die anderen Produkte des Elastic-Stacks weiterentwickelt. Beispielsweise ist Sense, der Query-Editor für Elasticsearch, jetzt fest in Kibana integriert und für Logstash gibt es jetzt Unterstützung für ein besseres Monitoring. Viele Details sind im Blogpost zum Stack-Release wiedergegeben.