Autor: Martin Eisenhammer, auticon IT-Consultant
Einleitung
Splunk ist ein Tool, mit dem man Daten durchsuchen, analysieren und visualisieren kann. Splunk wird in der IT-Sicherheit und vielen anderen daten-intensiveren Bereichen genutzt.[FS1]
Anwendungsbeispiel mit Splunk
Als Beispiel für die Anwendung von Splunk habe ich Daten verwendet, die von meiner Apple Watch kommen (z.B. Daten über meine Schritte oder verbrannten Kalorien am Tag). Solche Daten können über die Health-App auf dem Smartphone exportiert werden. Diese befinden sich dann auf dem persönlichen Speicher in der iCloud. Über seinem persönlichen iCloud-Login kann man sich die Daten von der iCloud auf seinem PC herunterladen. Die Daten liegen dann als XML-Format vor. Ein Onlinetool wurde verwendet, um die XML-Datei in CSV-Dateien umzuwandeln.
Einlesen der Daten in Splunk
Die Daten können über das Menü „Einstellungen -> Daten hinzufügen“ in Splunk hochgeladen werden. Dort gibt es die Optionen „Hochladen“, „Überwachung“ und „Forwarder“. Ich habe die Daten mit der Option „Überwachung“ (diese Option überwacht Verzeichnisse/Dateien) eingelesen, da es nach dem Einlesen mit der Option „Hochladen“ zu speziellen Fehlermeldungen gekommen ist. Für das Hochladen müssen index, host und sourcetype angegeben werden.
Splunk erkennt und extrahiert Zeitstempel aus den Daten. Jede Zeile wird zu einem sogenannten „Event“, das mehrere Felder enthalten kann. Wenn kein passender Zeitstempel gefunden wird, verwendet Splunk den aktuellen Zeitpunkt des Einlesens.
Suchen mit der Search Processing Language (SPL)
In Splunk wird die Search Processing Language zum Suchen von Daten verwendet. Es stehen verschiedene Befehle zum Suchen und Modifizieren der Suchergebnisse zur Verfügung.
Ein einfaches Beispiel (wird hier Suchzeichenfolge genannt):
source=”/home/martin/Dokumente/MyAppleWatchData.zip:./MyAppleWatchData/HKQuantityTypeIdentifierActiveEnergyBurned.csv” host=”watch” index=”main” sourcename=”Apple Watch”
In diesem Beispiel wird nach Events gesucht, die aus CSV-Datei HKQuantityTypeIdentifierActiveEnergyBurned.csv der ZIP-Datei MyAppleWatchData.zip kommen und wo der host «watch», der index «main» und der sourcename «Apple Watch» lautet.
Splunk findet in diesem Fall eine sehr große Menge von Suchergebnissen in Form von Events. In den Suchresultaten werden die Uhrzeit und das Event dargestellt, wobei in diesem Fall der Zeitpunkt des Einlesens als Uhrzeit verwendet wird.

Abbildung: Suchergebnisse in Form von Events
Um spezielle Befehle bei der Suche anzuwenden (um zum Beispiel statistische Daten auszugeben) muss vor einem Befehl ein «|» Zeichen stehen.
Beispiel: | stats count(value)
Hier wird der stats Befehl verwendet, um mittels Funktionen statistische Daten zu berechnen und es wird mit count(value) die Anzahl der Werte (doppelte Werte werden hier mitgezählt) berechnet, die das Feld value hat. Das Ergebnis wird in tabellarischer Form angezeigt. Der Spaltenname ist dabei count(value). Dieser kann umbenannt werden, indem im stats Befehl hinter count(value) as und dann den neuen Namen der Spalte geschrieben wird.

Abbildung: Beispiel für eine Suche mit dem stats Befehl
Es können beliebig viele Befehle nach einer Suchzeichenfolge (getrennt von |) geschrieben werden.
Rechts neben dem Feld zum Eingeben der Suche gibt es eine Auswahlbox zum Auswählen des Zeitbereichs der Suchergebnisse. Mit dieser kann aus verschiedenen Zeitbereichen gewählt werden (z.B. letzte Woche, letztes Jahr oder «gesamte Zeit»). Als Standard ist «letzte 24 Stunden» ausgewählt (es werden Events der letzten 24 Stunden angezeigt). Als Zeitbereich habe ich oft «gesamte Zeit» verwendet.
Eventtypes
Mit Eventtypes können Events kategorisiert werden. Diese gehören zu den sogenannten Knowledge Objekten. Für die Apple Watch Daten nutze ich Eventtypes um die Daten zu kategorisieren (Schritte, gelaufene Distanz, Kalorien, Trainingsminuten etc.). Um einen Eventtype zu erstellen, muss eine Suche erstellt (nur die Suchzeichenfolge ohne weitere Befehle) und diese als Eventtyp gespeichert werden (durch Klicken auf «Speichern als» und «Eventtyp»). Im darauffolgenden Dialog muss einen Namen für den Eventtype angegeben und optional eine Farbe gewählt werden. Hier ist die Option «ohne» voreingestellt. Die Farbe dient zum besseren Auffinden solcher Events in den Suchergebnissen (diese sind dort mit einem vertikalen Strich in der Farbe angegeben). Außerdem muss eine Priorität zwischen 1 (höchste Priorität) und 10 (niedrigste Priorität) gewählt werden, wobei standardmäßig 1 voreingestellt ist. Wenn nach einem bestimmten Eventtype gesucht werden soll, dann muss eventtype= gefolgt von dem Namen als Suchzeichenfolge eingegeben werden.
Vorhandene Eventtypen können unter «Einstellungen» -> «Eventtypen» aufgerufen und bearbeitet werden.

Abbildung: eventtypes in den Suchergebnissen
Ein komplexeres Suchbeispiel
Ein Feature der Apple Watch sind die 3 Ringe, die man täglich schliessen muss (Bewegen, Trainieren, Stehen). Mit Splunk kann herausgefunden werden, wie oft man einen bestimmten Ring (z.B. der Bewegungsring) in der gesamten Zeit geschlossen hat.
Die Suche dafür sieht so aus:
eventtype=activeEnergyBurned
| chart sum(value) as kcal over _time span=1d
| eval target = 340
| eval ringClosed = if(kcal >= target, “yes”, “no”)
| chart count over ringClosed
| sort -count
Mit Splunk kann man zählen, wie oft der Bewegungsring geschlossen wurde:
- Zuerst wählt man den Eventtype „activeEnergyBurned“ für verbrannte Kilokalorien
- Dann summiert „chart“ die täglichen Kalorien mit „span=1d“ für tägliche Daten
- „eval target=340“ setzt das tägliche Kalorienziel
- Ein weiteres „eval“ prüft mit einer if-Funktion ob das Ziel erreicht wurde
- Der nächste „chart“ Befehl zählt, wie oft der Ring geschlossen wurde
- Schliesslich sortiert „sort -count“ die Ergebnisse absteigend
Ein weiteres Beispiel
Mit einem weiteren Beispiel möchte ich weitere Befehle der Search Processing Language von Splunk zeigen.
In diesem Beispiel soll herausgefunden werden, wann meine Apple Watch an einem Tag zum ersten Mal registriert hat, dass ich gestanden bin und wie viele Stehstunden ich am Tag insgesamt erreicht habe.
Die Suchanfrage sieht wie folgt aus:
eventtype=standHour standValue=HKCategoryValueAppleStandHourStood
| eval _time = strptime(startdate, “%Y-%m-%d %H:%M:%S”)
| bucket _time span=1d as day
| stats earliest(_time) as firstStandHourRegistered, count(standValue) as standHoursOfDay by day
| eval firstStandHourRegistered = strftime(firstStandHourRegistered, “%H:%M:%S”)
| eval formattedDay = strftime(day, “%Y-%m-%d”)
| table formattedDay, firstStandHourRegistered, standHoursOfDay
- Eventtype „standHour“ und standValue „HKCategoryValueAppleStandHourStood” werden gewählt
- _time Feld wird mit strptime ins richtige Format umgewandelt
- «bucket _time» teilt die Zeit in Tagen mit «span=1d» ein
- Mit «earliest(_time)» wird der erste Zeitpunkt des Tages gesucht, an dem gestanden wurde und es wird gezählt, wie oft am Tag gestanden wurde
- Der gefundene Zeitpunkt und der Tag werden mit «strftime» in ein lesbares Format umgewandelt
- Diese werden zusammen mit der Anzahl der Stehstunden mit «table» in einer Tabelle ausgegeben
Field Extraction
Mit dem Feature «Field Extractor Utility” können aus Eventdaten weitere Felder extrahiert werden, die in Suchen wiederverwendet werden können. Auf das «Field Extractor Utility» kann auf 3 Arten zugegriffen werden:
- «Neu hinzufügen» unter «Feldextraktionen» im Menü «Einstellungen» -> «Felder»
- «Neue Felder extrahieren» am Ende der Liste mit den Feldern
- Menü «Ereignisaktionen»-> «Felder extrahieren» in der Detailansicht eines Events
Es können auf 2 Arten neue Felder extrahiert werden: mittels Regulären Ausdrücken (Regular Expressions) oder mit «Delimiter» (wenn in Events Informationen durch ein Komma, Leerzeichen etc. getrennt sind und daraus ein oder mehrere Felder extrahiert werden sollen).
Berichte und Visualisierungen
Eine Suche kann als Bericht gespeichert werden zur Wiederverwendung (Menü «Speichern als» à Bericht).
Weiterhin können Suchergebnisse grafisch dargestellt werden (zum Beispiel mit einem Balkendiagramm oder Liniendiagramm). Diese können dann zu einem Dashboard zusammengestellt werden.

Abbildung: Dashboard
Weitere Features
Splunk bietet noch viele weitere Features wie weitere Befehle der Search Processing Language (z.B. für statistische Analysen, Transaktionen oder Hinzufügen von Zeilen für statistische Berechnungen), Suchmakros (zur Wiederverwendung von Teilen von Suchanfragen), Subsearches, Benachrichtigungen (Berichte können als Benachrichtigung eingerichtet werden um bei einer bestimmten Bedingung oder zu einem bestimmten Zeitpunkt eine Aktion wie z.B. das Versenden einer E-Mail auszuführen) oder Knowledge Objects (z.B. Lookups oder Datenmodelle).