Grafana est la plus belle interface de monitoring du marché. Mais Grafana est "bête" : il ne stocke rien, il ne fait qu'afficher. Pour avoir des courbes, nous avons besoin d'une Time Series Database (TSDB). Le standard de l'industrie est Prometheus. Voici comment déployer cette stack complète via Docker Compose.
1. L'Architecture (Qui fait quoi ?)
- Node Exporter : C'est l'agent installé sur le serveur. Il expose les métriques (CPU, RAM, Disque) sur une page web (http://ip:9100/metrics).
- Prometheus : C'est le collecteur. Il vient "lire" (Scrape) la page de Node Exporter toutes les 15 secondes et stocke les chiffres.
- Grafana : C'est le visualiseur. Il interroge Prometheus pour dessiner les graphiques.
2. Préparation (Config Prometheus)
Avant de lancer Docker, il faut dire à Prometheus qui il doit surveiller. Créez un dossier monitoring et un fichier prometheus.yml :
global:
scrape_interval: 15s # On récupère les données toutes les 15s
scrape_configs:
- job_name: 'mon_vps'
static_configs:
- targets: ['node-exporter:9100'] # Nom du service Docker ci-dessous
3. Le Docker Compose (La Stack)
Créez le fichier docker-compose.yml dans le même dossier :
version: '3.8'
services:
# 1. L'Agent (Récupère les infos du serveur hôte)
node-exporter:
image: prom/node-exporter:latest
container_name: node_exporter
restart: unless-stopped
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
networks:
- monitor-net
# 2. La Base de données (Stocke l'historique)
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=15d' # Garde 15 jours d'historique
ports:
- 9090:9090
networks:
- monitor-net
# 3. L'Interface (Affiche les courbes)
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
user: "472" # ID utilisateur spécifique à Grafana (voir note plus bas)
volumes:
- grafana_data:/var/lib/grafana
ports:
- 3000:3000
networks:
- monitor-net
volumes:
prometheus_data:
grafana_data:
networks:
monitor-net:
driver: bridge
L'image Docker officielle de Grafana tourne avec l'utilisateur ID 472. Si vous créez le volume
grafana_data sur l'hôte, il appartient souvent à Root, et Grafana crashe au démarrage ("Permission Denied").
Solution : Laissez Docker gérer le volume nommé (comme fait ci-dessus) OU faites un
chown 472:472 sur votre dossier mappé.
Lancez la stack : docker compose up -d.
4. Configuration de Grafana
Rendez-vous sur http://VOTRE_IP:3000. Login par défaut : admin / admin.
A. Ajouter la Source de Données (Datasource)
- Allez dans Connections > Data Sources.
- Cliquez sur Add data source et choisissez Prometheus.
- Dans l'URL, mettez :
http://prometheus:9090(C'est le nom du conteneur dans le réseau Docker). - Cliquez sur "Save & Test".
B. Importer un Dashboard (Ne réinventez pas la roue)
Créer des graphiques à la main est long. Utilisons les modèles de la communauté.
- Allez dans Dashboards > Import.
- Dans le champ "Import via grafana.com", entrez l'ID : 1860.
- C'est le dashboard "Node Exporter Full" (le plus complet).
- Sélectionnez votre source Prometheus et validez.
Boom ! Vous avez instantanément des graphiques professionnels sur l'usage CPU, RAM, Disque et Réseau.
5. Alerting (Être notifié)
Avoir de beaux graphiques ne suffit pas. Configurez une alerte simple :
- Editez le panneau "CPU Usage".
- Allez dans l'onglet Alert.
- Condition :
WHEN avg() OF query(A, 5m, now) IS ABOVE 90. - Configurez un "Contact Point" (Email, Slack, Discord).
Conclusion
Contrairement à Netdata (Temps réel, 1 seconde), Grafana est fait pour l'analyse long terme et la corrélation de données. C'est l'outil indispensable pour comprendre "Pourquoi mon serveur a planté mardi dernier à 3h du matin ?".