Elastic Stack

Jede Anwendung hat heutzutage ein Logfile oder speichert das Log in einer Datenbank. Häufig werden diese Logfiles erst dann ausgegraben, wenn es ein Problem gibt. Dafür benötigt man jemanden, der sich mit den Logfiles auskennt und die relevanten Daten schnell findet. Besonders bei Logfiles, die sich von der Größe her im Gigabytebereich befinden, kann dies zum Problem werden. Dabei stecken in den Logfiles nicht nur die Information über potenzielle oder aufgetretene Probleme, sondern häufig auch businessrelevante Details über die Nutzung eines Service. Es wäre hilfreich, diese Gigabyte an gesammelten Logdaten auswerten zu können, ohne jede Zeile einzeln durchlesen zu müssen.

Was ist der Elastic Stack?

Der Elastic Stack (früher ELK-Stack) ist eine Produktpalette von Elasticsearch Inc. und besteht im Wesentlichen aus den Open-Source-Produkten Elasticsearch, Logstash und Kibana. Dabei ist der gesamte Stack clusterfähig und horizontal leicht skalierbar.

Elasticsearch ist der Kern des Elastic Stack. Dabei handelt es sich um eine verteilte Such- und Analyse-Engine, die mit hoher Geschwindigkeit auch große Datenmengen verarbeiten kann. Zusätzlich enthält sie eine leicht zu verstehende Entwickler-API.

Logstash ist eine Pipeline-Software, mit der sich Informationen aus unstrukturierten Datenquellen (zum Beispiel Logfiles) strukturieren und an einen oder mehrere Outputs (zum Beispiel Elasticsearch) verteilen lassen. Zur Strukturierung gibt es Unterstützung für unterschiedlichste bestehende Logformate (zum Beispiel Apache-Webserver Logs oder JSON-Logs). Zusätzlich kann die Strukturierung mit Hilfe einer Beschreibungssprache an das Logformat der eigenen Anwendung angepasst werden.

Kibana ist ein browserbasiertes Visualisierungstool zur Visualisierung der mit Elasticsearch verwalteten Daten. Mit sehr geringem Aufwand lassen sich hier die nun strukturierten Daten zu unterschiedlichen Diagrammen zusammenstellen, welche dann auf einem Dashboard angezeigt und flexibel platziert werden können.

Zusätzlich gibt es noch unterschiedliche Beats, die als kleine Informationssammler zu verstehen sind. So gibt es beispielsweise einen Topbeat, welcher Daten über CPU- und Arbeitsspeicherverbrauch pro Prozess, sowie weitere Systemdaten an Elasticsearch weitergeben kann. Oder Packetbeat, der Netzwerkdaten oder Datenbankanalysen sammelt. Außerdem gibt es Filebeat, womit sich die Logfiles an einen zentralen Server verschicken lassen, welcher sie dann auswertet. Neben einigen weiteren Beats gibt es außerdem ein Open Source Framework namens Libbeat, mit dem eigene Beats erstellt werden können.

Die genannten Dienste sind alle kostenfrei nutzbar und OpenSource. Elasticsearch bietet allerdings zusätzlich noch einen kostenpflichtigen Support, sowie Trainings zu den Diensten an.

Daneben gibt es auch noch kostenpflichtige Dienste direkt von Elasticsearch, die weitere nützliche Funktionen bieten. Diese gibt im Paket X-Pack. So gibt es etwa ein Security-Addon, welches den gesamten Stack absichert. Oder ein Notification-Plugin, welches Schwellen für bestimmte Werte festlegen lässt. Beim Überschreiten des Schwellwertes kann dann ein Alarm ausgelöst werden. Oder ein Reporting-Plugin, welches regelmäßig Reports in Form einer PDF-Datei erzeugt und per Email verschickt. Und so weiter. Eine komplette Liste der aktuell verfügbaren Zusatzdienste ist auf der Website von Elasticsearch zu finden.

Außerdem bietet Elasticsearch den Stack auch als Software As A Service an. Das bedeutet, dass der Stack direkt bei Elasticsearch in der Cloud gehostet wird. Dort können dann je nach Bedarf Amazon-Web-Service-Instanzen zugeschaltet und verwaltet werden. Der gesamte Stack ist ja wie oben genannt clusterfähig.

Wie funktioniert der Elastic Stack?

Üblicherweise schreibt die Java-Application ihr Log direkt auf die Festplatte in eine Log-Datei. Der Inhalt dieser Datei kann mittels einer lokalen Filebeat-Instanz an einen dedizierten Logstash-Server übertragen werden. Der Logstash Server kann dann von mehreren Servern deren Logs erhalten, strukturiert sie und leitet die strukturierten Daten an die Elasticsearch-Server. Die Strukturierung der Logdaten in Logstash ist nicht ganz trivial und liegt nicht im Fokus dieses Artikels. Es ist allerdings anzumerken, dass die Strukturierung massiv vereinfacht werden kann, wenn die Daten von der Anwendung bereits strukturiert geloggt werden. Wir haben für diesen Artikel dazu einen JSON-Logger verwendet.

Kibana greift schließlich direkt auf das Elasticsearch Cluster zu und kann die neuen Logdaten in Echtzeit abrufen und visualisieren.

elastic-stack-filebeat

Alternativ kann die Datei von einer lokalen Logstash-Instanz eingelesen und dann direkt an die Elasticsearch-Server geschickt werden.
elastic-stack-no-filebeat

Es gibt auch Ansätze mit einem Logback-Appender das Log direkt an das Elasticsearch-Cluster schicken zu lassen. Wenn es dann allerdings Probleme mit dem Cluster gibt, wird es für den entsprechenden Zeitraum möglicherweise kein Log geben und die Anwendung kann schlimmstenfalls abstürzen. Natürlich könnte man das Log zwischenspeichern und später verschicken, dann kann man allerdings auch direkt Filebeat verwenden.

Wie kann sowas in einer Produktivumgebung aussehen?

Unsere Beispiel-Anwendung simuliert das Log für einen recht erfolgreichen Webshop. Bei jedem Besuch unseres Shops wird ein Page-Hit Event mit IP-Adresse und Verzögerung geloggt und bei jedem Verkauf wird ein Sale-Event mit Kundenname, Produktname und Verkaufspreis geloggt.

Wir haben für die Daten ein kleines Dashboard erstellt, welches wie folgt aussieht:

kibana_dashboard

Wir haben eingestellt, dass das Dashboard alle 5 Sekunden aktualisiert wird und als Zeitraum die letzten 30 Minuten betrachtet. Somit können wir dabei zusehen, wie sich unser Umsatz verändert. Wir sehen, dass es in den letzten 30 Minuten knapp 29 000 Verkäufe gab. Das Kreisdiagramm bestätigt dies und zeigt an, dass circa 25% unserer Events Verkäufe waren. Wenn man nun die Maus über das Kreisdiagramm bewegt, werden Zusatzinformationen (86 000 Page-Hits, 29 000 Verkäufe) angezeigt. Aus der Anzahl der Verkäufe und dem jeweiligen Kaufpreis lässt sich logischerweise der Umsatz berechnen, in diesem Fall wurden in der halben Stunde ganze 14,45 Millionen Euro umgesetzt. Allerdings gab es nur 39 verschiedene Kunden.

