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 Befehlstats. 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 separatenZeileangefü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 Befehlsstatsangebt, werden als
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 Befehlsstatsist, 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 Befehlchartgenerierten Ergebnisse mit den vom Befehlstatsgenerierten Ergebnissen.
Wenn ihr nur ein BY-Feld angebt, sind die von den Befehlenstatsundchartausgegebenen Ergebnisse identisch. Wenn ihr den Befehlchartin 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 Befehlstatsdurch den Befehlchart.
... | 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 Befehlstatswerden für den Statuscode 403 und die Hosts www1 und www3 keine Ergebnisse ausgegeben. Mit dem Befehlchartwird eine 0 zurückgegeben, wenn für das
Ein wichtiger Unterschied zwischen den Befehlenstatsundchartbesteht in der Anzahl der Felder, die in der BY-Klausel angegeben werden können.
Beim Befehlstatskönnt ihr in der BY-Klausel eine Liste von Feldern angeben, bei denen es sich durchweg um
BY <field-list>
Beim Befehlchartkö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 Befehlschartsieht folgendermaßen aus:
[ BY <row-split> <column-split> ] | [ OVER <row-split> ] [BY <column-split>] ]
Der Vorteil des Befehlschartliegt 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.
- Es gibt mehrere Werte für denselben Statuscode auf der X-Achse.
- 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.
Ihrkönntaus der Ergebnistabelle des Befehlsstatszwar 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 Befehlschart:
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 wieLetzte 24 Stunden angebt, beträgt die Standardzeitspanne 30 Minuten. Im AbschnittUsageder 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 Befehltimechartverfü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 Befehltimechartbietet 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:
- Search Command> stats, eventstats and streamstats
Splunk Dokumentation:
- Befehl „stats“:https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Stats
- Befehl „chart“:https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Chart
- Befehl „timechart“:https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Timechart
*Dieser Artikel wurde aus dem Englischen übersetzt und editiert. Den Originalblogpost findet ihr hier:Search commands > stats, chart, and timechart.