Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques

02 mai 2026 — par admin_libra

La supervision est une composante fondamentale de toute infrastructure Linux sérieuse. Savoir ce qui se passe sur vos serveurs en temps réel — charge CPU, utilisation mémoire, I/O disque, latence réseau — vous permet d’anticiper les incidents avant qu’ils n’impactent les utilisateurs. Prometheus et Grafana forment depuis plusieurs années le duo de référence dans l’écosystème open source pour la collecte de métriques et leur visualisation.

Prometheus est un système de monitoring pull-based : il interroge régulièrement des exporters qui exposent des métriques au format texte sur une URL HTTP. Le Node Exporter, maintenu par le projet Prometheus, expose les métriques système d’une machine Linux (CPU, mémoire, disque, réseau). Grafana se connecte ensuite à Prometheus comme source de données et permet de créer des tableaux de bord interactifs.

Ce guide couvre l’installation complète de Prometheus 3.11.3 et Grafana 13.0.1 sur Debian 12 (Bookworm), la configuration du Node Exporter 1.11.1 pour la collecte de métriques système, et la mise en place de dashboards prêts à l’emploi. Toutes les étapes utilisent des services systemd pour une gestion propre et un démarrage automatique.

Architecture et prérequis

La stack de supervision se compose de trois éléments :

  • Prometheus (port 9090) : base de données de séries temporelles et moteur de scraping
  • Node Exporter (port 9100) : collecte les métriques système de la machine locale
  • Grafana (port 3000) : interface de visualisation et de dashboarding

Prérequis :

  • Debian 12 (Bookworm) avec accès root ou sudo
  • Au moins 1 Go de RAM et 10 Go d’espace disque disponible
  • Accès à Internet pour télécharger les binaires

Installation de Prometheus

Création de l’utilisateur système

Prometheus ne doit pas tourner en root. On crée un utilisateur dédié sans shell ni répertoire home :

sudo useradd --no-create-home --shell /bin/false prometheus

On crée ensuite les répertoires nécessaires :

sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus

Téléchargement et installation des binaires

La version stable actuelle est 3.11.3 (sortie le 27 avril 2026). On télécharge les binaires depuis le dépôt officiel GitHub :

# Téléchargement de l'archive
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v3.11.3/prometheus-3.11.3.linux-amd64.tar.gz

# Vérification du checksum (recommandé)
wget https://github.com/prometheus/prometheus/releases/download/v3.11.3/sha256sums.txt
sha256sum --check --ignore-missing sha256sums.txt

# Extraction
tar xvf prometheus-3.11.3.linux-amd64.tar.gz
cd prometheus-3.11.3.linux-amd64/

# Copie des binaires
sudo cp prometheus promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

# Copie des fichiers de configuration
sudo cp -r consoles/ console_libraries/ /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus/consoles /etc/prometheus/console_libraries

Fichier de configuration prometheus.yml

On crée la configuration minimale qui scrape Prometheus lui-même et le Node Exporter local :

sudo tee /etc/prometheus/prometheus.yml << 'EOF'
global:
  scrape_interval: 15s       # Fréquence de collecte des métriques
  evaluation_interval: 15s   # Fréquence d'évaluation des règles d'alerte

rule_files: []               # Fichiers de règles d'alerte (à compléter)

scrape_configs:
  # Prometheus se monitore lui-même
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  # Node Exporter — métriques système
  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]
EOF

sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

Service systemd pour Prometheus

sudo tee /etc/systemd/system/prometheus.service << 'EOF'
[Unit]
Description=Prometheus Monitoring System
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus 
    --config.file=/etc/prometheus/prometheus.yml 
    --storage.tsdb.path=/var/lib/prometheus 
    --storage.tsdb.retention.time=30d 
    --web.console.templates=/etc/prometheus/consoles 
    --web.console.libraries=/etc/prometheus/console_libraries 
    --web.listen-address=127.0.0.1:9090
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo systemctl status prometheus

