Guide de déploiement

Monitoring VPS avec Grafana et Prometheus

Déployer sur un VPS Cloud →

Tutoriel

Monitoring VPS avec Grafana et Prometheus

Sécurité & Monitoring11 min de lecture8 étapes

Quand vous voulez des métriques historiques, des dashboards sur mesure et de l'alerting fin, le duo Prometheus + Grafana est la référence open source. Prometheus 3.x collecte et stocke les séries temporelles, Grafana 13.x les visualise. Voici comment déployer cette stack complète — Node Exporter, cAdvisor, Alertmanager inclus — sur votre propre VPS.

Sommaire· Pourquoi self-héberger Prometheus et Grafana sur un VPS1/11
  1. 01Pourquoi self-héberger Prometheus et Grafana sur un VPS
  2. 02Ce que cette stack apporte sur votre VPS
  3. 03Prérequis VPS et ressources à prévoir
  4. 04Déployer la stack avec Docker Compose
  5. 05Importer les dashboards communautaires Grafana
  6. 06Configurer les alertes avec Alertmanager
  7. 07Prometheus vs InfluxDB vs Zabbix : lequel choisir ?
  8. 08Durcissement : ne jamais exposer Prometheus publiquement
  9. 09Ajouter la surveillance des conteneurs Docker avec cAdvisor
  10. 10Dépannage : les erreurs les plus fréquentes
  11. 11Pour aller plus loin

Pourquoi self-héberger Prometheus et Grafana sur un VPS

Contrairement à un outil tout-en-un, la stack Prometheus + Grafana sépare clairement la collecte (Prometheus scrape les métriques exposées par des exporters), le stockage (base de séries temporelles intégrée) et la visualisation (Grafana). Cette modularité est précisément ce qui en fait un standard : vous surveillez le VPS lui-même avec Node Exporter, vos conteneurs avec cAdvisor, votre base PostgreSQL ou MySQL avec l'exporter dédié, et vous instrumentez vos propres applications au format Prometheus.

Tout cela sur un VPS que vous contrôlez, ce qui vous évite d'envoyer des métriques d'infrastructure sensibles vers un SaaS facturé à l'ingestion. Vous conservez l'historique aussi longtemps que votre disque le permet, vous construisez des dashboards spécifiques à votre stack, et vous définissez vos propres règles d'alerte via Alertmanager.

Avec la sortie de Prometheus 3.x (dernière version stable : v3.15.0, septembre 2026), le moteur de stockage TSDB a été optimisé pour réduire la consommation mémoire de 15 à 20 % sur des parcs de machines modestes — un avantage direct pour les VPS. Grafana 13.x (v13.2.3, fin septembre 2026) apporte un compositeur de dashboards revu et un système d'alertes unifié qui remplace l'ancienne alerte Grafana héritée. C'est l'approche à privilégier quand vous dépassez le simple « est-ce que le site répond ? » pour entrer dans l'analyse fine des tendances de charge.

Ce que cette stack apporte sur votre VPS

  • Métriques système détaillées (CPU, RAM, I/O disque, réseau) via Node Exporter v1.12.1, historisées sur le long terme.
  • Surveillance des conteneurs Docker avec cAdvisor : consommation par conteneur en temps réel.
  • Dashboards Grafana sur mesure, importables depuis une bibliothèque communautaire de milliers de modèles.
  • Alerting puissant via Alertmanager v0.34.1 : seuils, regroupement, silences et routage multi-canaux (e-mail, Slack, PagerDuty…).
  • Surveillance de la disponibilité HTTP/TCP avec Blackbox Exporter : détection de temps de réponse et d'expiration de certificat TLS.
  • Collecte de logs applicatifs avec Loki (même éditeur que Grafana) : corrélation logs/métriques dans un seul dashboard.
  • Langage de requête PromQL pour créer des indicateurs dérivés et des taux d'évolution.
  • Instrumentation de vos propres applications au format Prometheus, sans coût d'ingestion externe.

Prérequis VPS et ressources à prévoir

Cette stack est plus gourmande qu'un moniteur simple car Prometheus garde les séries temporelles en mémoire avant de les écrire sur disque. Comptez un VPS 2 vCPU et 2 à 4 Go de RAM pour superviser un à plusieurs serveurs. Ajoutez Loki et Alertmanager et visez 4 Go minimum — l'ingestion de logs est beaucoup plus légère que Elasticsearch mais exige de la RAM pour le compactage des blocs.

