Commandes de recherche > stats, chart et timechart

Tips & Tricks Splunk

Les commandes stats, chart et timechart sont des commandes extrêmement utiles (surtout stats). Lorsque j'ai commencé à apprendre à utiliser les commandes de recherche Splunk, j'ai eu du mal à comprendre les différents avantages de chaque commande, et notamment la façon dont la clause BY affecte le résultat d'une recherche. Finalement, c’est en comparant les résultats (avec quelques essais et beaucoup d’erreurs) que j'ai compris ce qui différencie les commandes.

Ces trois commandes sont des commandes de transformation. Une commande de transformation prend les données d'événement et les convertit en tableau de résultats organisé. Vous pouvez utiliser ces trois commandes pour calculer des statistiques : décompte, somme ou moyenne par exemple.

Remarque : dans les exemples qui suivent et dans la documentation Splunk, le mot-clé BY est affiché en majuscules pour plus de lisibilité. Vous pouvez le taper aussi bien en minuscules qu’en majuscules dans vos recherches.

Tableau de résultats de la commande stats

Commençons par la commande stats. Nous allons compter le nombre d’événements de chaque code de statut HTTP.

... | stats count BY status

Le nombre d'événements pour chaque code de statut unique est indiqué dans une nouvelle ligne d'un tableau, dans l’onglet Statistiques :

status
count
200
34282
400
701
403
228
404
690

Très simplement, les valeurs des champs (200, 400, 403, 404) deviennent des en-têtes de lignes dans le tableau de résultats.

Pour la commande stats, les champs que vous spécifiez dans la clause BY servent à grouper les résultats. Par exemple, nous recevons des événements de trois hôtes : www1, www2 et www3. Si nous ajoutons le champ host à notre clause BY, les résultats sont répartis en des groupes distincts.

... | stats count BY status, host

Chaque combinaison unique de statut et d’hôte s'affiche sur une nouvelle ligne du tableau de résultats.

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

Chaque champ spécifié dans la clause BY devient une nouvelle colonne dans le tableau de résultats. Vous divisez les lignes par statut d'abord, puis par hôte. Les champs que vous spécifiez dans la clause BY de la commande stats sont appelés champs .

Dans cet exemple, les clients peuvent réaliser cinq actions sur notre site web : addtocart, changequantity, purchase, remove et view.

Ajoutons les actions à la recherche.

... | stats count BY status, host, action

Vous divisez les lignes par statut d'abord, puis par hôte et enfin par action. Ci-dessous se trouve une partie du tableau de résultats généré lorsque nous ajoutons le champ action à la clause BY :

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

L’un des grands avantages de la commande stats est que vous pouvez spécifier plus de deux champs dans la clause BY et créer des tableaux de résultats qui présentent des calculs statistiques très granulaires.

Tableau de résultats de la commande chart

En reprenant la même recherche de base, comparons les résultats produits par la commande chart à ceux de la commande stats.

Si vous ne spécifiez qu’un seule champ BY, les résultats des commandes stats et chart sont identiques. C’est lorsque vous utilisez la commande chart avec deux champs BY que vous voyez vraiment la différence.

Souvenez-vous que les résultats renvoyés par la commande stats avec deux champs BY sont :

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

Remplaçons maintenant la commande stats par la commande chart dans la recherche.

... | chart count BY status, host

La recherche renvoie les résultats suivants :

status
www1
www2
www3
200
11835
11186
11261
400
233
257
211
403
0
288
0
404
244
209
237

La commande chart utilise le premier champ de la clause BY, status pour grouper les résultats. Pour chaque valeur unique du champ status, les résultats apparaissent sur une nouvelle ligne. Ce premier champ BY est appelé champ . La commande chart utilise le second champ de la clause BY, host pour diviser les résultats en colonnes. Ce second champ BY est appelé champ . Les valeurs du champ host deviennent des titres de colonne.

Observez les résultats du code d'état 403 dans les deux tableaux de résultats. Avec la commande stats, il n’y a aucun résultat pour le code de statut 403 et les hôtes www1 et www3. Avec la commande chart, lorsqu’il n’y a pas d'événement pour le champ contenant la valeur du champ , un 0 est renvoyé.

Une différence essentielle entre les commandes stats et chart est le nombre de champs que vous pouvez spécifier dans la clause BY.

Avec la commande stats, vous pouvez, dans la clause BY, spécifier une liste de champs qui seront tous des champs . La syntaxe de la clause BY de la commande stats est :

BY

Pour la commande chart, vous pouvez spécifier deux champs au maximum. Un champ et un champ .

La commande chart offre deux manières de préciser ces champs dans la clause BY. Par exemple :

... | chart count BY status, host

... | chart count OVER status BY host

La syntaxe de la clause BY de la commande chart est :

[ BY ] | [ OVER ] [BY ] ]

L’avantage de la commande chart est qu’elle crée un tableau de résultats consolidé plus pratique pour créer des graphiques. Vous allez voir ce que j’entends par là.

Visualisation des commandes stats et chart

Lorsque vous exécutez les commandes stats et chart, les données d'événement sont transformées en tableaux de résultats qui apparaissent sur l’onglet Statistiques. Cliquez sur l’onglet Visualisation pour générer un graphique à partir des résultats. Voici la visualisation du tableau de résultats de la commande stats :

