« Le serveur est lent » est un rapport de bug inutile — sauf si vous pouvez ouvrir un graphique et voir que la mémoire a grimpé pendant trois jours avant le plantage. C'est exactement ce qu'apportent Prometheus et Grafana : le CPU, la RAM, le disque et le réseau de chaque serveur, enregistrés toutes les 15 secondes et affichés en graphiques dans lesquels on peut remonter le temps. Placez-les sur leur propre petit VPS et ils continuent de surveiller même quand une machine de production tombe.
Les briques
- node_exporter sur chaque serveur à surveiller — expose les métriques système sur le port 9100.
- Prometheus sur le VPS de supervision — récupère (scrape) ces métriques et les stocke.
- Grafana — les tableaux de bord, derrière HTTPS.
- En option, Alertmanager ou les alertes Grafana pour vous prévenir quand un seuil est franchi.
Ce qu'il vous faut
- Micro-IP (10 $/mois, 2 vCPU, 2 Go de RAM, 25 Go) surveille une à deux dizaines de serveurs. Plus d'hôtes, des métriques applicatives maison ou des mois de rétention : Small-IP.
- Une IPv4 dédiée pour le serveur de supervision — Grafana est servi en HTTPS, et vos cibles peuvent autoriser une seule adresse stable sur le port 9100.
1. node_exporter sur chaque cible
apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp
Remplacez 203.0.113.10 par l'adresse de votre VPS de supervision. Ne laissez jamais le 9100 ouvert au monde : il en dit long sur votre serveur.
2. Prometheus et Grafana sur le VPS de supervision
apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring
cat > prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: nodes
static_configs:
- targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF
cat > compose.yml <<'EOF'
services:
prometheus:
image: prom/prometheus
volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
ports: [ "127.0.0.1:9090:9090" ]
restart: unless-stopped
grafana:
image: grafana/grafana
volumes: [ "grafana:/var/lib/grafana" ]
ports: [ "127.0.0.1:3000:3000" ]
restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF
docker compose up -d
HTTPS devant Grafana :
echo 'grafana.example.com {
reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy
Connectez-vous (admin / admin, puis changez-le), ajoutez Prometheus comme source de données à http://prometheus:9090 et importez le tableau de bord communautaire « Node Exporter Full » (ID 1860). Vous obtenez un tableau de bord système complet en une minute environ.
Serveurs en offre NAT
Un serveur NAT n'accepte les connexions entrantes que sur son port SSH personnel : Prometheus ne peut donc pas interroger son exporter. Inversez le sens : lancez Prometheus en mode agent sur la machine NAT et poussez vers le serveur de supervision, qui accepte déjà les écritures distantes (l'option --web.enable-remote-write-receiver plus haut).
# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
- job_name: self
static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
- url: https://prom-push.example.com/api/v1/write
Exposez ce point de réception via Caddy avec une authentification basique plutôt que d'ouvrir le port 9090 tel quel.
Remarques honnêtes
Prometheus va chercher les données lui-même : parfait pour un parc que vous maîtrisez, peu pratique pour tout ce qui est derrière du NAT — d'où l'astuce de l'agent. Son stockage local n'est pas prévu pour des années d'historique ; pour une longue rétention, on ajoute plus tard un stockage distant. Et les tableaux de bord ne font que la moitié du travail : configurez au moins trois alertes dès le premier jour (disque au-delà de 85 %, pression mémoire, cible injoignable), sinon vous ne regarderez les graphiques qu'une fois la panne arrivée.
Pour aller plus loin
- VPS pour la surveillance de disponibilité (Uptime Kuma) — alertes de panne et pages de statut
- Configurer un pare-feu UFW
- De combien de RAM un VPS a-t-il besoin ?
Commentaires
Pas encore de commentaires. Soyez le premier.