Le stockage est le point critique : Prometheus génère environ 1 à 2 Mo par série temporelle et par jour selon la fréquence de scrape (15 s par défaut). Pour 500 séries sur 30 jours, comptez 15 à 30 Go. Prévoyez 40 Go de SSD en partant, et ajustez --storage.tsdb.retention.time selon vos besoins.

Prérequis logiciels : Docker 26+ et Docker Compose v2, un nom de domaine pointant vers votre VPS (pour le reverse proxy HTTPS de Grafana), et ufw ou équivalent pour restreindre les ports.

Déployer la stack avec Docker Compose

  1. Créer l'arborescence du projet

    Sur votre VPS, créez un dossier dédié et la structure de fichiers :

    mkdir -p ~/monitoring/{prometheus,alertmanager,loki}
    cd ~/monitoring

    Cette organisation isole chaque configuration dans son répertoire, ce qui simplifie les mises à jour.

  2. Écrire le fichier docker-compose.yml

    Définissez les services suivants dans un fichier docker-compose.yml : prometheus (image prom/prometheus:v3.15.0), grafana (image grafana/grafana:13.2.3), node-exporter (image prom/node-exporter:v1.12.1), cadvisor (image gcr.io/cadvisor/cadvisor:latest), alertmanager (image prom/alertmanager:v0.34.1).

    Montez les fichiers de configuration en volumes bind-mount et créez des volumes nommés pour persister les données : prometheus_data, grafana_data. Exemple de bind node-exporter :

    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro

    Lancez ensuite docker compose up -d pour démarrer la stack.

  3. Configurer prometheus.yml avec tous les jobs de scrape

    Dans prometheus/prometheus.yml, déclarez les cibles dans la section scrape_configs. Quatre jobs essentiels :

    scrape_configs:
      - job_name: 'node'
        static_configs:
          - targets: ['node-exporter:9100']
      - job_name: 'cadvisor'
        static_configs:
          - targets: ['cadvisor:8080']
      - job_name: 'alertmanager'
        static_configs:
          - targets: ['alertmanager:9093']
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']

    Rechargez la configuration sans redémarrage : curl -X POST http://localhost:9090/-/reload (à condition d'avoir activé --web.enable-lifecycle).

  4. Configurer Alertmanager (alertmanager.yml)

    Créez alertmanager/alertmanager.yml. Une configuration minimale qui route les alertes vers Slack :

    route:
      receiver: 'slack-notifications'
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 4h
    receivers:
      - name: 'slack-notifications'
        slack_configs:
          - api_url: 'https://hooks.slack.com/services/VOTRE/WEBHOOK'
            channel: '#alertes-vps'
            title: '{{ .CommonAnnotations.summary }}'

    Pour l'e-mail, remplacez slack_configs par email_configs avec les champs to, from, smarthost, auth_username et auth_password.

  5. Créer les règles d'alerte Prometheus

    Dans prometheus/rules.yml, définissez les règles. Trois incontournables pour un VPS :

    groups:
      - name: vps
        rules:
          - alert: CPUElevee
            expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
            for: 5m
            annotations:
              summary: 'CPU > 85% depuis 5 min'
          - alert: MemFaible
            expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.10
            for: 5m
            annotations:
              summary: 'Mémoire disponible < 10%'
          - alert: DisqueCharge
            expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes > 0.85
            for: 10m
            annotations:
              summary: 'Disque > 85%'

    Référencez ce fichier dans prometheus.yml sous rule_files: ['rules.yml'].

  6. Connecter Grafana à Prometheus (et Loki)

    Ouvrez Grafana sur le port 3000. Identifiants par défaut : admin / admin — changez-les immédiatement.

    Ajoutez une source de données Prometheus avec l'URL http://prometheus:9090. Testez la connexion : elle doit retourner « Data source is working ».

    Si vous avez ajouté Loki dans le Compose (grafana/loki:3.3.2), ajoutez une seconde source de données Loki avec l'URL http://loki:3100. Vous pourrez ensuite corréler les pics de CPU dans un dashboard Prometheus avec les logs applicatifs dans Loki, sans changer d'outil.

  7. Exposer Grafana en HTTPS via un reverse proxy

    Grafana ne doit jamais être exposé en HTTP nu. Configurez Nginx comme reverse proxy :

    server {
      listen 443 ssl;
      server_name grafana.votre-domaine.com;
      ssl_certificate /etc/letsencrypt/live/grafana.votre-domaine.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/grafana.votre-domaine.com/privkey.pem;
      location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
      }
    }

    Bloquez les ports internes au pare-feu : ufw deny 9090, ufw deny 9093, ufw deny 3000. Seul le port 443 (Nginx) doit être ouvert publiquement.

  8. Vérifier que Prometheus scrape bien toutes les cibles

    Accédez à http://localhost:9090/targets (en SSH ou via le reverse proxy). Toutes les cibles déclarées doivent afficher l'état UP en vert. Un état DOWN indique un problème de réseau Docker (mauvais nom de service), de port ou de configuration. Corrigez avant de continuer : un Grafana connecté à un Prometheus sans données rend des dashboards vides, et rien dans l'interface ne dit explicitement pourquoi.

