Statistische Auswertungen mit Elasticsearch und Kibana

Jeder Betreiber eines Webshops oder einer App kennt das Problem: Will man sein Produkt optimal vermarkten, benötigt man ausführliche Statistiken der angefallenen Prozesse. In diesem Beitrag möchten wir die Tools Elasticsearch und Kibana vorstellen, mit welchen sich auch komplexe Auswertungen ohne zusätzlichen Programmieraufwand umsetzen lassen.

Welche Daten erfasst werden

Bei dem Betrieb von Softwareanwendungen fallen eine Vielzahl von Daten über funktionale aber auch nichtfunktionale Kennzahlen an.

Nicht funktionale Kennzahlen sind zum Beispiel die Auslastung der Ressourcen wie CPU, Arbeitsspeicher oder Festplatten.

Funktionale Daten können zum Beispiel in einem Webshop die Anzahl der durchschnittlich im Warenkorb befindlichen Artikel oder deren Preise sein. Kennzahlen, wie die durchschnittliche Zeit zum Laden einer Webseite, lassen sich nicht so einfach klassifizieren. Aber auch sie können von sehr großer Bedeutung sein.

Viele Tools und Indiviuallösungen

Typisches Systemmonitoring
Besucherstatistiken mit Piwik

Häufig werden die funktionalen und nicht funktionalen Kennzahlen getrennt erfasst und mit unterschiedlichen Tools ausgewertet.

Im Laufe der Zeit werden die Statistiken von weiteren Kennziffern benötigt, für deren Auswertung es kein fertiges Tool gibt. In den meisten Fällen werden dann individuelle Auswertungen entwickelt, die so nach und nach um weitere Funktonen erweitert werden.

Das führt dazu, dass nach einer gewissen Zeit immer mehr unterschiedliche Tools im Einsatz sind, die gepflegt und auch verstanden werden müssen. Dafür wird Zeit benötigt, die dann oft an anderer Stelle fehlt.

Statistische Auswertungen am Beispiel einer Android App

In dem hier betrachteten Beispiel geht es um die Auswertung der Nutzerstatistiken für die Android-App Free VOD Stream, welche wir im Auftrag eines Kunden entwickelt haben. Diese App ermöglicht es beliebige Listen von Videos – sogenannte Channels – auf Smartphones, Tablets, sowie auf Smart TVs abzuspielen.

Serverseitig werden die Daten zu den Videos über eine Schnittstelle (API) bereitgestellt. Bei der Nutzung der API werden viele Daten erfasst, welche eine hohe Aussagekraft über das Nutzerverhalten und mögliches Verbesserungspotential geben.

Die Auswertung dieser Daten erfolgte anfangs schwerpunktmäßig über ein dafür entwickeltes Administrationswerkzeug:

Anwendungsmonitoring der App-Api

Im Betrieb hat sich gezeigt, dass für die Auswertung immer wieder neue Kennzahlen benötigt wurden. Einige davon waren sicherlich auch für spätere Analysen interessant. Es gab aber auch Auswertungen, die nur in einem bestimmten Zeitraum Sinn machten.

So wurde z.B. im Rahmen von A/B Tests bestimmte Paysites getestet. Während dieser Tests ist es wichtig zu wissen, welche dieser Seiten gut von den Usern angenommen werden und welche nicht. Da nach einem solchen Test die nicht so gut laufenden Paysites wieder entfernt werden, ist es nicht erforderlich, deren Daten dauerhaft in den Statistiken anzuzeigen.

Für solche zeitlich begrenzten Aktionen eigene Analysewerkzeuge zu programmieren, wäre unverhältnismäßig und in den diesem Fall auch unnötig.

Auswertung mit Elasticsearch und Kibana

Mit Elasticsearch gibt es eine moderne OpenSource-Software die auf das leistungsfähige Lucene-Framework aufbaut und zusammen mit der Analysesoftware Kibana einfache und detaillierte Auswertung nahezu beliebiger Daten erlaubt.

Im Beispiel der Android App FreeVODStream gehen die API-Anfragen an einen Webserver. Dieser speichert alle benötigten Daten in seinem Server-Log ab.

Im nächsten Schritt werden diese Server-Logs von einem Programm namens Logstash aufbereitet und in die Elasticserach-Datenbank importiert. Entscheidend ist dabei, dass für jeden Parameter, der beim Aufruf der API mitgeschickt wird, ein eigenes durchsuchbares Feld in der Datenbank angelegt wird. Dieser Schritt erlaubt später eine flexible Nutzung. Dazu reicht ein simpler Eintrag in der Logstash-Konfigurationsdatei

grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
kv {
    field_split => "&? "
}

Die Anweisung field_split => „&? „ sagt Logstash, dass jede Zeile aus der Logdatei an den Zeichen „&“, „?“ und bei Leerzeichen getrennt werden soll.

Sind die Daten in der Elasticsearch-Datenbank gespeichert, lassen sich diese komfortabel über das Kibana-Webinterface auswerten. Kibana bietet diverse grafische Werkzeuge, um innerhalb der Daten nach Informationen zu suchen und die gefundenen Informationen mit wenigen Mausklicks zu visualisieren.

Kibana - Visualisierung erstellen
Kibana - Informationen suchen
Kibana - Tortendiagramm

Fazit

Kibana - Auswertung in Liniendiagramm

Vorausgesetzt, dass die benötigten Daten in Logfiles abgespeichert werden, können mit den oben beschriebenen Techniken auch Stakeholder ohne Programmierkenntnisse die in einer Anwendung angefallenen Informationen auswerten. Kibana stellt dazu viele, relativ leicht zu erlernende Werkzeuge bereit.

Elasticsearch ist eine sehr gut dokumentierte und vor allem stabile Datenbank. Es gibt zahlreiche Werkzeuge um Nutzdaten in Echtzeit importieren und auswerten zu können. Mit Kibana bekommen auch Nicht-Techniker die Möglichkeit, diese Daten nach eigenem Ermessen für spätere Analysen grafisch aufzuarbeiten.

Die Einarbeitung in die neuen Werkzeuge lohnt sich auch aus kaufmännischen Gründen: Denn da man für das Anlegen neuer Auswertungen keine Techniker / Programmierer mehr benötigt, können sich diese nun um andere wichtigen Dinge kümmern.

Leave a reply