Blog de dada

DevOps, bidouilleur et routard plein de logiciels libres

Attention, ce billet se traine depuis plus de 3 mois. Les informations qu'il contient ne sont peut-être plus à jour.


Installer Grafana, Prometheus et Node Exporter

Rédigé par dada / / 25 commentaires




Le monitoring, j'aime à dire que c'est ce que l'administrateur a de plus pervers : surveiller, voir et savoir tout ce qui se passe sur ses machines, sans limite, et de la façon qui lui est la plus agréable possible. Un admin, c'est un stalker, en fait.

De mon côté, après avoir testé Facette, Monitorix, Netdata et Munin, je joue en ce moment avec Grafana, Prometheus et les exporters qui vont avec. C'est l'objet de ce billet, ça tombe bien, alors voyons comment faire pour installer tout ça en quelques minutes.

Comprendre l'installation en quelques lignes

Vos serveurs vont avoir un exporter simple : le Node Exporter, qui va permettre à Prometheus de récupérer les différentes métriques qu'il partage. La bonne pratique consiste à installer Prometheus sur une serveur qui sera dédié à la collecte des informations. Si vous installez tout sur une seul et même machine, vous pourrez mettre du localhost dans presque tout ce qui suit. Grafana, quant à lui, va afficher ses données avec des jolies couleurs et dans des jolis graphiques.

Installer Prometheus

Pas de piège pour une Debian Stretch :
apt install prometheus 
C'est un peu plus compliqué pour une Jessie :
apt -t jessie-backports install prometheus 
Notez qu'essayer de lancer le service sous Jessie via systemd est foireux : il faut utiliser la bonne vieille méthode :
/etc/init.d/prometheus start 
Si vous ne faites pas ça et que vous avez des soucis, genre un service qui écoute déjà sur le 9090, vous ne verrez rien dans les logs.

A partir de là, vous devriez pouvoir accéder à Prometheus en tapant sur le port 9090 de votre serveur.



Quoi ? Jamais j'ai écrit que Prometheus était sexy ;-)

Installer Node Exporter

Prometheus ne sait pas collecter d'informations tout seul. Il lui faut des exporters. Le plus simple et le plus complet pour avoir une vision global de la situation d'une machine (CPU, RAM, Load, traffic, etc) est le bien nommé Prometheus Node Exporter. Pour l'installer :
apt install prometheus-node-exporter

Configurer le Node Exporter dans Prometheus

Maintenant que les deux premiers outils sont installés, il va falloir les faire bosser ensemble. On va simplement déclarer dans la configuration de Prometheus qu'il doit se mettre d'accord avec l'exporter :
vim /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'prometheus'

    scrape_interval: 5s
    scrape_timeout: 5s

    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['monserveur:9100','monserveurdeux:9100']

L'exemple de configuration ci-dessus est quasiment celle de base. Il faut noter que le job_name 'prometheus' est là pour expliquer que Prometheus est en local. Quant au job_name 'node',  il fait comprendre à Prometheus que le Node Exporter est présent sur les hosts cités entre crochets.

On sauvegarde tout ça et on recharge la configuration de Prometheus avec le curl qui va bien :
curl -X POST http://localhost:9090/-/reload
Si vous n'avez pas d'erreur, on va enfin s'attaquer à la partie artistique de l'opération : les graphiques !

Installer Grafana

L'installation est, là aussi, triviale :
apt-get install grafana 
C'est 'achement difficile, tout ça, hein ?

Configurer Nginx

Pour ne pas avoir à toujours taper le port de Grafana, voici un bout de conf pour Nginx :
server {
    listen 80;

        root /var/www/html/;

        server_name grafana.monserveur.tld;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://127.0.0.1:3000;
        }
}

Configurer Grafana

- Ajouter une data source

Grafana, ça marche tout seul. Une fois installé, il vit sa vie. Par contre, il va falloir le brancher à Prometheus, tout de même.
Comme blablater, c'est chiant, voici une capture d'écran de ce que vous devez faire :