Importer les dashboards communautaires Grafana

Grafana propose une bibliothèque de dashboards prêts à l'emploi sur grafana.com/grafana/dashboards. Deux identifiants indispensables pour un VPS :

ID 1860 — Node Exporter Full : le dashboard de référence pour les métriques système. Il affiche en temps réel et sur la durée : charge CPU par cœur, usage mémoire (buffers/cache inclus), I/O disque par device, saturation réseau et file d'attente. Filtrable par instance, ce qui le rend utilisable pour superviser plusieurs VPS depuis un seul Grafana.

ID 893 — cAdvisor : métriques par conteneur Docker — CPU throttling, usage mémoire, I/O et erreurs réseau. Utile pour détecter un conteneur qui consomme anormalement sans ralentir le VPS dans son ensemble.

Pour importer un dashboard : dans Grafana, allez dans Dashboards → Import, entrez l'ID, sélectionnez votre source de données Prometheus et validez. Le dashboard est importé en quelques secondes, sans rien construire à la main.

Configurer les alertes avec Alertmanager

Alertmanager est le composant qui reçoit les alertes de Prometheus et décide quoi en faire : les regrouper, les silencer pendant une maintenance, les router vers différents canaux selon la sévérité.

Regroupement : plusieurs alertes déclenchées au même moment (panne réseau → CPU haut + disque inaccessible + service down) sont regroupées en une seule notification, pas trois e-mails séparés. C'est le champ group_by: ['alertname', 'instance'] dans alertmanager.yml.

Silences : avant une maintenance planifiée, créez un silence dans l'interface Alertmanager (http://localhost:9093) ou via l'API : amtool silence add --duration=2h alertname=~'.*'. Les alertes continuent d'être évaluées par Prometheus mais ne sont pas envoyées pendant la fenêtre.

Routage multi-canaux : les alertes critiques (CPU > 95%) vont vers PagerDuty ou Slack avec mention @channel, les avertissements (CPU > 85%) vers un canal de surveillance moins urgent. Configurez cela avec routes imbriqués et match_re dans alertmanager.yml.

Après chaque modification de alertmanager.yml, rechargez sans redémarrage : curl -X POST http://localhost:9093/-/reload.

Prometheus vs InfluxDB vs Zabbix : lequel choisir ?

Faites défiler le tableau

CritèrePrometheusInfluxDBZabbix
Modèle de collectePull (scrape actif)Push (agents ou API)Agent + SNMP + JMX
StockageTSDB embarqué, efficace sur VPSInfluxDB OSS ou CloudPostgreSQL / MySQL, lourd
Langage de requêtePromQL (puissant, courbe raide)Flux / InfluxQL (syntaxe SQL-like)Macros Zabbix (limité)
AlertingAlertmanager dédié, flexibleIntégré (OSS limité)Intégré, riche mais complexe
Courbe d'apprentissageModérée (PromQL)Faible (SQL-like)Élevée (UI dense, agents)
Cas d'usage idéalInfra conteneurisée, applis instrumentéesIoT, séries à haute fréquenceRéseaux d'entreprise, SNMP

Durcissement : ne jamais exposer Prometheus publiquement

Prometheus n'a pas de système d'authentification natif. Son interface web expose la liste de toutes vos cibles, vos labels d'infrastructure et vos règles d'alerte — des informations précieuses pour un attaquant qui cartographie votre infra.

