2014-11-12 5 views
10

ist es möglich mit Kibana (vorzugsweise der neuen Version 4 beta) anwendungsseitige Joins durchzuführen?Elasticsearch/Kibana: Applikationsseitige Joins

Ich weiß, dass ES/Kibana nicht als Ersatz für relationale Datenbanken gebaut wurde und es ist normalerweise eine bessere Idee, meine Daten zu denormalisieren. In diesem Anwendungsfall ist dies jedoch nicht der beste Ansatz, da die Indexgröße explodiert und die Leistung sinkt:

Ich indexiere Milliarden von Dokumenten, die Sitzungsinformationen von Netzwerkflüssen enthalten, wie folgt: source ip, source port, Ziel-IP, Ziel-Port, Zeitstempel.

Jetzt möchte ich auch zusätzliche Informationen für jede IP-Adresse, wie Geolocation, Asn, Reverse-DNS usw. sammeln. Hinzufügen dieser Informationen zu jeder einzelnen Sitzung Dokument macht die gesamte Datenbank nicht handhabbar: Es gibt Millionen von Dokumenten mit der gleichen IP Adressen und die Redundanz des Hinzufügens der gleichen zusätzlichen Informationen zu all diesen Dokumenten führt zu einem massiven Aufblähen und einer nicht-reagierenden Benutzererfahrung selbst auf einem Cluster mit Hunderten von Gigabytes RAM.

Stattdessen möchte ich einen separaten Index erstellen, der nur eindeutige IP-Adressen und die Metadaten enthält, die ich zu jedem von ihnen gesammelt habe.

Die Frage ist: Wie kann ich noch meine Daten mit Kibana analysieren? Für jedes von der Abfrage zurückgegebene Dokument sollte kibana im ip-index nachschlagen und jede IP-Adresse mit diesen Informationen virtuell anreichern. Etwas wie das Hinzufügen von virtuellen Felder so die Struktur wie folgt aus (on the fly) aussehen:

Quell-IP, Quellport, Herkunftsland, Quelle asn, Quelle fqdn

Ich bin mir bewusst, dass dies kommen auf Kosten von mehreren Abfragen.

+0

Aus Neugier verwenden Sie doc_values ​​für Ihren nicht analysierten Feldcache? Persönlich, bevor ich überhaupt versuchen würde, meine Daten zu normalisieren, würde ich versuchen, zu doc_values ​​zu wechseln, um zu sehen, ob das half. Sie könnten auch int globale Ordnungszahlen (zB https://www.elastic.co/guide/en/elasticsearch/reference/1.6/fielddata-formats.html) suchen, aber mit hohen Kardinalitätsdaten denke ich eigentlich nicht sei eine sehr gute Idee .... – evanv

Antwort

2

Ich glaube nicht, dass es so etwas ist, aber vielleicht, dass Sie mit den Filtern herumspielen konnte:

  1. Sie erstellen schöne und einfache Daten-Visualisierungen, die Filter auf verschiedenen Typen und zeigt nur eine einfache Daten.
  2. Sie fügen diese verschiedenen Visualisierungen in ein Dashboard ein, um alle mit einem Join-Typ verknüpften Daten anzuzeigen.
  3. Sie verwenden die Filter als Verbindungsschlüssel und verwenden Sie das vollständige Armaturenbrett, von verschiedenen Platten bestand, Einblicke spezifischer zu bekommen Joinschlüssel (ips in Ihrem Fall oder Sitzungen)

Sie müssen erstellen 1 Dashboard für jede Art von Join, die Sie machen möchten.

Beachten Sie, dass Sie die Namen und Zuordnungen der Felder in Ihren verschiedenen Dokumenten harmonisieren müssen!

Halten Sie uns auf dem Laufenden, das ist eine interessante Problematik, ich möchte jetzt, wie es sich herausstellt mit so vielen Dokumenten.