Prometheus/grafana premiers pas

Dans un premier temps on est un peu effrayé par la complexité et le nombre des métriques disponibles, et, en plus une métrique en cache plusieurs ... par exemple la métrique "node_disk_io_now" "cache" des valeurs pour chaque disque, ci dessous la liste obtenue pour une machine de mon réseau/

node_disk_io_now{device="sda",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="sdb",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="sdc",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="sdd",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="sde",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="sr0",instance="192.168.2.8:9100",job="k2000"}	
......

.La machine ayant plusieurs grappes "Raid" elles apparaissent aussi dans la liste :

node_disk_io_now{device="md0",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="md1",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="md2",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="md4",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="md5",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="md6",instance="192.168.2.8:9100",job="k2000"}	
node_disk_io_now{device="md6p1",instance="192.168.2.8:9100",job="k2000"}
node_disk_io_now{device="md7",instance="192.168.2.8:9100",job="k2000"}	
......

Une demande simple dans Grafana de "node_disk_io_now" ramènera un grand nombre de valeurs, et donc de courbes sur le graphe, heureusement "now" renvoie une valeur instantanée, donc pas besoin de fonction pour obtenir une bonne vision de l'activité au cours du temps.

Les données présentées ci-dessus sont limitées à une instance particulière, ici "k2000". Il est bien sûr possible de "filtrer" les données sur une "instance", un "job" et ici un "device". Il est aussi possible d'utiliser la fonction "sum" pour n'obtenir qu'une seule courbe, intéressant par exemple pour le consommation CPU d'une machine multiprocesseurs.

Par ailleurs beaucoup de séries sont en fait des compteurs qui s'incrémentent au fil du temps, la représentation graphique est donc moins "parlante" et se manifeste par une courbe qui "monte" indéfiniment, heureusement les fonctions "rate" (ou "irate") et "delta" (ou "idelta") permettent de mieux représenter la variation des valeurs dans le temps . Les deux fonctions commençant par "i" ne traitent que les deux dernières valeurs de l'intervalle de temps spécifié, les deux autres donnent la différence entre la première et la dernière valeur de l'intervalle de temps spécifié.. Leur forme générique est :

fonction(valeur[intervalle de temps])

Il est possible d'imbriquer les fonctions et d'utiliser une fonction "sum(delta(....))". 
Une documentation générale sur les fonctions est accessible ICI.

Avant de pouvoir présenter un graphe sur Grafana il faut donc bien réfléchir pour trouver :

  • La mesure à utiliser
  • Les filtres à appliquer
  • La/les fonctions à appliquer aux données pour obtenir un affichage "utile"

L'interface de Grafana (9.5.2 maintenant) est devenu nettement plus complexe que les versions 7 que j'utilisais auparavant pour permettre d'utiliser au mieux les données de Prometheus.  
La création d'un dashboard utile est une oeuvre de longue haleine qui nécessite un temps d'apprentissage assez important ne serait-ce que pour trouver la bonne formulation pour obtenir l'information souhaitée ... Nous verrons dans un autre article quelques exemples.