Sécurité : L’option --web.listen-address=127.0.0.1:9090 restreint l’écoute à localhost. Prometheus n’intègre pas d’authentification native — ne jamais l’exposer directement sur une interface publique.

Installation du Node Exporter

Le Node Exporter collecte les métriques système (CPU, mémoire, disque, réseau, filesystem…). La version actuelle est 1.11.1. Si vous souhaitez comparer avec d’autres approches d’observabilité bas niveau, lisez notre article sur eBPF et bpftrace qui couvre le traçage kernel en temps réel.

# Création de l'utilisateur dédié
sudo useradd --no-create-home --shell /bin/false node_exporter

# Téléchargement
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.11.1/node_exporter-1.11.1.linux-amd64.tar.gz
tar xvf node_exporter-1.11.1.linux-amd64.tar.gz

# Installation du binaire
sudo cp node_exporter-1.11.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Service systemd avec les collecteurs systemd et processes activés :

sudo tee /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter 
    --collector.systemd 
    --collector.processes
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter

# Vérification — doit retourner des métriques au format texte
curl -s http://localhost:9100/metrics | head -20

Installation de Grafana

Grafana 13.0.1 est disponible via le dépôt APT officiel de Grafana Labs. C’est la méthode recommandée car elle permet les mises à jour automatiques via apt-get upgrade.

# Dépendances
sudo apt-get install -y apt-transport-https wget gnupg

# Import de la clé GPG du dépôt Grafana
sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc

# Ajout du dépôt stable
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" 
  | sudo tee /etc/apt/sources.list.d/grafana.list

# Installation de Grafana OSS
sudo apt-get update
sudo apt-get install -y grafana

# Activation et démarrage
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server
sudo systemctl status grafana-server

Grafana écoute par défaut sur le port 3000. Accédez à http://<IP_SERVEUR>:3000 depuis votre navigateur. Les identifiants par défaut sont admin / admin — Grafana impose un changement de mot de passe à la première connexion.

Configuration des dashboards Grafana

Ajout de Prometheus comme source de données

Depuis l’interface Grafana :

  1. Menu latéral → ConnectionsData sources
  2. Cliquer Add new data source → choisir Prometheus
  3. URL : http://localhost:9090
  4. Scrape interval : 15s (doit correspondre au scrape_interval dans prometheus.yml)
  5. Cliquer Save & test — un message vert confirme la connexion

Import du dashboard Node Exporter Full

La communauté Grafana maintient un dashboard complet pour Node Exporter (ID 1860) qui affiche CPU, mémoire, swap, disque, réseau et système de fichiers :

  1. Menu latéral → DashboardsNewImport
  2. Entrer l’ID 1860 dans le champ « Import via grafana.com » → Load
  3. Sélectionner la datasource Prometheus créée précédemment
  4. Cliquer Import

Le dashboard s’affiche immédiatement avec des métriques organisées par catégorie. Pour surveiller plusieurs machines, ajoutez les cibles dans prometheus.yml :

# Ajout de plusieurs hôtes dans /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: "node_exporter"
    static_configs:
      - targets:
          - "localhost:9100"
          - "192.168.1.10:9100"   # serveur-web-1
          - "192.168.1.11:9100"   # serveur-db-1

# Rechargement à chaud (sans redémarrage)
sudo kill -HUP $(pidof prometheus)
# ou via l'API HTTP
curl -X POST http://localhost:9090/-/reload

Requêtes PromQL essentielles

PromQL est le langage de requête de Prometheus. Ces expressions s’utilisent directement dans Grafana pour créer des panneaux personnalisés :

# Charge CPU globale en pourcentage (moyenne sur 5 minutes)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# Mémoire disponible en octets
node_memory_MemAvailable_bytes

# Utilisation disque en pourcentage (hors tmpfs)
(node_filesystem_size_bytes{fstype!="tmpfs"} - node_filesystem_free_bytes{fstype!="tmpfs"})
  / node_filesystem_size_bytes{fstype!="tmpfs"} * 100

