Niveau 🔴 avancé
Durée estimée : 25 min · Prérequis : Fiche service : Uptime Kuma
Prometheus, c'est le carnet où l'on note, à intervalle régulier, des relevés chiffrés (la
température, le trafic, l'usage CPU). Grafana, c'est le tableau qui transforme ces colonnes de
chiffres en courbes lisibles d'un coup d'œil. Les deux sont complémentaires : l'un collecte et
stocke, l'autre affiche et met en forme — jamais l'inverse.
Prometheus collecte des métriques — des valeurs numériques mesurées à intervalle
régulier (utilisation CPU, mémoire disponible, espace disque, nombre de requêtes...) — en
interrogeant périodiquement des exporters, de petits programmes qui exposent ces valeurs
dans un format que Prometheus sait lire. node_exporter est l'exporter dédié aux métriques
d'une machine (CPU, RAM, disque, réseau) — celui central à cette fiche.
Grafana ne collecte rien lui-mĂŞme : c'est un outil de visualisation, qui se connecte Ă
une ou plusieurs sources de données (Prometheus en est une typique) pour construire des tableaux
de bord — des graphiques configurables, organisés par thème (état matériel, trafic réseau, santé
des services).
Le piège central : mesurer la bonne machine. Un conteneur ne voit, par défaut, que son
propre système de fichiers /proc (les informations que le noyau expose sur les
processus et ressources) — pas celui de la machine hôte qui l'exécute. Ce piège existe avec ou
sans virtualisation : mĂŞme sur une installation Docker native (sans VM), node_exporter en
conteneur, sans configuration particulière, mesure par défaut un /proc qui n'est pas
nécessairement représentatif de la vraie machine physique.
⚠️ Le piège aggravé par une VM. Sur une installation où Docker tourne dans une VM
(vue en M4), le problème se double : même en
contournant l'isolation du conteneur, les métriques obtenues restent celles de la VM, pas
de la machine physique réelle — CPU, RAM et disque rapportés sont ceux vus par l'hyperviseur,
potentiellement très différents des vraies capacités matérielles. Sur du Docker natif, ce
deuxième niveau de biais disparaît, mais le premier (isolation du conteneur) reste entier tant
qu'il n'est pas explicitement traité.
La solution : donner explicitement Ă node_exporter une vue sur les vraies ressources de la
machine hôte, plutôt que sur celles, par défaut limitées, de son propre conteneur — en partageant
l'espace de noms des processus de la machine hĂ´te (pid: host dans le compose.yaml) et en
montant explicitement /proc, /sys et la racine du système de fichiers hôte, en lecture seule,
à l'intérieur du conteneur.
🧪 Concrètement, sur notre exemple : ce piège a été rencontré très exactement dans sa forme
aggravée par une VM, sur le tout premier essai (Mac mini, Docker dans une VM via OrbStack) —
node_exportery mesurait la VM, pas le vrai Mac mini. Sur le ThinkPad X260 (Docker natif), la
configurationpid: host+ montages de/proc,/syset/en lecture seule a malgré tout
été appliquée explicitement, par prudence méthodique plutôt qu'en supposant que « pas de VM »
suffirait à éviter tout biais. La vérification s'est faite en comparant une donnée
caractéristique du vrai disque physique (le chemin du volume logique LVM, vu en
M5) entre ce que rapportait
node_exporteret la réalité de la machine — confirmant qu'il s'agissait bien du disque
physique réel, pas d'un disque virtuel. Le tableau de bord Grafana utilisé est un modèle
communautaire largement répandu (« Node Exporter Full »), importé tel quel plutôt que
reconstruit depuis zéro — pas de raison de réinventer un tableau déjà éprouvé par une large
communauté.
Sans la configuration explicite de node_exporter, la première flèche mesurerait le conteneur
lui-même (voire une VM sous-jacente) plutôt que la machine physique réelle.
docker compose up -d
# Démarre la stack monitoring (Prometheus, Grafana, node_exporter...)
curl http://127.0.0.1:9100/metrics | grep node_filesystem
# Interroge directement node_exporter -- vérifie que les systèmes de
# fichiers rapportés correspondent aux VRAIS disques de la machine
# (ex. le chemin d'un volume logique LVM), pas à un système de
# fichiers virtuel propre au conteneur
docker inspect node_exporter | grep -A3 PidMode
# Confirme que "pid: host" est bien actif -- sans cette ligne, le
# piège de cette page est probablement encore présent
curl -s http://127.0.0.1:9100/metrics | grep node_memory_MemTotal_bytes
La valeur obtenue doit correspondre à la RAM réellement installée sur la machine (vérifiable avec
free -h, vu en M3) — pas une valeur différente qui
trahirait une mesure biaisée par l'isolation du conteneur ou une couche de virtualisation.
| SymptĂ´me | Cause probable | Solution |
|---|---|---|
| Métriques CPU/RAM affichées ne correspondent pas aux vraies caractéristiques de la machine | node_exporter mesure son propre conteneur (voire une VM), sans accès aux vraies ressources hôte |
Ajouter pid: host et monter /proc, /sys, / en lecture seule dans le compose.yaml |
| Dashboard Grafana vide ou en erreur | Source de données Prometheus non configurée, ou requête mal formée | Vérifier la configuration de la source de données dans Grafana, puis tester la requête directement dans l'interface Prometheus |
| Confiance aveugle dans des métriques jamais recoupées avec la réalité | Absence de vérification croisée après la mise en place | Comparer au moins une valeur caractéristique (RAM totale, chemin du disque) avec une commande exécutée directement sur la machine hôte |
pid: host et le montage explicite de /proc, /sys, / donnent à node_exporter une vuePrometheus collecte et stocke des métriques en interrogeant des exporters ; Grafana ne collecte
rien lui-même, il visualise les données d'une ou plusieurs sources, dont Prometheus.
Parce qu'un conteneur ne voit, par défaut, que son propre /proc — pas celui de la machine hôte
— indépendamment de la présence ou non d'une VM sous-jacente.
Comparer une donnée caractéristique (RAM totale, chemin d'un disque physique) entre ce que
rapporte node_exporter et une commande exécutée directement sur la machine hôte (free -h,
lsblk).
Sur une machine avec Docker, déploie node_exporter sans pid: host ni montages spéciaux,
compare la RAM totale rapportée (curl .../metrics | grep MemTotal) à celle réelle de la
machine (free -h). Ajoute ensuite pid: host et les montages nécessaires, et observe si le
résultat change.
métrique ·
exporter ·
node_exporter ·
pid: host
Cette formation est proposée par Deladev, studio web de Loïc D. — création de sites et d'applications, accompagnement et formation sur mesure.
Les projets réalisés · Prestations et tarifs · Le blog tech · Me contacter
Écrite par Loïc D. avec l'assistance de Claude (Anthropic) — un travail à deux.
© 2026 Deladev — publiée sous licence CC BY-NC-ND 4.0. Vous pouvez la lire, y renvoyer par un lien, la partager et la citer en créditant la source. La revendre, l'utiliser dans une prestation ou une formation payante, la republier même partiellement ailleurs, en diffuser une version modifiée ou l'exploiter pour entraîner un modèle d'IA nécessitent une autorisation écrite — pour un usage interne en entreprise, c'est souvent oui, il suffit de demander.