Guides et tutoriels

Monitoring VPS avec Prometheus, Grafana et Alertmanager

Publié le 22 avril 2024 · 16 min de lecture

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/prometheus

Cré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.target

Validez 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-exporter

L'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 prometheus

Vérification

  • curl localhost:9090/-/healthy et curl localhost:9100/metrics | head ré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 bien localhost.
  • 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.

Des tutoriels pas-à-pas rédigés par nos ingénieurs, testés sur notre infrastructure.

GLOBALCLOUDHOSTING →