Le champ status constitue l’axe des abscisses et les champs host et count forment la série de données. La plage des valeurs de décompte (count) forme l’axe des ordonnées.

Ce graphique pose plusieurs problèmes :

  1. On a plusieurs valeurs pour le même code de statut sur l’axe des abscisses.
  2. Les valeurs host (www1, www2 et www3) sont des valeurs de type chaîne et ne peuvent être mesurées sur le graphique. Le host apparaît dans la légende mais il n’y a pas de colonne bleue sur le graphique.

Pour toutes ces raisons, le graphique est confus et il ne transmet par les informations contenues dans le tableau de résultats.

Si vous pouvez créer une visualisation utilisable à partir du tableau de résultats de la commande stats, la visualisation n’est utile que lorsque vous spécifiez un seul champ dans la clause BY.

Il vaut mieux utiliser la commande chart lorsque vous voulez créer une visualisation avec deux champs de clause BY :

Le champ status constitue l’axe des abscisses et les valeurs host forment la série de données. La plage des valeurs de décompte (count) forme l’axe des ordonnées.

Et la commande timechart ?

Lorsque vous utilisez la commande timechart, le tableau de résultats est toujours groupé en fonction de l’horodatage de l’événement (le champ _time). La valeur de temps joue le rôle de dans le tableau de résultats. Dans la clause BY, vous allez donc spécifier un seule champ, le champ . Par exemple, cette recherche génère un décompte et spécifie le champ status comme champ :

... | timechart count BY status

Cette recherche produit ce tableau de résultats :

_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

Si vous effectuez plutôt une recherche par champ host, vous obtenez le tableau de résultats suivant :

_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

Les incréments de temps que vous voyez dans la colonne _time dépendent de la plage temporelle de la recherche ou des arguments spécifiés dans la commande timechart. Dans les exemples précédents, la plage spécifiée était All time et il n’y avait que quelques semaines de données. Comme nous n’avions pas précisé de span, une fourchette par défaut était utilisée. Dans cette situation, la fourchette par défaut est de 1 jour.

Si vous précisez une période telle que Last 24 hours pour les 24 dernières heures, la fourchette par défaut est de 30 minutes. La section Utilisation de la documentation de la commande timechart indique les fourchettes par défaut des périodes les plus courantes. Ce tableau de résultats présente la fourchette par défaut de 30 minutes :

_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

La commande timechart inclut plusieurs options qui ne sont pas disponibles dans les commandes stats et chart. Par exemple, vous pouvez préciser une fourchette comme celle que nous avons dans cette recherche :

... | 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

Dans cet exemple, les incréments de 12 heures dans le tableau de résultats sont basés sur l’heure d’exécution de la recherche (heure locale) et son alignement sur l’heure UNIX (parfois appelée heure Epoch).

Remarque : vous pouvez préciser d'autres options avec la commande timechart, que nous allons explorer dans un article distinct.

Comment ces résultats s'affichent-ils sous forme graphique ? Sur l’onglet Visualisation, vous voyez que _time forme l’axe des abscisses. L’axe indique les valeurs minuit et midi pour chaque date. Toutefois, les colonnes qui représentent les données commencent à 1700 chaque jour et se terminent à 0500 le jour suivant.

Le champ précisé dans la clause BY forme la série de données. La plage des valeurs de décompte (count) forme l’axe des ordonnées.

En résumé

Les commandes stats, chart et timechart présentent des similarités, mais il faut faire attention aux clauses BY que vous utilisez avec elles.

Fais de SPL ta deuxième langue – Laura

Références

Autres articles :

Documentation Splunk :

*Cet article est une traduction de celui initialement publié sur le blog Splunk anglais.

Articles similaires

Monitorer ses entraînements sportifs grâce à Splunk
Trucs & Astuces
4 min de lecture

Monitorer ses entraînements sportifs grâce à Splunk

Je suis un grand fan de sport et, en bon splunker, cela fait des années que j’enregistre l’ensemble des données relatives à mon activité, sur Strava notamment. Le problème : parmi la multitude de solutions disponibles, aucune ne me permet d’analyser et de personnaliser l’ensemble de cette data, sous l’angle que je désire, et avec une interactivité sans limite. Voici la solution avec Splunk.
Splunk Connect for Syslog : une GDI clé en main et évolutive pour les données syslog – Partie 4
Trucs & Astuces
26 min de lecture

Splunk Connect for Syslog : une GDI clé en main et évolutive pour les données syslog – Partie 4

Dans le dernier article de cette série de blogs en quatre parties sur Splunk Connect for Syslog, nous allons aborder la configuration d’une toute nouvelle source de données, une source que SC4S ne prend pas en charge au départ.
Data Talks : Tout savoir sur l’observabilité
Trucs & Astuces
11 min de lecture

Data Talks : Tout savoir sur l’observabilité

Bienvenue dans l’épisode 7 de Data Talks, la série vidéo de Splunk dans laquelle des experts de la donnée décryptent pour nous les nouvelles tendances autour de la data. Nous retrouvons aujourd’hui un des spécialistes français de la donnée et de l’ITOps, Stéphane Estevez, alias M. Observabilité chez Splunk.