- Mit ES 8.18 wird der ES|QL-Befehl LOOKUP JOIN eingeführt, der Datenkorrelation und -anreicherung ermöglicht
- Im Vergleich zur bisherigen ENRICH-Funktion ist die Einrichtung und Verwaltung einfacher und nützlich für Daten-Joins, die Korrelationsanalyse von Sicherheitsereignissen und das Zusammenführen von Asset-Informationen
- Für JOINs wurde neu der auf Single-Shard basierende Modus „lookup index“ entwickelt — er kann bis zu 2 Milliarden Dokumente speichern
LOOKUP JOINverarbeitet Many-to-Many-Joins einfach und eignet sich auch für dynamische Feldangaben sowie Aggregationsfunktionen- Über Kibana oder die API lassen sich lookup-Indizes einfach aus CSV erstellen; künftig sind auch INNER JOINs und Subqueries geplant
ES|QL hat jetzt einen echten JOIN: Einführung in LOOKUP JOIN
Jetzt sind auch in Elasticsearch SQL-ähnliche JOINs möglich
- Seit Elasticsearch 8.18 unterstützt ES|QL
LOOKUP JOIN - Dabei handelt es sich um eine LEFT OUTER JOIN-Form, wobei die „rechte“ Datenseite über den neuen
lookup-Indexmodus verwaltet wird - Beispiele:
- Umgebungsnamen (dev, QA, prod) anhand von IP-Adressen zusammenführen
- Sicherheitsereignisse um Mitarbeiterinformationen, Asset-Daten, Threat Intelligence usw. ergänzen
- In Weblogs Umgebungen nach Response-Code analysieren
Unterschiede zu ENRICH
-
ENRICH-Ansatz
- Eine indexbasierte Policy muss vorab konfiguriert werden
- Bei Datenänderungen muss die Policy jedes Mal erneut ausgeführt werden
- Bei Mehrfachtreffern erfolgt die Rückgabe als mehrwertiges Feld, was die Nachbearbeitung komplex macht
- Für Aggregationen und statistische Analysen ungeeignet
- Geeignet für statische Daten (Referenzinformationen, die sich kaum ändern)
-
LOOKUP JOIN-Ansatz
- Sofort ohne separate Policy nutzbar
- Der Index kann direkt geändert werden, sodass Änderungen sofort wirksam werden
- Bei Mehrfachtreffern werden die Ergebnisse zeilenweise getrennt, was die Analyse erleichtert
- Für Gruppierung und Aggregation optimiert (z. B. gesamte Traffic-Summe pro Benutzer)
- Auch für dynamische und häufig aktualisierte Daten vorteilhaft
Anwendungsbeispiele
FROM kibana_sample_data_logs
| WHERE response.keyword != "200"
| LOOKUP JOIN envs_lkp ON clientip
| STATS COUNT(*) by response, environment
-
Durch JOIN der Umgebungsdaten pro IP lässt sich analysieren, wo HTTP-Fehler auftreten
-
Durch zusätzliches JOINen von Team-Zuordnungen lässt sich erkennen, auf Servern welchen Teams Probleme auftreten
FROM kibana_sample_data_logs | WHERE response.keyword != "200" | LOOKUP JOIN teams_lkp ON host | STATS num = COUNT(*) by host, response.keyword, team | SORT num DESC
So erstellt man einen Lookup-Index
-
Über die Kibana-Oberfläche: Stack Management → Index Management → Create index
-
Über die REST API:
PUT mylookupindex { "settings": { "index.mode": "lookup" } } -
Nach dem Hochladen einer CSV über den Machine-Learning-File-Upload kann beim Erstellen des Index der Modus
lookupgesetzt werden
Hinweise und Tipps
- JOINs sind rechenintensive Operationen; für häufig verwendete Felder sollte statt
lookupeher ENRICH + ingest-time denormalization erwogen werden - Der
lookup indexbesteht aus einem Single Shard und hat ein Limit von maximal 2 Milliarden Dokumenten - Er kann wie eine normale Abfrage auch direkt über
FROM <lookup_index>abgefragt werden - Die Dateneingabe ist auch über Logstash oder Elastic Agent möglich (allerdings nicht als Data Stream)
Ausblick
- INNER JOIN, SUBQUERY und JOINs auf reguläre Indizes sind ebenfalls geplant
- In Kibana soll es künftig direkt eine UI zum Erstellen und Bearbeiten von lookup-Indizes geben
- Beispiel: CSV per Drag-and-Drop in Discover → automatische Index-Erstellung
- Eine GUI-basierte Verwaltung für Lookups ist geplant (ein Mockup wurde bereits veröffentlicht)
Zusammenfassung und Einstieg
LOOKUP JOINist zwar noch eine Technical Preview vor dem offiziellen Release, kann ES|QL aber auf ein neues Niveau heben- Der Einstieg ist in Elastic Cloud mit Elasticsearch 8.18 oder 9.0 möglich
Noch keine Kommentare.