L'architecture
Prometheus collecte et stocke les métriques (base de séries temporelles), node_exporter expose les métriques système du VPS (CPU, RAM, disque, réseau), Grafana les visualise, Alertmanager envoie les alertes. Quatre services, un seul VPS, zéro dépendance externe.
Prérequis
Un VPS Ubuntu 24.04 avec 2 GB de RAM minimum et un accès root. Les ports 3000 (Grafana), 9090 (Prometheus) et 9093 (Alertmanager) resteront sur localhost ou derrière un reverse proxy — ne les exposez jamais directement sur Internet.
Étape 1 — Installer Prometheus
Créez l'utilisateur et les dossiers, puis installez le binaire officiel (la série 2.53 est une LTS) :
useradd --no-create-home --shell /usr/sbin/nologin prometheus
mkdir /etc/prometheus /var/lib/prometheus
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.53.1/prometheus-2.53.1.linux-amd64.tar.gz
tar -xzf prometheus-2.53.1.linux-amd64.tar.gz
cp prometheus-2.53.1.linux-amd64/prometheus prometheus-2.53.1.linux-amd64/promtool /usr/local/bin/
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheusCréez /etc/prometheus/prometheus.yml :
global:
scrape_interval: 15s
rule_files:
- /etc/prometheus/rules/*.yml
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
- job_name: node
static_configs:
- targets: ['localhost:9100']Puis le service systemd /etc/systemd/system/prometheus.service :
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--storage.tsdb.retention.time=15d
Restart=always
[Install]
WantedBy=multi-user.targetValidez la configuration et démarrez :
promtool check config /etc/prometheus/prometheus.yml
systemctl daemon-reload
systemctl enable --now prometheusÉtape 2 — Installer node_exporter
Le paquet Ubuntu suffit et installe le service systemd automatiquement :
apt install -y prometheus-node-exporter
systemctl status prometheus-node-exporterL'exporter écoute sur le port 9100. Un VPS puissant collecte ses propres métriques sans effort — la charge de la supervision est négligeable sur du Ryzen 9.
Étape 3 — Installer Grafana
Ajoutez le dépôt officiel :
install -d -m 0755 /etc/apt/keyrings
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" > /etc/apt/sources.list.d/grafana.list
apt update && apt install -y grafana
systemctl enable --now grafana-serverÉtape 4 — Premier dashboard
Ouvrez http://IP-du-VPS:3000 (via un tunnel SSH ssh -L 3000:localhost:3000 si le port est filtré). Connectez-vous avec admin/admin, changez le mot de passe, puis :
1. Connections → Data sources → Add → Prometheus, URL http://localhost:9090, Save & test. 2. Dashboards → Import → entrez l'ID 1860 (« Node Exporter Full ») → sélectionnez votre source Prometheus.
Vous obtenez immédiatement CPU, RAM, disque, réseau et I/O en temps réel.
Étape 5 — Installer et configurer Alertmanager
apt install -y prometheus-alertmanagerÉditez /etc/prometheus/alertmanager.yml pour router les alertes vers un email et un bot Telegram (créez le bot via @BotFather, récupérez votre chat_id via l'URL getUpdates du bot) :
global:
smtp_smarthost: 'smtp.example.com:587'
smtp_from: '[email protected]'
smtp_auth_username: '[email protected]'
smtp_auth_password: 'MotDePasseSMTP'
route:
receiver: email
group_by: [alertname]
routes:
- match:
severity: critical
receiver: telegram
receivers:
- name: email
email_configs:
- to: '[email protected]'
- name: telegram
telegram_configs:
- bot_token: '123456:ABC-DEF-votre-token'
chat_id: 123456789
message: '{{ .CommonAnnotations.summary }}'systemctl restart prometheus-alertmanagerÉtape 6 — Règles d'alerte
Créez /etc/prometheus/rules/node.yml :
groups:
- name: node
rules:
- alert: InstanceDown
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} injoignable"
- alert: DiskAlmostFull
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
for: 10m
labels:
severity: warning
annotations:
summary: "Disque racine plein a plus de 85 % sur {{ $labels.instance }}"
- alert: HighLoad
expr: node_load1 > 8
for: 15m
labels:
severity: warning
annotations:
summary: "Charge elevee sur {{ $labels.instance }}"Adaptez le seuil de HighLoad au nombre de vCPU. Validez et rechargez :
promtool check rules /etc/prometheus/rules/node.yml
systemctl reload prometheusVérification
curl localhost:9090/-/healthyetcurl localhost:9100/metrics | headrépondent.- Dans Prometheus, Status → Targets : les deux jobs UP.
- Alerts : vos trois règles apparaissent en vert.
- Test réel :
systemctl stop prometheus-node-exporter— l'alerte InstanceDown se déclenche après 2 minutes, Telegram et l'email reçoivent la notification. Redémarrez le service.
Dépannage
- Target DOWN : vérifiez que le service tourne (
ss -tlnp | grep 9100) et que la cible est bienlocalhost. - Alertes non reçues :
journalctl -u prometheus-alertmanager; pour Telegram, le chat_id est numérique et le bot doit avoir reçu un premier message de votre part. - Datasource Grafana en erreur : utilisez
http://localhost:9090, pas le nom d'hôte, et vérifiez que Prometheus écoute.
Aller plus loin
N'importe quel serveur équipé de node_exporter peut rejoindre le job node : ajoutez son IP dans prometheus.yml, rechargez, et une seule instance Prometheus surveille toute votre flotte. Pour les sondes boîte noire — statut HTTP, réponses DNS, expiration des certificats TLS — le paquet prometheus-blackbox-exporter se branche de la même manière et alimente des alertes de disponibilité via le même Alertmanager.