Trois règles non négociables :
1. Lier Prometheus sur 127.0.0.1:9090 uniquement (--web.listen-address=127.0.0.1:9090 dans le Compose).
2. Bloquer les ports 9090, 9093, 9100 et 8080 au pare-feu (ufw deny 9090).
3. Protéger Grafana avec un mot de passe fort et désactiver le compte anonyme (GF_AUTH_ANONYMOUS_ENABLED=false en variable d'environnement).

Si vous devez accéder à l'interface Prometheus depuis l'extérieur pour le débogage, utilisez un tunnel SSH (ssh -L 9090:localhost:9090 [email protected]) plutôt qu'un reverse proxy public.

Ajouter la surveillance des conteneurs Docker avec cAdvisor

cAdvisor (Container Advisor) expose les métriques de chaque conteneur Docker au format Prometheus : usage CPU en proportion du quota alloué, consommation mémoire avec et sans cache, I/O réseau et disque, et redémarrages.

Dans le docker-compose.yml, ajoutez le service :

cadvisor:
  image: gcr.io/cadvisor/cadvisor:latest
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:ro
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
  ports:
    - '127.0.0.1:8080:8080'
  restart: unless-stopped

Puis ajoutez le job correspondant dans prometheus.yml. Le dashboard Grafana ID 893 (cAdvisor) affiche alors une vue par conteneur, avec un filtre sur le nom du service Docker — utile pour comparer la consommation entre vos applications et détecter les fuites mémoire.

Dépannage : les erreurs les plus fréquentes

Target DOWN dans Prometheus (/targets) : vérifiez d'abord le nom du service dans docker-compose.yml — Prometheus résout les noms par DNS Docker interne. Si le service s'appelle node-exporter dans le Compose, l'URL de scrape doit être node-exporter:9100, pas localhost:9100. Vérifiez aussi que tous les services sont sur le même réseau Docker (networks: monitoring).

Dashboards vides après import : la cause la plus fréquente est un job de scrape dont le label ne correspond pas à celui attendu par le dashboard. Le Node Exporter Full (ID 1860) s'attend à un job nommé node — si vous l'avez nommé node_exporter dans prometheus.yml, filtrez manuellement dans les variables du dashboard ou renommez le job.

Alertmanager ne reçoit pas les alertes : vérifiez que Prometheus peut joindre Alertmanager. Dans prometheus.yml, la section alerting doit pointer vers alertmanager:9093 (nom de service Docker). Testez avec curl http://alertmanager:9093/-/healthy depuis le conteneur Prometheus : docker compose exec prometheus curl http://alertmanager:9093/-/healthy.

Erreur « context deadline exceeded » au rechargement : Prometheus met plus de 30 s à recharger si les règles sont nombreuses ou si un target est lent. Augmentez le timeout de scrape dans prometheus.yml : scrape_timeout: 20s sous global.

Pour aller plus loin

Cette stack couvre l'essentiel du monitoring d'un VPS. Pour des besoins plus avancés :

Rétention longue durée : Prometheus stocke les données localement, idéal pour 30 à 90 jours. Pour un historique de 1 à 2 ans sans saturer le disque, branchez Thanos (objet-store S3-compatible) ou VictoriaMetrics en remplacement drop-in du stockage. VictoriaMetrics est particulièrement adapté aux VPS modestes : il consomme 5 à 10× moins de mémoire que Prometheus pour le même volume de séries.

Surveillance des endpoints HTTP : ajoutez Blackbox Exporter au Compose pour tester la disponibilité de vos URLs, le code HTTP retourné, la latence et la date d'expiration du certificat TLS — sans instrumenter l'application.

Logs avec Loki : si vous voulez corréler les métriques avec les logs applicatifs (erreurs Nginx, exceptions PHP…), ajoutez Loki + Promtail au Compose. Grafana affiche métriques et logs dans le même panneau, ce qui réduit le temps de diagnostic.

Pour toutes les options de configuration avancées, référez-vous à la documentation officielle de Grafana et à la documentation Prometheus. ServOrbit propose un template Docker préconfigurés pour lancer cette stack en un clic sur un VPS Cloud — Grafana, Prometheus, Node Exporter et Alertmanager montés et prêts, sans configuration initiale.

Déployez votre stack d'observabilité

Le VPS Cloud ServOrbit offre le CPU, la RAM et le SSD nécessaires pour faire tourner Prometheus, Grafana et leurs exporters sans goulet d'étranglement, avec un template Docker prêt à configurer.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet