Elasticsearch - wie man Elasticsearch richtig nutzt und optimiert

Blog. Immerse yourself in AI

Wie kann Elasticsearch genutzt und optimiert werden, und wie können häufige Fehler vermieden werden? - Sie wissen schon, für die Suche.

Krzysztof Udycz
AI Engineer
08. June 2022

Elasticsearch ist eine der leistungsfähigsten Index-, Such- und Analysemaschinen, die auf Apache Lucene basiert. Es ist ein Open-Source-Projekt, das sowohl bei Startups als auch bei großen Unternehmen wie Uber, Walmart, Audi oder Netflix (https://www.elastic.co/customers/)  schnell populär wurde. Aber wie bei vielen anderen Tools kommt mit großer Macht auch große Verantwortung.

Deshalb möchten wir in diesem Blogpost nicht nur erwähnen, was Elasticsearch so cool macht, sondern auch einige Bereiche und Themen mit Ihnen teilen, denen Sie besondere Aufmerksamkeit widmen sollten, wenn Sie ernsthaft über den Einsatz von ELK Stack in Ihrer Lösung nachdenken.

Was ist ELK Stack?

Elasticsearch ist die zentrale Komponente des ELK Stack (Akronym für Elasticsearch, Logstash, Kibana). ELK Stack ist eine Reihe von Tools für die Datenaufnahme, -umwandlung, -speicherung, -überwachung, -berichterstattung, -analyse und -visualisierung, die zusammen ein komplexes Produkt bilden, das in vielen Geschäftsszenarien eingesetzt wird – von der Infrastrukturüberwachung und dem Management von Sicherheitsvorfällen bis hin zu erweiterten analytischen Dashboards und der Unternehmenssuche.

ELK Stack – who is who?

Elasticsearch – the core of  the Elastic Stack, a search and analytics engine

Kibana – frontend application that provides data visualization, management, and monitoring functionalities

Logstash – implements ingest pipelines that simultaneously collect and transform data – especially log files – and send them to the receiver

Beats – a platform for single-purpose data shippers (Filebeat, Metricbeat, Heartbeat etc.)

Elasticsearch kann zahlreiche Datentypen verarbeiten, darunter textuelle, numerische, geospatiale, strukturierte, halbstrukturierte und sogar unstrukturierte Daten! Elasticsearch ist bekannt für seine Skalierbarkeit und Flexibilität, wodurch es in der Lage ist, große Datenmengen nahezu in Echtzeit zu verarbeiten – auch in verteilten, mandantenfähigen Szenarien. Außerdem bietet es eine einfach zu bedienende RESTful API (die schemafreien JSON-Dokumente verarbeitet) und unterstützt eine große Anzahl verschiedener Programmiersprachen. All diese Eigenschaften machen Elasticsearch zu einem komplexen Werkzeug, das in vielen Bereichen des Lebens Anwendung findet, darunter Landwirtschaft, Bildung, Energie, Finanzdienstleistungen, Behörden, Gesundheitswesen, Technologie und professionelle Dienstleistungen.

Elastic Stack Anwendungsfälle – Hall of Fame

Elasticsearch 1.0 wurde 2010 veröffentlicht. Seitdem ist das Projekt gewachsen und hat sich weiterentwickelt und Anerkennung und Bekanntheit erlangt. Heute nutzen viele bekannte Unternehmen und Institutionen ELK Stack in ihren Produkten und Dienstleistungen – und oft wissen wir nicht einmal davon!

Netflix zum Beispiel verwendet mehrere Cluster, die jeweils aus Hunderten von Knoten bestehen, die miteinander verbunden sind. Ziemlich beeindruckend, oder? Diese Architektur wird teilweise als Grundlage für die Nachrichtenplattform von Netflix (E-Mails, Push-Benachrichtigungen, Textnachrichten) und zur Überwachung von Trends unter den Nutzern oder zur Analyse von Sicherheitsprotokollen/Vorfällen verwendet.

Tinder verlässt sich auf den Elastic Stack, wenn es um die Analyse, Visualisierung und Vorhersage von Nutzermustern und Match-Präferenzen geht.

An der Universität Oxford wurde ein SIEM-System der nächsten Generation mit dem ELK Stack aufgebaut. Und schließlich verwendet eBay Elasticsearch als Hauptsuchmaschine (über 800 Millionen Angebote, deren Ergebnisse nahezu in Echtzeit zurückgegeben werden) und Beats zur Überwachung von Petabytes an Protokollen pro Tag. Es gibt viele weitere Beispiele von Unternehmen, die Elastic in alltäglichen Situationen und Produkten einsetzen.

Achtung – einige Anwendungsfälle, auf die Sie beim Einsatz von Elasticsearch in Ihren Produkten beachten sollten

Elasticsearch ist eine komplexe Software, die trotz ihrer vielen Vorteile auch Probleme verursachen kann, wenn sie falsch eingesetzt oder bedient wird. (*Wir haben für Sie ein kurzes Glossar am Ende des Artikels vorbereitet, um die in diesem Teil des Artikels verwendeten Begriffe zu erklären).

#1 – Konfiguration und Einrichtung

Die ersten Probleme können bereits bei der Installation und Konfiguration eines Clusters auftreten. Bei der Einrichtung eines Clusters ist es wichtig, auf alles zu achten, da wir es mit verteilten Systemen zu tun haben. Es gibt viele Gründe, warum Fehler auftreten – das können z.B. unterschiedliche Versionen, falsch gesetzte Variablen, Tippfehler, Deployment-Modus oder falsche Vernetzung sein. Diese Probleme führen dazu, dass die Knoten die Bootstrap-Prüfungen nicht bestehen und keine stabile Cluster-Verbindung aufbauen können.

#2 – Index-Einstellungen

Dies ist nicht das Ende der Situationen, in denen Elasticsearch Ihnen Schwierigkeiten bereiten kann. Probleme im Zusammenhang mit den Indexeinstellungen spiegeln sich im Zustand des Clusters wider (basierend auf dem Status der primären und replizierenden Shards). Es gibt drei Zustände:

  • grün – alle Shards sind zugewiesen;
  • gelb – nicht zugewiesene Replikat-Shards – einige Daten können nicht verfügbar sein, wenn ein Knoten ausfällt;
  • rot – nicht zugewiesene primäre Shards – einige Daten sind unerreichbar. Dieser Status bedeutet ernsthafte Probleme, z. B. Probleme mit Speicherplatz, Festplatten oder Verbindungsfehlern.

Es lohnt sich, den Zustand des Clusters zu überwachen und zu reagieren, wenn der Status nicht im grünen Bereich liegt.

#3 – Sicherheit

Ein wichtiger Aspekt bei der Arbeit mit Elastic Stack ist die Sicherheit, die seit Version 8.x standardmäßig aktiviert ist. Bei früheren Versionen ist die Sicherheitsebene nicht standardmäßig aktiviert; wenn Sie diese also nicht eingerichtet haben und Ihr Elasticsearch im Produktionsmodus eingesetzt wird, könnten Sie ernsthafte Probleme bekommen! Wenn Ihre Suchmaschine nicht gesichert ist, können Unbefugte Zugang zu Ihren Daten erhalten, sie durchsuchen, verändern und sogar löschen. Gesichertes Elasticsearch ist nur für bestimmte Benutzer zugänglich – es ist eine gute Praxis, Benutzer anzulegen und ihnen nur die notwendigen Rollen für die von ihnen ausgeführten Aktivitäten zu geben. Der für Snapshots zuständige Benutzer sollte nur Zugriff auf Snapshot-bezogene Rollen haben. Es gibt viele Berechtigungen für Cluster und Indizes, aber es lohnt sich, sie einzurichten. Sicherheit geht vor.

#Nr. 4 – Leistung

Je größer das Datenvolumen wird, desto mehr Stabilitäts- und Verfügbarkeitsprobleme treten auf, die die Leistung des ELK Stack beeinträchtigen. Je größer zum Beispiel der Index ist, desto größer ist die Wahrscheinlichkeit, dass seine Shards ausfallen, was dazu führt, dass keine Ergebnisse zurückgegeben werden. Je größer die Datenmenge ist, desto mehr Ressourcen werden benötigt, um das aktuelle Leistungsniveau aufrechtzuerhalten. Andernfalls kommt es immer häufiger zu schwerwiegenden Problemen. Das Hinzufügen eines weiteren Knotens auf einer anderen virtuellen Maschine zum Cluster (horizontale Skalierung) kann solche Probleme teilweise lösen. Auch eine Änderung der Einstellungen (z. B. der Heap-Größe) kann die Gesamtleistung der Anwendung erhöhen.

Wenn Sie Ihre Cluster-Einstellungen überprüft und die erforderlichen Anpassungen vorgenommen haben und die Leistung Ihrer Anwendung immer noch zu wünschen übriglässt, liegt das Problem möglicherweise in der Art der Datenverarbeitung.

#5 – Mappings und Text-Analysatoren

Ein falsches Mapping oder ein fehlerhafter Textanalyzer kann die Qualität der von Elasticsearch zurückgegebenen Ergebnisse beeinträchtigen. Mappings legen fest, wie das Dokument und die darin enthaltenen Felder gespeichert und indiziert werden, z.B. welche Textfelder analysiert werden sollen, erlauben benutzerdefinierte Datumsformate oder geben an, welche Felder Zahlen, Daten oder geografische Orte enthalten. Analyzer werden zur Analyse von Text bei der Indizierung oder Suche in Textfeldern verwendet. Sie ermöglichen Elasticsearch, relevante Ergebnisse anstelle von exakten Übereinstimmungen zurückzugeben. Analyzer bestehen aus einem Zeichenfilter (Operationen auf einzelnen Zeichen), einem Tokenizer (der eine Zeichenkette in ein Array einzelner Token umwandelt) und einem Tokenfilter (Operationen in einzelnen Token). Ein gut gewähltes Mapping zusammen mit einem geeigneten Analyzer schafft die notwendigen Grundlagen für den korrekten Betrieb der Anwendung. Sie können auch Ihren eigenen Analyzer implementieren – das ist gar nicht so schwer! Die Felder, für die keine Analysatoren angegeben sind, werden als nicht analysierte Felder bezeichnet und speichern den Originaltext (der zwar normalisiert, aber nicht tokenisiert oder gefiltert ist).

#6 – Abfragen

Elasticsearch verfügt über eine eigene Sprache für die Abfrage von Daten (Elasticsearch DLS), die Ergebnisse auf der Grundlage eines Relevanz-Scoring liefert (ein Maß, das uns sagt, wie gut eine Suche zu einem Dokument passt). Es gibt einige Regeln, die bei der Implementierung von Suchanfragen beachtet werden sollten. Hier sind einige der Regeln – sie werden Ihnen helfen, korrekte Abfragen zu schreiben und können die Leistung Ihrer Anwendung verbessern:

  • Denken Sie an den Abfragekontext, der sich auf das Ergebnis auswirkt, und an den Filterkontext, der dies nicht tut. Die zurückgegebenen Ergebnisse können sich bei Verwendung verschiedener Kontexte unterscheiden;
  • es gibt spezielle Abfragen für analysierte Felder (Volltextsuchabfragen) und andere für nicht analysierte (Suchabfragen auf Termebene); dies ist von großer Bedeutung;
  • verschiedene Abfragen variieren in der Rechenkomplexität; versuchen Sie, eine andere Lösung zu finden, wenn die Abfrage nicht schnell genug ist;
  • Paginierung verwenden, um nur die jeweils benötigte Anzahl von Dokumenten zu liefern;
  • je komplexer die Abfrage, desto größer die Fehlerwahrscheinlichkeit; achten Sie auf die verwendeten logischen Operatoren – auch sie sind wichtig;

Die richtige Auswahl von Abfrage, Mapping und Analysator garantiert den Erfolg. Gemeinsam sorgen sie dafür, dass Ihre Anwendung relevante Daten zurückgibt, die für den Benutzer Ihrer Anwendung am wichtigsten sind. Denn darum geht es schließlich. Wenn sie richtig konfiguriert sind, ermöglichen sie darüber hinaus die Implementierung vieler interessanter Lösungen wie Autovervollständigung, verschachtelte Dokumente, Synonyme, ähnliche Dokumente usw. Sie indizieren ein und dasselbe Feld auf unterschiedliche Weise (z. B. ohne Berücksichtigung von Groß- und Kleinschreibung, Akzenten oder Stoppwörtern), je nach Ihren Bedürfnissen.

Elastic Stack ist ein leistungsfähiges Werkzeug, das bei richtiger Anwendung zu Ihrem Verbündeten wird – Sie wissen schon, für die Suche. Dank einer Vielzahl von Lösungen und integrierten Funktionen ermöglicht es die Implementierung komplexer Lösungen. Allerdings kann die Arbeit mit Elasticsearch manchmal eine Herausforderung sein. Wenn Sie Probleme mit Ihrem Elasticsearch-Cluster haben, ein Audit Ihrer Lösung durchführen wollen oder einen erfahrenen Partner für den Aufbau einer Lösung mit ELK Stack suchen, kontaktieren Sie uns unter [email protected]

Elasticsearch – Mini-Glossar

Um zu verstehen, wie Elasticsearch funktioniert, ist es notwendig, einige grundlegende Begriffe und Konzepte einzuführen, die man kennen muss:

  • Cluster: eine Sammlung von einem oder mehreren verbundenen Knoten. Er ist verantwortlich für die Datenredundanz, die horizontale Skalierung und die Verteilung der Prozesse auf alle Knoten im Cluster;
  • Knoten: es gibt viele Arten von Knoten mit unterschiedlichen Rollen, z. B. Master (Clusterverwaltung), Daten (Speicherung von Indizes; datenbezogene Vorgänge nach der Indizierung) und Ingest (Datenverarbeitung und -anreicherung; Aktivitäten vor der Indizierung). Ein Knoten kann mehrere Funktionen erfüllen;
  • Index: eine logische Struktur, die eine Sammlung ähnlicher/verwandter Dokumente enthält, z. B. Filmkritiken oder Produktinformationen. Er besteht aus Shards (primär – Originalteil des Index; Replikat – Kopie des primären Shards, ermöglicht Datenreplikation, Redundanz und erhöht auch den Suchdurchsatz);
  • Dokument: grundlegende Dateneinheit, die in Elasticsearch gespeichert wird (serialisiert im JSON-Format). Es besteht aus Feldern (Schlüssel-Wert-Paaren), die jeweils ihren eigenen Datentyp haben. Ein und dasselbe Feld kann auf unterschiedliche Weise indiziert und durchsucht werden, wobei eine breite Palette von Mapping-Eigenschaften und Textanalysatoren verwendet wird.

Invertierter Index: eine hashmap-ähnliche Datenstruktur, die eindeutige Suchbegriffe (Wörter, Zahlen, Phrasen usw.) auflistet und zu ihren Positionen in allen Dokumenten führt, die sie enthalten. Diese Struktur war ein echter Durchbruch bei der Implementierung von Suchmaschinen, da sie eine sehr schnelle (nahezu in Echtzeit) Volltextsuche selbst in großen Datenbeständen ermöglicht. Elasticsearch verwendet standardmäßig mehrere verteilte invertierte Indizes.

Sie interessieren sich für Ki und Technologien? In unserem Blog erfahren Sie mehr.

Möchten Sie eine Lösung mit ELK Stack bauen?
Wir können Ihnen helfen, mit dem Thema zu beginnen.
Lassen Sie uns einen Termin vereinbaren