Was sofort auffällt ist, dass gegen 15:25 Uhr die Zahl der Seitenaufrufe und die Zahl der Verkäufe schlagartig gestiegen und kurz danach wieder auf ein nun etwas höheres Niveau abgefallen ist. Wir wissen, dass zu diesem Zeitpunkt unser Werbespot ausgestrahlt wurde. Daraus schließen wir, dass der Werbespot zumindest kurzfristig eine signifikante Erhöhung unseres Umsatzes erzeugt hat. Man könnte in Kibana sogar ein Feld hinzufügen, in dem der überdurchschnittliche Umsatz in der Zeitperiode ab der Ausstrahlung des Werbespots angezeigt wird. Damit könnte man die Wirtschaftlichkeit des Werbespots auf einen Blick ablesen.

Da es während dieser Zeit allerdings auch eine erhöhte Anzahl an Fehlermeldungen von den Kunden gegeben hat, gehen wir davon aus, dass es möglicherweise zu einer Überlastung der Server gekommen ist. Um dies zu überprüfen, zoomen wir jetzt auf das Intervall mit den erhöhten Zugriffen.

kibana_dashboard_ad

Und tatsächlich: Wir sehen extreme Einbrüche, die offenbar regelmäßig auftreten. Theoretisch könnten wir als nächstes in das Dashboard des Apache-Webservers hineinschauen und nachsehen, ob es zu den gleichen Zeiten spezielle Fehlercodes gab, die gehäuft aufgetreten sind. Wenn wir das Dashboard wechseln, wird der ausgewählte Zeitraum übernommen, das heißt wir befinden uns dann im Apache-Log direkt an der richtigen Stelle. Außerdem könnten wir das Dashboard für Topbeat öffnen und nachsehen, ob es zu den Zeitpunkten eine besonders hohe Arbeitsspeicherauslastung gab oder eine Überbeanspruchung der Prozessoren vorlag.

Man kann den Elastic Stack natürlich auch dazu verwenden, detailliertere Informationen über einzelne Kunden zu erhalten. In unserem Dashboard befindet sich rechts eine Liste mit den 10 Kunden, welche die meisten Produkte gekauft haben. Wir sehen, dass Kunde „ember“ allein etwa 5% der Verkäufe ausgemacht hat. Um die Verkäufe an diesen Großkunden anzeigen zu lassen, klicken wir in der Top-10-Tabelle auf „ember“. Nun werden alle Felder aktualisiert und wir sehen nur noch die Daten für ember:

kibana_dashboard_top_customer

Offenbar hat ember gut 730 000 Euro bei uns ausgegeben. Der durchschnittliche Preis pro gekauftem Produkt war offensichtlich minimal höher, als der Durchschnittspreis für alle Kunden. Auch ember hat offenbar kurz nach der Werbung nochmals kräftig eingekauft, da wir im unteren Sales-Graph einen klaren Anstieg kurz nach Ausstrahlung der Werbung sehen.

Fazit

Der Elastic Stack ist ein hochinteressantes Tool für jene, die noch nach einer Lösung suchen, um das Potenzial ihrer Logdaten zu heben. Nach kleinen anfänglichen Schwierigkeiten mit dem Setup des Stacks und der Anpassung der Anwendung sind die erhobenen Daten in wahrscheinlich jedem Fall den Aufwand wert. Fälle zur Anwendung gibt es genug. Sie reichen von einem reinen Monitoring der technischen Infrastruktur bis hin zur Auswertung von Geschäftszahlen. Der große Vorteil gegenüber einzelnen Lösungen für einzelne Anwendungsfälle ist die gemeinsame Integration aller Daten. So kann beispielsweise sofort der Zusammenhang von Geschäftsdaten mit den Daten oder Kosten der technischen Infrastruktur abgeglichen werden. Auf Basis dessen können dann fundiertere Geschäftsentscheidungen getroffen werden.

Es lassen sich auch beliebige Daten von dritten Parteien einspielen (beispielsweise Wetterdaten). So lassen sich sogar Korrelationen feststellen, die nicht direkt aus den internen Daten hervorgehen.

Short URL for this post: http://wp.me/p4nxik-2JF
This entry was posted in Open Source BI and tagged , , , , , . Bookmark the permalink.

Leave a Reply