24 avril 2024

Tuto monitoring Prometheus, partie III : Grafana, l’interface Web

Troisième partie de la série de tutoriels consacrés au monitoring avec Prometheus et il sera question de mettre en place l’interface Web Grafana qui va nous permettre de mettre en place nos Dahsboards de Supervision, Monitoring, etc…

Dans mon cas, je mets Grafana sera sur une machine à part. Après, vous êtres libre de (vous) la coller ou vous voulez 😉

I – Installation

Sur la machine dédiée à Grafana, on revient à du classique apt-get :

# apt-get install apt-transport-https curl
# curl https://packages.grafana.com/gpg.key | apt-key add -
# echo 'deb https://packages.grafana.com/oss/deb stable main' > /etc/apt/sources.list.d/grafana.list
# apt-get update

Et on installe bêtement avec :

# apt-get install grafana

Comme recommandé, on exécute :

# systemctl daemon-reload
# systemctl enable grafana-server

II – Configuration

La configuration de Grafana se passe dans le fichier /etc/grafana/grafana.ini où l’on va modifier :

domain = sous.mondomaine.fr
root_url = %(protocol)s://%(domain)s/grafana/

Au niveau de l’adresse d’accès, je veux quelques chose comme https://sous.mondomaine.fr/grafana/.

Si vous avez une erreur 404 au chargement de l’interface, plus bas, éditez de la sorte:

[auth.basic]
enabled = false

Une fois configuré, on va lancer le service :

# service grafana start

Et un p’tit :

# service grafana status

pour être sûr.

C – Reverse proxy

La configuration du reverse (Nginx) dans le block server sous.mondomaine.fr :

location /grafana/ {
  proxy_pass http://IP.GRAFANA:3000/;
  proxy_http_version 1.1;
}

On pense à le recharger au passage.

 

III – Première connexion

On se connecte sur https://sous.mondomaine.fr/grafana/. Le couple login/mdp par défaut est admin/admin et il vous sera demandé de modifier le mot de passe.
Pour info, Grafana supporte Openldap et autres backends pour l’authentification (on verra ça quand j’aurais le temps).

Une fois authentifié, Grafana va vous demander une source de données.
Tout simplement, vous lui dites que c’est Prometheus, que l’adresse est http://IP.PROMETHEUS:9090 et … c’est tout. Les paramètres par défauts sont bons, rien d’autre à régler.

On sauvegarde et tout doit être OK.

 

IV – Première requête

Ensuite, Grafana vous invite à créer votre première Dashboard.

Une fois celle ci créée, regardez en haut à droite, et voyez la série de boutons. Le premier est très utile vu qu’il permet de créer des panels.

Vous choisissez alors l’option Add Query. Puis dans la partie Query, commencez à taper node … et … la magie de l’autocomplétion !
On l’avait aussi dans l’interface web de Prometheus, mais celle ci ne marche que pour le noms de métriques. Dans Grafana, ça marche aussi pour le reste….

On va faire par exemple :

node_load1

ce qui nous affiche tous les loads sur 1 minutes de tous les serveurs.

On peut filtrer avec :

node_load1{instance="monautreserveur:9100"}

Et si par exemple vous aviez cette métrique sur plusieurs jobs, vous pourriez faire :

node_load1{instance="monautreserveur:9100",job="lejobquejefiltre"}

En gros, notre requête PromQL donnerait en InfluxDB :

SELECT node_load1 FROM matable WHERE (instance="monautreserveur:9100" AND job="lejobquejefiltre")

Bien évidement, ce n’est qu’un minuscule aperçu des possibilités… mais si vous avez compris ça, c’est 90% du PromQL… Bon ,j’exagère p’tet un poil…
Mais après, le type d’opérations (sum, count, etc..) cela reste plus ou moins la même chose d’une base à l’autre…

La doc pour mémoire : https://prometheus.io/docs/prometheus/latest/querying/basics/

Au niveau Graphique, idem les possibilités sont très nombreuses, à vous d’explorer !

Mais pour bien appréhender tout cela, il y a une méthode bien plus « pratique » et l’on va voir ça de suite !

 

V – Explorez vos données

Grafana dispose également d’un mode « Explore » (la boussole à gauche).

A la manière d’un Kibana, cela permet de préparer les requêtes et d’ajouter des filtres de façon dynamiques. Tres pratique car l’autocomplétion est complète (pas besoin par ex de taper ins.. pour avoir instance…)

De plus, une aide en ligne est dispo pour les fonctions.

Bref, c’est le bon endroit pour commencer à travailler ses requêtes avant d’en faire un panel.

 

VI – Import de Dashboards

Une fonction de Grafana qui, a priori ne paye pas de mine, mais pourtant se révèle être une excellente idée est la possibilité d’importer des Dashboards déjà conçues.
Et pour se mettre au PromQL, c’est fichtrement formateur de regarder des exemples concrets.

Dans Grafana, sélectionnez le bouton + à gauche, puis Import. Il suffit de rentrer l’id de la Dahsboard que l’on trouvera ici : https://grafana.com/grafana/dashboards

On peut commencer par deux Dashboards comparables (à vous de voir celle que vous préférez) et qui sont dédiées au serveur Prometheus lui même :

https://grafana.com/grafana/dashboards/3662 et https://grafana.com/grafana/dashboards/2

Une fois importée(s) (on colle l’id, on renomme si on veut et on déclare la source Prometheus) et la Dashboard chargée, on peut admirer !

Bon, c’est pas tout, mais il y a une Dashboard qui est très utile, c’est : Node Exporter Full disponible ici https://grafana.com/grafana/dashboards/1860

Elle va nous permettre de visualiser toutes les métriques remontées par Node Exporter.

Importez la, et choisissez le serveur dans Host en haut…

C’est beau hein !

Maintenant, libre à vous de regarder comment chaque panel est fait (petite flèche à côté du nom, puis Edit).

 

VII – Copier un panel

Bon, c’est bien joli tout ça, mais admettons que vous souhaitiez vous faire votre propre Dashboard avec, par exemple, l’espace disque disponible et ce pour chaque machine.
Vu que les panels de Node Exporter Full sont très bien fait, ce sera une excellente base de départ et plutôt que de copier les requêtes, puis refaire le graphique avec les options qui vont bien, etc…, il existe une option « magique ».

Dans le Dashboard Node Exporter Full, trouvez le panel Filesystem Detail / Filesystem space available.

A côté du titre, cliquez sur la flèche puis More et Copy (il arrive que cela ne s’affiche pas, cliquez alors ailleurs et recommencez).

Ensuite, allez sur votre Dashboard, créez un nouveau Panel et une option apparait : paste copied panel.

Vous cliquez le cœur plein d’espoir… Et la : No data points.

Pas de panique, c’est normal !

Éditez le panel et regardez la requête A (la seule active d’ailleurs, on peut retirer les autres avec la petite corbeille) :

node_filesystem_avail_bytes{instance=~"$node:$port",job=~"$job",device!~'rootfs'}

Des variables sont attendues. Celles ci sont celles fournies par les box de sélection en haut de la Dashboard Node Exporter Full (vous pouvez d’ailleurs voir comment ils sont fait dans les options de la Dashboard).

Bref, on va modifier en :

node_filesystem_avail_bytes{instance="monautreserveur:9100"}

Le job ne sert à rien vu que c’est toujours le même et le device, on peut l’enlever aussi pour le moment.

 

Maintenant, il y a quelque chose qui me chagrine, c’est qu’il montre tous les points de montage.
Alors, pour y voir plus clair, on va supprimer la légende juste en dessous : {{mountpoint}} – Available et la, on voit les métriques au complet dans la légende. Par exemple :

node_filesystem_avail_bytes{device="/dev/xvda2",fstype="ext4",instance="monautreserveur:9100",job="systems",mountpoint="/"}

Bon, bah du coup, on va simplifier et notre requête sera :

node_filesystem_avail_bytes{instance="admin:9100",mountpoint="/"}

Simple non ?

Ensuite, il suffit de répéter pour chaque serveur en dupliquant et en modifiant…

A vous les Dashboards customisées !

Je pense qu’il est possible de se faciliter la vie en préparant un gabarit, puis en exportant le Json, en le tripatouillant, et en le réimportant. Mais je verrais ça quand j’aurais le temps…

 

Pour le momen, nous n’avons parlé que des deux familles de métriques que nous remontons pour le moment, celle de Prometheus (préfixées : prometheus_), et les métriques systèmes via Node Exporter (préfixées : node_).

Par la suite, on verra comment monitorer d’autres services et la aussi, des Dashboards préconçues existent.

 

VIII – Conclusion

Voila pour cette petite introduction sur Grafana. Je ne fais qu’effleurer, mais Grafana est facile à comprendre et le langage PromQL se maitrise rapidement, d’autant plus que les panels déjà existant de Node Exporter Full sont très riches d’enseignements.

La documentation de Grafana est ici https://grafana.com/docs, je vous invite à aller voir.

Je vous ai donné les clés, à vous d’ouvrir toutes les portes …

Ceci dit, on reparlera de Grafana un peu plus tard, mais en attendant, on va maintenant se poser la question de « Comment savoir que tel service est down sans avoir le nez sur le monitoring ? » dans l’article dédié à l’Alerting avec Alertmanager.

 


Envie de me soutenir et de me payer un café ? C’est sur la page Don !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *