TIPS & TRICKS

Suchbefehle > „stats“, „chart“ und „timechart“

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.

Die Ergebnistabelle des Befehls „stats“

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.

Die Ergebnistabelle des Befehls „chart“

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.

Visualisierungen mit den Befehlen „stats“ und „chart“

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.

  1. Es gibt mehrere Werte für denselben Statuscode auf der X-Achse. 
  2. Die Host-Werte (www1, www2 und www3) sind Zeichenkettenwerte und können in dem Diagramm nicht dargestellt werden. Es gibt zwar einen Legendeneintrag host, aber keine korrespondierenden blauen Säulen im Diagramm.

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.

Und der Befehl „timechart“?

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.

Zusammenfassung

Die Befehle stats, chart und timechart weisen einige Ähnlichkeiten auf, allerdings müsst ihr darauf achten, welche BY-Klauseln ihr mit welchem Befehl verwendet.

  • Der Befehl „stats“ empfiehlt sich, wenn ihr Ergebnistabellen erstellen möchtet, die detaillierte statistische Berechnungen zeigen.
  • Der Befehl „stats“ empfiehlt sich, wenn ihr in der BY-Klausel drei oder mehr Felder angeben möchtet.
  • Der Befehl „chart“ empfiehlt sich, wenn ihr Ergebnistabellen erstellen möchtet, die konsolidierte und zusammengefasste Berechnungen zeigen.
  • Der Befehl „chart“ empfiehlt sich, um Visualisierungen der Ergebnistabellendaten zu erstellen.
  • Der Befehl „timechart“ empfiehlt sich, um zeitlich basierte Ergebnistabellen und Diagramme zu erstellen.

SPL it like you mean it – Laura


Referenzen

Weitere Blogs:

Splunk Dokumentation:

 

*Dieser Artikel wurde aus dem Englischen übersetzt und editiert. Den Originalblogpost findet ihr hier: Search commands > stats, chart, and timechart.

Splunk
Posted by

Splunk