# Bande passante réseau entrante (octets/s)
rate(node_network_receive_bytes_total[5m])

# Nombre de processus en cours d'exécution
node_procs_running

Sécurisation et bonnes pratiques

Isolation réseau avec nftables

Prometheus et Node Exporter ne proposent pas d’authentification native. Restreignez leur accès au niveau du pare-feu — consultez notre guide sur nftables et iptables pour la gestion complète des règles.

# Bloquer l'accès externe aux ports Prometheus et Node Exporter
sudo nft add rule inet filter input tcp dport { 9090, 9100 } ip saddr != 127.0.0.1 drop

# Autoriser uniquement une IP de supervision spécifique (ex: serveur Grafana distant)
sudo nft add rule inet filter input tcp dport { 9090, 9100 } ip saddr 192.168.1.50 accept
sudo nft add rule inet filter input tcp dport { 9090, 9100 } drop

Reverse proxy Nginx pour Grafana

Pour exposer Grafana depuis Internet avec HTTPS, utilisez un reverse proxy :

# /etc/nginx/sites-available/grafana
server {
    listen 443 ssl;
    server_name grafana.exemple.com;

    ssl_certificate     /etc/letsencrypt/live/grafana.exemple.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/grafana.exemple.com/privkey.pem;

    location / {
        proxy_pass         http://127.0.0.1:3000;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Gestion de la rétention des données

Par défaut, Prometheus conserve 15 jours de données. Le paramètre --storage.tsdb.retention.time=30d dans le service systemd étend cette rétention. Surveillez l’espace disque :

# Taille occupée par les données Prometheus
du -sh /var/lib/prometheus/

# Statistiques TSDB via l'API
curl -s http://localhost:9090/api/v1/status/tsdb | python3 -m json.tool

# Mise à jour de Grafana (via APT)
sudo apt-get update && sudo apt-get upgrade grafana

# Mise à jour de Prometheus (binaire manuel)
sudo systemctl stop prometheus
# → remplacer /usr/local/bin/prometheus par la nouvelle version
sudo systemctl start prometheus
prometheus --version

À lire également

Références

Index complet

Tous les articles (48)

Date Article Tags
30/06/2026 PHP : gérer plusieurs versions PHP-FPM avec les dépôts Sury sur Debian/Ubuntu administration apache debian 22/06/2026 OS : Cycle de vie LTS et mise à jour des distributions — apt dist-upgrade et do-release-upgrade sous Debian / Ubuntu apt cycle-de-vie debian 17/06/2026 APT : Guide complet de la gestion des paquets sous Debian et Ubuntu administration apt debian 17/06/2026 SHELL : Guide des commandes les plus usuelles et commandes couteau suisse awk bash commandes 17/06/2026 SUDO : implémentation et sécurisation des accès sur Debian/Ubuntu administration audit authentification 17/06/2026 ProFTPd : authentification MySQL centralisée, FTPs (SSL) et SFTP sur Debian/Ubuntu authentification debian ftp 09/06/2026 Fail2ban — configuration avancée et filtres personnalisés bruteforce debian fail2ban 07/06/2026 Docker : comment récupérer de l'espace disque cache conteneurs debian 07/06/2026 Graylog 7 — Centralisation et analyse de logs : l'alternative à ELK sur Debian/Ubuntu centralisation debian elk 07/06/2026 OpenZFS : tiering avec L2ARC et SLOG pour les workloads mixtes cache l2arc nvme 07/06/2026 Scripting Bash avancé — pièges, bonnes pratiques et optimisation automatisation bash bonnes-pratiques 07/06/2026 AppArmor sur Debian/Ubuntu : profils, modes et confinement applicatif apparmor audit confinement 07/06/2026 Durcissement SSH — au-delà des clés publiques 2fa authentification cryptographie 27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs