Die Befehle stats, chart und timechart solltet ihr unbedingt kennen (vor allem stats). Als ich mich zum ersten Mal mit den Suchbefehlen von Splunk befasst habe, fand ich es zunächst schwierig, die Vorteile der einzelnen Befehle zu verstehen – insbesondere die Auswirkungen der BY-Klausel auf das Suchergebnis. Erst durch eine Gegenüberstellung der Ergebnisse (nach einigen Versuchen und ziemlich vielen Irrtümern) habe ich die Unterschiede zwischen den Befehlen wirklich begriffen.
Diese drei Befehle sind Transformationsbefehle. Ein Transformationsbefehl konvertiert eure Event-Daten in eine organisierte Ergebnistabelle. Ihr könnt diese drei Befehle verwenden, um Statistiken wie „count“, „sum“ und „average“ zu berechnen.
Hinweis: Das Schlüsselwort BY wird in diesen Beispielen und in der Splunk-Dokumentation aufgrund der besseren Lesbarkeit in Großbuchstaben angegeben. Bei euren Suchen könnt ihr das Schlüsselwort BY in Groß- oder Kleinbuchstaben angeben.
Beginnen wir mit dem Befehl stats. Wir zählen die Anzahl der Events für die einzelnen HTTP-Statuscodes.
... | stats count BY status
In einer Tabelle unter der Statistics-Registerkarte wird die Anzahl der Events für jeden eindeutigen Statuscode in einer separaten Zeile angeführt:
Status | Count |
---|---|
200 | 34282 |
400 | 701 |
403 | 228 |
404 | 690 |
Im Grunde werden die Feldwerte (200, 400, 403, 404) zu Zeilenbezeichnungen in der Ergebnistabelle.
Beim Befehl stats werden die Ergebnisse basierend auf Feldern gruppiert, die ihr in der BY-Klausel angebt. Angenommen, wir erhalten Events von drei verschiedenen Hosts: www1, www2 und www3. Wenn wir nun das Host-Feld zu unserer BY-Klausel hinzufügen, werden die Ergebnisse in eindeutigere Gruppen unterteilt.
... | stats count BY status, host
In der Ergebnistabelle wird nun jede eindeutige Kombination aus Status und Host in einer separaten Zeile angeführt.
status | host | count |
---|---|---|
200 | www1 | 11835 |
200 | www2 | 11186 |
200 | www3 | 11261 |
400 | www1 | 233 |
400 | www2 | 257 |
400 | www3 | 211 |
403 | www2 | 228 |
404 | www1 | 244 |
404 | www2 | 209 |
404 | www3 | 237 |
Jedes Feld, das ihr in der BY-Klausel angebt, wird zu einer separaten Spalte der Ergebnistabelle. Die Zeilen werden zuerst nach Status, dann nach Host geteilt. Die Felder, die ihr in der BY-Klausel des Befehls stats angebt, werden als -Felder (Zeilenteilungsfelder) bezeichnet.In diesem Beispiel seht ihr fünf Aktionen, die Kunden auf unserer Website ausführen können, nämlich addtocart, changequantity, purchase, remove und view.
Fügen wir der Suche das Feld „action“ hinzu.
... | stats count BY status, host, action
Ihr teilt die Zeilen zuerst nach „status“, dann nach „host„ und dann nach „action“. Unten seht ihr einen Auszug aus der Ergebnistabelle, die erstellt wird, wenn wir der BY-Klausel das Feld action hinzufügen:
status | host | action | count |
---|---|---|---|
200 | www1 | addtocart | 1837 |
200 | www1 | changequantity | 428 |
200 | www1 | purchase | 1860 |
200 | www1 | remove | 432 |
200 | www1 | view | 1523 |
200 | www2 | addtocart | 1743 |
200 | www2 | changequantity | 365 |
200 | www2 | purchase | 1742 |
Ein großer Vorteil des Befehls stats ist, dass ihr in der BY-Klausel mehr als zwei Felder angeben und Ergebnistabellen erstellen könnt, die sehr detaillierte statistische Berechnungen beinhalten.
Jetzt wenden wir dieselbe grundlegende Suche an und vergleichen die vom Befehl chart generierten Ergebnisse mit den vom Befehl stats generierten Ergebnissen.
Wenn ihr nur ein BY-Feld angebt, sind die von den Befehlen stats und chart ausgegebenen Ergebnisse identisch. Wenn ihr den Befehl chart in einer Suche mit zwei BY-Feldern anwendet, seht ihr allerdings große Unterschiede.
Zur Erinnerung: Beim Ausführen des Befehls stats mit zwei BY-Feldern sahen die Ergebnisse so aus:
status | host | count |
---|---|---|
200 | www1 | 11835 |
200 | www2 | 11186 |
200 | www3 | 11261 |
400 | www1 | 233 |
400 | www2 | 257 |
400 | www3 | 211 |
403 | www2 | 228 |
404 | www1 | 244 |
404 | www2 | 209 |
404 | www3 | 237 |
Jetzt ersetzen wir in der Suche den Befehl stats durch den Befehl chart.
... | chart count BY status, host
Die Suche ergibt folgende Ergebnisse:
status | www1 | www2 | www3 |
---|---|---|---|
200 | 11835 | 11186 | 11261 |
400 | 233 | 257 | 211 |
403 | 0 | 288 | 0 |
404 | 244 | 209 | 237 |
Der Befehl chart verwendet das erste BY-Feld, status, um die Ergebnisse zu gruppieren. Für jeden einzelnen Wert im Feld status werden die Ergebnisse in einer separaten Zeile angezeigt. Dieses erste BY-Feld wird als -Feld bezeichnet. Der Befehl chart verwendet das zweite BY-Feld, host, um die Ergebnisse auf unterschiedliche Spalten aufzuteilen. Dieses zweite BY-Feld wird daher als Spaltenteilungsfeld (column-split-field) bezeichnet. Die Werte des Feldes host werden zu Spaltenbezeichnungen.
Interessant ist ein Blick auf die Ergebnisse für den Statuscode 403 in beiden Ergebnistabellen. Mit dem Befehl stats werden für den Statuscode 403 und die Hosts www1 und www3 keine Ergebnisse ausgegeben. Mit dem Befehl chart wird eine 0 zurückgegeben, wenn für das -Feld keine Events vorhanden sind, die den Wert für das -Feld enthalten.
Ein wichtiger Unterschied zwischen den Befehlen stats und chart besteht in der Anzahl der Felder, die in der BY-Klausel angegeben werden können.
Beim Befehl stats könnt ihr in der BY-Klausel eine Liste von Feldern angeben, bei denen es sich durchweg um -Felder handelt. Die Syntax für die BY-Klausel des Befehls stats sieht folgendermaßen aus:
BY <field-list>
Beim Befehl chart könnt ihr maximal zwei Felder angeben, nämlich ein <row-split>-Feld und ein <column-split>-Feld.
Der Befehl chart bietet zwei Alternativen zur Angabe dieser Felder in der BY-Klausel. Hier ein Beispiel:
... | chart count BY status, host
... | chart count OVER status BY host
Die Syntax für die BY-Klausel des Befehls chart sieht folgendermaßen aus:
[ BY <row-split> <column-split> ] | [ OVER <row-split> ] [BY <column-split>] ]
Der Vorteil des Befehls chart liegt darin, dass er eine konsolidierte Ergebnistabelle erstellt, die sich besser für die Erstellung von Diagrammen eignet. Ich zeige euch gleich, was ich damit meine.
Wenn ihr die Befehle stats und chart ausführt, werden die Event-Daten in Ergebnistabellen konvertiert, die unter der Statistik-Registerkarte angezeigt werden. Um die Ergebnisse in einem Diagramm darzustellen, klickt ihr einfach auf die Visualisierungs-Registerkarte. Hier seht ihr die Visualisierung der Ergebnistabelle des Befehls stats.
Das Feld Status bildet die X-Achse, und die Felder host und count bilden die Datenreihe. Der Zählwertebereich bildet die Y-Achse.
Dieses Diagramm ist in mehrfacher Hinsicht problematisch.
Aufgrund dieser Probleme wirkt das Diagramm eher verwirrend und übermittelt nicht die in der Ergebnistabelle enthaltenen Informationen.
Ihr könnt aus der Ergebnistabelle des Befehls stats zwar eine Visualisierung erstellen, diese ist jedoch nur sinnvoll und nützlich, wenn ihr in der BY-Klausel nur ein Feld angebt.
Wenn ihr eine Visualisierung von zwei Feldern in der BY-Klausel erstellen möchtet, empfiehlt sich die Verwendung des Befehls chart:
Das Feld status bildet die X-Achse und die host-Werte bilden die Datenreihe. Der Zählwertebereich bildet die Y-Achse.
Wenn ihr den Befehl timechart verwendet, wird die Ergebnistabelle immer nach dem Zeitstempel des Ereignisses (dem Feld _time) gruppiert. Der Zeitwert ist der für die Ergebnistabelle. In der BY-Klausel gebt ihr also nur ein Feld an, das column-split-Feld. Diese Suche erzeugt z.B. eine Anzahl und gibt das Feld „status“ als column-split-Feld an:
... | timechart count BY status
Diese Suche ergibt folgende Ergebnistabelle:
_time | 200 | 400 | 403 | 404 |
---|---|---|---|---|
2018-07-05 | 1038 | 27 | 7 | 19 |
2018-07-06 | 4981 | 111 | 35 | 98 |
2018-07-07 | 5123 | 99 | 45 | 105 |
2018-07-08 | 5016 | 112 | 22 | 105 |
2018-07-09 | 4732 | 86 | 34 | 84 |
2018-07-10 | 4791 | 102 | 23 | 107 |
2018-07-11 | 4783 | 85 | 39 | 98 |
2018-07-12 | 3818 | 79 | 23 | 74 |
Wenn ihr stattdessen nach dem Host-Feld sucht, wird folgende Tabelle ausgegeben:
_time |
www1 |
www2 |
www3 |
---|---|---|---|
2018-07-05 | 372 | 429 | 419 |
2018-07-06 | 2111 | 1837 | 1836 |
2018-07-07 | 1887 | 2046 | 1935 |
2018-07-08 | 1927 | 1869 | 2005 |
2018-07-09 | 1937 | 1654 | 1792 |
2018-07-10 | 1980 | 1832 | 1733 |
2018-07-11 | 1855 | 1847 | 1836 |
2018-07-12 | 1559 | 1398 | 1436 |
Die Zeitschritte, die ihr in der Spalte _time seht, basieren auf dem Suchzeitraum oder den Parametern, die ihr mit dem Befehl timechart angebt. In den vorherigen Beispielen wurde der Zeitraum auf All time (Alle Zeitpunkte) eingestellt und es liegen nur Daten für wenige Wochen vor. Da wir keine Zeitspanne angegeben haben, wird eine Standardzeitspanne verwendet. In diesem Fall ist die Standardzeitspanne 1 Tag.
Wenn ihr einen Zeitraum wie Letzte 24 Stunden angebt, beträgt die Standardzeitspanne 30 Minuten. Im Abschnitt Usage der timechart-Dokumentation werden die Standardzeitspannen für die gängigsten Zeiträume angegeben. In dieser Ergebnistabelle ist eine Standardzeitspanne von 30 Minuten zu sehen:
_time | www1 | www2 | www3 |
---|---|---|---|
2018-07-12 15:00:00 | 44 | 22 | 73 |
2018-07-12 15:30:00 | 34 | 53 | 31 |
2018-07-12 16:00:00 | 14 | 33 | 36 |
2018-07-12 16:30:00 | 46 | 21 | 54 |
2018-07-12 17:00:00 | 75 | 26 | 38 |
2018-07-12 17:30:00 | 38 | 51 | 14 |
2018-07-12 18:00:00 | 62 | 24 | 15 |
Der Befehl timechart verfügt über mehrere Optionen, die für die Befehle „stats“ und „chart“ nicht verfügbar sind. Beispielsweise könnt ihr eine Zeitspanne angeben, genau wie wir in dieser Suche:
... | timechart span=12h count BY host
_time | www1 | www2 | www3 |
---|---|---|---|
2018-07-04 17:00 | 801 | 783 | 819 |
2018-07-05 05:00 | 795 | 847 | 723 |
2018-07-05 17:00 | 1926 | 1661 | 1642 |
2018-07-06 05:00 | 1501 | 1774 | 1542 |
2018-07-06 17:00 | 2033 | 1909 | 1857 |
2018-07-07 05:00 | 1482 | 1671 | 1594 |
2018-07-07 17:00 | 2027 | 1818 | 2036 |
In diesem Beispiel basieren die 12-Stunden-Schritte in der Ergebnistabelle auf dem Zeitpunkt, an dem die Suche ausgeführt wird (Ortszeit) und auf der entsprechenden UNIX-Zeit (manchmal auch als Epochen-Zeit bezeichnet).
Hinweis: Der Befehl timechart bietet noch weitere Optionen, auf die wir in einem separaten Blog eingehen werden.
Wie werden die Ergebnisse nun in einem Diagramm dargestellt? Unter der Registerkarte Visualization seht ihr, dass _time die X-Achse bildet. Auf der Achse sind für jedes Datum die Mitternachts- und Mittagswerte angegeben. Die Säulen, mit denen die Daten dargestellt werden, beginnen jedoch jeden Tag um 17:00 Uhr und enden um 05:00 Uhr des folgenden Tages.
Das in der BY-Klausel angegebene Feld bildet die Datenreihe. Der Zählwertebereich bildet die Y-Achse.
Die Befehle stats, chart und timechart weisen einige Ähnlichkeiten auf, allerdings müsst ihr darauf achten, welche BY-Klauseln ihr mit welchem Befehl verwendet.
SPL it like you mean it – Laura
Weitere Blogs:
Splunk Dokumentation:
*Dieser Artikel wurde aus dem Englischen übersetzt und editiert. Den Originalblogpost findet ihr hier: Search commands > stats, chart, and timechart.
Die Splunk-Plattform beseitigt die Hürden zwischen Daten und Handlungen, damit Observability-, IT- und Security-Teams in ihren Unternehmen für Sicherheit, Resilienz und Innovation sorgen können.
Splunk wurde 2003 gegründet und ist ein globales Unternehmen – mit mehr als 7.500 Mitarbeitern, derzeit über 1.020 Patenten und einer Verfügbarkeit in 21 Regionen rund um den Globus. Mit seiner offenen, erweiterbaren Datenplattform, die die gemeinsame Nutzung von Daten in beliebigen Umgebungen unterstützt, bietet Splunk allen Teams im Unternehmen für jede Interaktion und jeden Geschäftsprozess End-to-End-Transparenz mit Kontext. Bauen auch Sie eine starke Datenbasis auf – mit Splunk.