Surveiller ses serveurs, ses services et ses sites est indispensable. Mais payer Datadog 15 $ par hôte et par mois — c’est douloureux, surtout quand vous avez cinq VPS et une dizaine d’applications self-hosted. Bonne nouvelle : une stack de monitoring open-source se met en place en une heure et couvre 90 % des besoins d’un projet moyen.
Dans ce guide, nous allons assembler la stack : Prometheus (métriques), Grafana (tableaux de bord), Loki (logs), Node Exporter (métriques système), Uptime Kuma (statut des sites). Le tout en Docker Compose, avec persistance et alertes.
Étape 1 : Docker Compose
Créez un répertoire monitoring et un fichier docker-compose.yml :
version: "3.8"
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=30d"
ports:
- "9090:9090"
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- "--path.procfs=/host/proc"
- "--path.sysfs=/host/sys"
- "--path.rootfs=/rootfs"
ports:
- "9100:9100"
restart: unless-stopped
grafana:
image: grafana/grafana:latest
environment:
- GF_SECURITY_ADMIN_PASSWORD=changeme
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:Étape 2 : Prometheus — collecte des métriques
Créez prometheus.yml :
global:
scrape_interval: 15s
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"]
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]Node Exporter collecte CPU, RAM, disque, réseau — tout ce qui est système. Pour surveiller plusieurs serveurs, lancez Node Exporter sur chacun d’eux et ajoutez leurs IP dans targets.
Étape 3 : Grafana — visualisation
Rendez-vous sur http://votre-serveur:3000 (identifiant : admin, mot de passe : changeme). Ajoutez Prometheus comme source de données (URL http://prometheus:9090).
Importez le tableau de bord 1860 (Node Exporter Full) — c’est le template le plus populaire pour les métriques système. Après l’importation, vous verrez de beaux graphiques.
Étape 4 : Loki — logs
Ajoutez Loki et Promtail dans docker-compose.yml :
loki:
image: grafana/loki:latest
volumes:
- loki_data:/loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
restart: unless-stopped
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- ./promtail.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
restart: unless-stoppedDans Grafana, ajoutez Loki comme source de données et utilisez Explore pour rechercher dans les logs. Tous les logs de conteneurs et les logs système — en un seul endroit, avec recherche et filtrage.
Étape 5 : Uptime Kuma — statut des sites
Pour surveiller la disponibilité des sites et des API, lancez Uptime Kuma dans un conteneur séparé :
uptime-kuma:
image: louislam/uptime-kuma:latest
volumes:
- uptime_kuma_data:/app/data
ports:
- "3001:3001"
restart: unless-stoppedUptime Kuma peut pinger, vérifier les statuts HTTP, les certificats SSL, les ports TCP, les enregistrements DNS. Configurez les notifications vers Telegram, Discord ou Email.
Étape 6 : Alertes
Prometheus prend en charge Alertmanager pour les notifications. Configuration minimale — une règle dans prometheus.yml :
rule_files:
- "alert.rules.yml"Et dans alert.rules.yml :
groups:
- name: node
rules:
- alert: HighCPU
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU supérieur à 80% sur {{ $labels.instance }}"Alertmanager peut être connecté à Telegram, Email, Slack.
Combien ça coûte en ressources
Toute la stack sur un VPS avec 2 Go de RAM :
- Prometheus : ~200 Mo de RAM + disque pour les données (selon la rétention)
- Grafana : ~150 Mo de RAM
- Loki : ~200 Mo de RAM
- Node Exporter : ~50 Mo de RAM
- Promtail : ~100 Mo de RAM
- Uptime Kuma : ~100 Mo de RAM
Total : environ 800 Mo de RAM pour une stack de monitoring complète. Les 1,2 Go restants suffiront pour vos applications.
Et ensuite
Avec cette stack, vous obtenez :
- Métriques de tous les serveurs en temps réel
- Logs centralisés avec recherche
- De beaux tableaux de bord dans Grafana
- Des alertes en cas de problème
- Surveillance de la disponibilité des sites
Quand le projet grandira, vous pourrez ajouter : cAdvisor (métriques de conteneurs), Blackbox Exporter (vérifications HTTP/DNS/TCP), Grafana Tempo (tracing).
Fini les 15 $ par hôte. Seulement vos données sur votre serveur.
Site officiel de Prometheus | Site officiel de Grafana | Uptime Kuma sur GitHub