En commentaire : cliquez sur le menu en haut à gauche de Grafana pour ajouter une nouvelle data source et récupérer les informations que vous voyez dans la capture.
Vous remarquerez que le port mis en place est bien celui de Prometheus et pas celui du Node Exporter : Grafana ne communique pas avec Node Exporter (sur le port 9100), mais uniquement avec Prometheus.

On arrive à la fin. Maintenant que l'exporter balance des informations, que Prometheus en est conscient et que Grafana arrive à échanger avec Prometheus, on va pouvoir mettre en place un dashboard pour profiter des graphiques !

- Installer le dashboard Node Exporter Full

Ici, c'est aussi simple (mais pourquoi est-ce que je m'emmerde à écrire ce billet si c'est si simple ?!), pour installer un dashboard, allez dans le Menu de Grafana, puis Dashboard et enfin Import. Je dis bien Import, pas New. Enfin, ajoutez le nombre 1860 dans la premier champ pour faire apparaître la fenêtre suivante :



Bon, j'ai aussi cliqué n'importe-où sur la fenêtre pour que Grafana prenne en compte la nouvelle information et, finalement, affiche la capture ci-dessus.

On a fait le tour. Tout est bon. Vous pouvez aller sur la page d'accueil de Grafana, cliquer sur le nom de votre nouveau dashboard et profiter du spectacle !



25 commentaires

#1  - ypso a dit :

salut
merci pour le tuto
a tu u exemple d'ajout d'un client ?

Répondre
#2  - dada a dit :

Salut,

C'est à dire ? Ajouter une nouvelle machine à Prometheus ? Qu'est-ce que tu appelles un client ?

Répondre
#3  - Anoskar a dit :

Bonjour, +1 pour la question et voici la suite :
Comment ajouter un serveur à cette jolie config ? Aussi, puis-je réutiliser mes script s'articulant autour de SNMP déjà existant et fonctionnel sous nagios ( en gros une exportation )?

Répondre
#4  - dada a dit :

Bonjour,

Après avoir ajouté l'exporter qui va bien, il faut ajouter l'IP/DNS du serveur dans le prometheus.yml. Lancez ensuite le curl qui va bien pour reloader la onf et il apparaîtra, normalement.
Dans le billet, j'ai mis «monserveur:9100» et «monserveurdeux:9100» pour l'illustrer.
C'est cette réponse que vous cherchez ?

Les scripts Nagios font quoi ? J'ai pas encore toutes les billes en main, alors je peux dire des conneries, mais à priori non. La stack est indépendante de ce que peut faire Nagios. Je dis ça avec des pincettes. Je dois me pencher sur l'alerting et les checks de process dans le courant de la semaines.

Répondre
#5  - siger a dit :

J'ai également lu cet article intéressant sur le fonctionnement de Prometheus.
http://linuxfr.org/news/decouverte-de-l-outil-de-supervision-prometheus

Répondre
#6  - Yri a dit :

Bonjour, j'ai suivi à la lettre ce tuto (très bon, en passant, merci beaucoup) , mais après avoir importé le dashboard 1860, j'ai très peu d'informations qui ressorte. Par exemple toutes les jauges de la catégorie Basic CPU / Mem / Disk Gauge affichent N/A, comme la plupart des graphes. Pouvez vous m'expliquer pourquoi?

Répondre
#7  - dada a dit :

Salut et merci !

Si tu n'as pas d'informations qui remontent dans ton dashboard, c'est que les exporters et/ou prometheus sont mal branchés. Je t'invite à vérifier les ports de ton installation.
si tu en as partiellement, c'est une autre affaire. Après, il faut penser à attende un peu que les données remontent pour que les graphiques se remplissent. Tu peux vérifier ça en n'affichant que les 5 dernières minutes de stats dans grafana.

Répondre
#8  - Sraoune a dit :

Le dashboard 1860 a été mis à jour et requiert un node exporter en version 0.16 ou supérieure.

Répondre
#9  - sardonnen a dit :

bonjour,

comment faut il faire pour remonter le hostname des machines au lieu des ip node par défaut issus de swarm ?

merci

