De la requête au graphique
Cette page décrit les étapes suivies par le système de graphiques de Datadog pour passer d’une requête à un graphique. Ainsi, vous comprendrez mieux comment choisir les paramètres de votre graphique.
Lorsque vous créez un graphique dans un timeboard ou un screenboard, vous pouvez utiliser l’éditeur ou l’onglet JSON pour configurer des requêtes avancées. L’exemple ci-dessous utilise la métrique system.disk.total issue d’un serveur spécifique (host:bubs).
Suivez ensuite chaque étape exécutée par le backend de Datadog afin d’exécuter la requête et de représenter une ligne de graphique sur votre dashboard.
Cet article relève l’effet de chaque paramètre de la requête à chaque étape.
Avant la requête, les données storage: sont stockées séparément en fonction des tags.
La métrique system.disk.total (recueillie par défaut par datadog-agent) est observée à partir de différentes sources.
En effet, cette métrique est renvoyée par différents hosts, et chaque Agent Datadog recueille cette métrique pour chaque appareil. Le tag device:tmpfs est ainsi ajouté à la métrique system.disk.total lors de l’envoi des données associées au disque avec le même nom, etc.
Ainsi, cette métrique peut être consultée avec différentes combinaisons de tags {host, device}.
Pour chaque source (définie par un host et un ensemble de tags), les données sont stockées séparément.
Dans cet exemple, considérez host:bubs comme ayant 5 appareils. Ainsi, Datadog stocke 5 séries temporelles (tous les points de données soumis au fil du temps pour une source) pour :
{host:bubs, device:tmpfs}{host:bubs, device:cgroup_root}{host:bubs, device:/dev/vda1}{host:bubs, device:overlay}{host:bubs, device:shm}
Considérez à présent les étapes successives suivies par le backend pour la requête présentée ci-dessus.
Trouver quelles séries temporelles sont requises pour la requête
Dans cette requête, vous avez uniquement demandé des données associées à host:bubs. La première étape pour le backend de Datadog consiste donc à analyser toutes les sources (dans ce cas, toutes les combinaisons {host, device} avec lesquelles la métrique system.disk.total est soumise) et à ne conserver que celles correspondant à la portée de la requête.
Comme vous l’avez sûrement deviné, le backend trouve cinq sources correspondantes (voir le paragraphe précédent).
Il faut alors agréger les données de ces sources afin d’obtenir une métrique représentant system.disk.total pour votre host. Cette opération est effectuée à l’étape 3.
Remarque : le système de tagging adopté par Datadog est à la fois simple et puissant. Vous n’avez pas besoin de connaître ou de spécifier les sources à combiner : il vous suffit de fournir un tag, par exemple un identifiant. Datadog combine alors uniquement toutes les données possédant cet identifiant. Vous n’avez donc pas besoin de savoir le nombre de hosts ou d’appareils dont vous disposez lorsque vous interrogez system.disk.total{*}. Datadog agrège pour vous les données de toutes les sources.
Cliquez ici pour obtenir plus d’informations sur les séries temporelles et la cardinalité des tags.
Paramètre impliqué : portée
Vous pouvez utiliser plusieurs tags, tels que {host:bubs, device:udev}, si vous souhaitez récupérer des données correspondant aux deux tags.
Effectuer l’agrégation temporelle
Le backend de Datadog sélectionne toutes les données correspondant à l’intervalle de votre graphique.
Toutefois, avant de combiner toutes les données des différentes sources (étape 3), Datadog doit effectuer une agrégation temporelle.
Pourquoi ?
Comme Datadog stocke les données avec une granularité de 1 seconde, il ne peut pas afficher toutes les données réelles sur les graphiques. Consultez la section Agrégation de métriques pour plus de détails.
Pour un graphique avec un intervalle d’une semaine, il faudrait envoyer des centaines de milliers de valeurs à votre navigateur. De plus, tous ces points ne pourraient pas être représentés sur un widget occupant une petite partie de votre écran. Ainsi, Datadog est contraint d’effectuer une agrégation des données et d’envoyer un nombre limité de points à votre navigateur afin d’afficher un graphique.
Quelle granularité ?
Par exemple, pour une vue du jour avec affichage des lignes, chaque point de données représente 5 minutes. Le backend de Datadog divise l’intervalle d’un jour en 288 compartiments de 5 minutes. Pour chaque compartiment, le backend cumule toutes les données en une seule valeur. Par exemple, le point de données représenté sur votre graphique avec le timestamp 07:00 est en fait un agrégat de tous les points de données réels envoyés entre 07:00:00 et 07:05:00 ce jour-là.
Par défaut, le backend de Datadog calcule l’agrégat de rollup en faisant la moyenne de toutes les valeurs réelles, ce qui a tendance à lisser les graphiques lorsque vous effectuez un zoom arrière. Consultez la section contenant plus d’informations sur la raison pour laquelle effectuer un zoom arrière sur une plage temporelle lisse également vos graphiques.
L’agrégation des données doit se produire que vous ayez 1 ou 1000 sources tant que vous consultez une grande fenêtre temporelle. Ce que vous voyez généralement sur un graphique n’est pas les valeurs réelles soumises mais des agrégats locaux.
Le backend de Datadog calcule une série d’agrégats locaux pour chaque source correspondant à la requête.
Toutefois, vous pouvez contrôler les paramètres de cette agrégation.
Paramètre impliqué : rollup (facultatif)
Comment utiliser la fonction rollup ?
Dans cet exemple, rollup(avg,60) définit une période d’agrégation de 60 secondes. Ainsi, l’intervalle de X minutes est découpé en Y intervalles de 1 minute chacune. Les données d’une minute donnée sont agrégées en un point unique qui s’affiche sur votre graphique (après l’étape 3, l’agrégation spatiale).
Remarque : le backend de Datadog essaie de maintenir le nombre d’intervalles en dessous d’une valeur proche de 300. Si vous utilisez la fonction rollup(60) sur une période de deux mois, vous n’obtiendrez pas la granularité d’une minute demandée.
Effectuer l’agrégation spatiale
Ensuite, vous pouvez mélanger des données provenant de différentes sources en une seule ligne.
Vous disposez de ~300 points pour chaque source. Chacun d’eux représente une minute.
Dans cet exemple, Datadog calcule la moyenne de toutes les sources pour chaque minute, ce qui donne le graphique suivant :
La valeur obtenue (25,74 Go) représente la moyenne des valeurs renvoyées par toutes les sources (voir l’image ci-dessus).
Remarque : s’il n’y a qu’une seule source (par exemple, si vous avez choisi la portée {host:bubs, device:/dev/disk} pour la requête), l’utilisation de sum, avg, max, min n’a aucun effet car aucune agrégation spatiale ne doit être effectuée. Consultez la section FAQ sur le basculement entre les agrégateurs sum/min/max/avg.
Paramètre impliqué : space aggregator
Datadog propose 4 agrégateurs spatiaux :
Appliquer des fonctions (facultatif)
Des fonctions peuvent être appliquées aux opérations arithmétiques dans la case Formula lors de la représentation graphique des données. La plupart des fonctions sont appliquées lors de la dernière étape. À partir des ~300 points obtenus après les agrégations temporelles (étape 2) et spatiales (étape 3), la fonction calcule de nouvelles valeurs qui peuvent être représentées sur votre graphique.
Dans cet exemple, la fonction abs veille à ce que vos résultats correspondent à des nombres positifs.
Paramètre impliqué : function
Choisissez votre type de fonctions
Requêtes groupées, opérations arithmétiques et as_count/rate
Requêtes groupées
La logique reste la même :
- Le backend de Datadog trouve tous les appareils associés à la source sélectionnée.
- Pour chaque appareil, le backend effectue la requête
system.disk.total{host:example, device:<DEVICE>}, comme expliqué dans cet article. - Tous les résultats finaux sont représentés sur le même graphique.
Remarque : les modificateurs rollup ou as_count doivent être placés après la mention « by {device} ».
Autre remarque : vous pouvez utiliser plusieurs tags, par exemple : system.disk.in_use{*} by {host,device}.
Arithmétique
Les opérations arithmétiques sont également appliquées après l’agrégation temporelle et spatiale (étape 4 : Appliquer des fonctions).
Count et rate
as_count et as_rate sont des agrégateurs temporels spécifiques aux rates et counters envoyés avec StatsD ou DogStatsD. Ils permettent d’afficher les métriques sous forme de taux par seconde ou de les visualiser sous forme de nombres bruts. Syntaxe : au lieu d’ajouter un cumul, vous pouvez utiliser .as_count() ou .as_rate().
Pour en savoir plus, consultez l’article Visualisation des métriques StatsD avec la représentation graphique de counts (en anglais) et la documentation relative à StatsD et à DogStatsD.