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

Tips & Tricks Splunk

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.

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.

Erfahren Sie mehr

Best Practices für euer Splunk Software-Upgrade
Tipps & Tricks
4 Minuten Lesedauer

Best Practices für euer Splunk Software-Upgrade

Stellt den Erfolg eures Splunk Enterprise Upgrades sicher – mit diesen Best Practices
So lest ihr eure Microsoft Azure-Daten in Splunk ein
Tipps & Tricks
7 Minuten Lesedauer

So lest ihr eure Microsoft Azure-Daten in Splunk ein

Eine Übersicht darüber, wie Microsoft Azure-Daten von Microsoft verfügbar gemacht werden, wie ihr auf diese Daten zugreifen könnt und welche Out-of-the-Box Splunk Add-Ons diese Daten nutzen können.
Smooth Operator | Suche nach mehreren Feldwerten
Tipps & Tricks
5 Minuten Lesedauer

Smooth Operator | Suche nach mehreren Feldwerten

Mit dem IN-Operator könnt ihr das Feld und eine Werteliste angeben.