Répondre
#10  - dada a dit :

Bonjour,

Pas de swarm dans la conf de ce billet, désolé. Je ne sais pas comment tu peux faire ça mais ce billet devrait pouvoir t'aider : https://www.it-wars.com/posts/virtualisation/docker-swarm-par-lexemple/

Ma conf remonte les hostnames des machines parce que Prometheus est configuré pour le faire, rien de plus.

Répondre
#11  - flipflap a dit :

Bonjour, Très bonne explication !!

Cependant, savez-vous si on peut installer node exporter sur un serveur Windows afin que prométheus puisse récupérer des informations issu d'un serveur Windows ?

Répondre
#12  - dada a dit :

Salut et merci ! Ça fait plaisir de lire que mes explications sont claires: j'ai toujours des doutes :)

PNE ne semble pas disponible pour Windows (cf https://github.com/prometheus/node_exporter/issues/290).
Par contre, il semble qu'il existe WMI Exporter qui s'en charge (voir https://github.com/martinlindhe/wmi_exporter). C'est un exporter fait par un développeur indépendant, un peu comme ce que je fais. À voir si ça tourne bien. Perso, je n'ai pas de machines sous Windows, je ne peux tester.

Répondre
#13  - swake a dit :

Bonjour et merci pour le tuto. J'ai utilisé comme base un PI3+ avec Stretch Lite donc pas d'interface graphique. Donc je ne vois pas comment obtenir votre impression d'écran arrivé à ce stade:

Configurer Grafana
- Ajouter une data source

Grafana, ça marche tout seul. Une fois installé, il vit sa vie. Par contre, il va falloir le brancher à Prometheus, tout de même.
Comme blablater, c'est chiant, voici une capture d'écran de ce que vous devez faire :

Cette impression d'écran correspond à quelle fichier de conf ?
Merci

Répondre
#14  - dada a dit :

Bonjour,

Il faut passer par l'interface web. C'est la partie configuration de la datasource : ici, dans notre cas, ça sera Prometheus. Ce n'est pas un fichier de configuration : on arrive sur cette page de conf en cliquant sur la roue crantée de la barre de menu de Grafana, sur la gauche.

C'est plus clair ?

Répondre
#15  - swake a dit :

J'ai installé Grafana avec la commande: pi@raspberrypi:~ $ sudo apt-get install grafana mais je vois pas après ce que je dois faire. La seul chose que j'obtiens dans un navigateur en tapant http://ip:9090 c'est l'impression d'écran de Prometheus que vous obtenez après cette phrase dans votre tuto:

"A partir de là, vous devriez pouvoir accéder à Prometheus en tapant sur le port 9090 de votre serveur."

Et je ne vois nul part le mot Grafana et pas plus de roue crantée.

Répondre
#16  - dada a dit :

Et en tapant sur http://ip:3000 ?
9090 est le port de Prometheus, 3000 est le port de Grafana :)

Répondre
#17  - swake a dit :

La page de votre tuto s'afficherai mal chez moi? J'utilise Chrome. Je ne vois nul part ou vous mentionner qu'il faut utiliser le port 3000 et non plus qu'il faut lancer Grafana après son installation avec la commande "systemctl enable grafana".
Donc en utilisant le port 3000 sa me rajoute /login à l'url et j'ai une page toute noir qui s'affiche mais je peu rien en faire. J'ai encore loupé quelques choses?
En tout cas merci de prendre le temps de répondre à nos questions :)

Répondre
#18  - dada a dit :

Non, la page s'affiche bien. Je suis parti du principe que les gens mettraient en place un reverse proxy pour atteindre Grafana. Le port est bien présent dans le billet, mais dans les extraits de configuration Nginx uniquement.
La page "noire" devrait afficher le formulaire pour se connecter à Grafana (admin/admin).
Je n'ai pas spécialement détaillé toutes les étapes : installer Prometheus n'est pas à la portée de tout le monde et je suis peut-être parti avec des prérequis un peu élevé :)

Répondre
#19  - Max a dit :

Bonjour,
Merci pour ce tuto.
Je galère pour installer prometheus-node-exporter sur debian 8 :
INFO[0000] Starting node_exporter (version=0.17.0, branch=HEAD, revision=f6f6194 a436b9a63d0439abc585c76b19a206b21) source="node_exporter.go:82"
INFO[0000] Build context (go=go1.11.2, user=root@322511e06ced, date=20181130-15: 51:33) source="node_exporter.go:83"
INFO[0000] Enabled collectors: source="node_exporter.g o:90"
INFO[0000] - arp source="node_exporter.g o:97"
INFO[0000] - bcache source="node_exporter.g o:97"
INFO[0000] - bonding source="node_exporter.g o:97"
INFO[0000] - conntrack source="node_exporter.g o:97"
INFO[0000] - cpu source="node_exporter.g o:97"
INFO[0000] - diskstats source="node_exporter.g o:97"
INFO[0000] - edac source="node_exporter.g o:97"
INFO[0000] - entropy source="node_exporter.g o:97"
INFO[0000] - filefd source="node_exporter.g o:97"
INFO[0000] - filesystem source="node_exporter.g o:97"
INFO[0000] - hwmon source="node_exporter.g o:97"
INFO[0000] - infiniband source="node_exporter.g o:97"
INFO[0000] - ipvs source="node_exporter.g o:97"
INFO[0000] - loadavg source="node_exporter.g o:97"
INFO[0000] - mdadm source="node_exporter.g o:97"
INFO[0000] - meminfo source="node_exporter.g o:97"
INFO[0000] - netclass source="node_exporter.g o:97"
INFO[0000] - netdev source="node_exporter.g o:97"
INFO[0000] - netstat source="node_exporter.g o:97"
INFO[0000] - nfs source="node_exporter.g o:97"
INFO[0000] - nfsd source="node_exporter.g o:97"
INFO[0000] - sockstat source="node_exporter.g o:97"
INFO[0000] - stat source="node_exporter.g o:97"
INFO[0000] - textfile source="node_exporter.g o:97"
INFO[0000] - time source="node_exporter.g o:97"
INFO[0000] - timex source="node_exporter.g o:97"
INFO[0000] - uname source="node_exporter.g o:97"
INFO[0000] - vmstat source="node_exporter.g o:97"
INFO[0000] - xfs source="node_exporter.g o:97"
INFO[0000] - zfs source="node_exporter.g o:97"
INFO[0000] Listening on :9100 source="node_exporter.g o:111"

A partir d'ici tout reste figé.

Merci

Répondre
#20  - dada a dit :

Hum, j'ai du mal à voir le souci avec tes logs. Tu le lances comment, ton exporter ?

Répondre
#21  - Bob a dit :

Bonjour,
Est'il possible de récupérer les données d'un node-exporter sur un site distant?
Si oui quels sont les ports à ouvrir et à rediriger?
Merci

Répondre
#22  - dada a dit :

C'est à dire ?

Il est parfaitement possible d'installer un node-exporter sur un serveur1 et prometheus sur un serveur2. Il faut, du coup, configuré prometheus pour aller fetcher l'exporter via l'IP qui va bien, en pensant à ouvrir le port qui va bien sur les 2 serveurs.

Ça aide ?

Répondre
#23  - Boobav2 a dit :

Est-il possible de séparer les applications ?!
C’est à dire installer Prometheus sur un serveur1, grafana sur un serveur2 et installer le node exporter sur un serveur sur lequel est installer un sgbd afin de superviser les instances sur la base de données

Répondre
#24  - dada a dit :

Oui, la configuration des Prometheus et de Grafana permettent de spécifier les IP à utiliser, quant à l'exporter, c'est Prometheus qui va s'en charger, toujours en fonction de l'IP dans la conf.

Répondre
#25  - Sully a dit :

Merci, tuto simple et efficace.
De mon coté tout fonctionne bien, un premier pas qui ma permis d'aller plus loin. Bonne continuation

Répondre

Fil RSS des commentaires de cet article

Écrire un commentaire

Quelle est le dernier caractère du mot azs3t0 ?