Installation de Prometheus et Grafana pour le Monitoring VPS
Publié le 31 janvier 2026 à 00:07

Guide complet pour mettre en place une solution de supervision professionnelle de votre infrastructure Linux
Table des matières
- Introduction et Architecture
- Composants du Stack
- Prérequis
- Installation de Node Exporter
- Installation de Prometheus
- Installation de Grafana
- Configuration de Grafana
- Tableaux de Bord
- Alertes
- Sécurisation
- Dépannage
- Bonnes Pratiques
Introduction et Architecture
Pourquoi Superviser son Infrastructure ?
La supervision permet de :
- Détecter les problèmes avant qu'ils n'impactent les utilisateurs
- Analyser les performances et optimiser les ressources
- Planifier la capacité en anticipant les besoins futurs
- Diagnostiquer rapidement les incidents
- Générer des rapports sur l'utilisation des ressources
┌─────────────────────────────────────────────────────────────────────────────┐
│ POURQUOI LE MONITORING EST ESSENTIEL │
└─────────────────────────────────────────────────────────────────────────────┘
SANS MONITORING AVEC MONITORING
────────────── ───────────────
┌─────────────────────┐ ┌─────────────────────┐
│ SERVEUR VPS │ │ SERVEUR VPS │
│ │ │ │
│ CPU: ??? │ │ CPU: 85% ⚠️ │
│ RAM: ??? │ │ RAM: 72% │
│ Disque: ??? │ │ Disque: 45% │
│ Réseau: ??? │ │ Réseau: 150 Mbps │
│ │ │ │
└─────────────────────┘ └─────────────────────┘
│ │
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ 😰 PANIQUE ! │ │ 📊 Dashboard clair │
│ │ │ │
│ • Serveur lent ? │ │ • Alertes proactives│
│ • Pourquoi ? │ │ • Historique complet│
│ • Depuis quand ? │ │ • Diagnostic rapide│
│ • Comment réparer ?│ │ • Décisions éclairées│
└─────────────────────┘ └─────────────────────┘
Architecture Globale
┌─────────────────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE PROMETHEUS + GRAFANA │
└─────────────────────────────────────────────────────────────────────────────┘
ADMINISTRATEUR
│
│ Accès Web (port 3000)
▼
┌─────────────────────────────────────┐
│ GRAFANA │
│ (Visualisation) │
│ │
│ ┌─────────────────────────────┐ │
│ │ Tableaux de Bord │ │
│ │ • CPU, RAM, Disque │ │
│ │ • Réseau, Processus │ │
│ │ • Alertes │ │
│ └─────────────────────────────┘ │
│ │
└──────────────────┬──────────────────┘
│
│ Requêtes PromQL (port 9090)
▼
┌─────────────────────────────────────┐
│ PROMETHEUS │
│ (Collecte & Stockage) │
│ │
│ ┌─────────────────────────────┐ │
│ │ Base de données │ │
│ │ Time Series (TSDB) │ │
│ └─────────────────────────────┘ │
│ │
└──────────────────┬──────────────────┘
│
│ Scrape (pull) toutes les 15s
│
┌────────────────────────────┼────────────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ NODE EXPORTER │ │ NODE EXPORTER │ │ NODE EXPORTER │
│ (port 9100) │ │ (port 9100) │ │ (port 9100) │
│ │ │ │ │ │
│ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │
│ │ Métriques │ │ │ │ Métriques │ │ │ │ Métriques │ │
│ │ système │ │ │ │ système │ │ │ │ système │ │
│ └────────────┘ │ │ └────────────┘ │ │ └────────────┘ │
└────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ VPS #1 │ │ VPS #2 │ │ VPS #3 │
│ (Web) │ │ (BDD) │ │ (Mail) │
└─────────┘ └─────────┘ └─────────┘
Flux de Données
┌─────────────────────────────────────────────────────────────────────────────┐
│ FLUX DE DONNÉES - MODÈLE PULL │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Node │ │ Prometheus │ │ Grafana │
│ Exporter │ │ │ │ │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ │ 1. Scrape Request │
│◀──────────────────────│ (HTTP GET) │
│ │ │
│ 2. Métriques │ │
│─────────────────────▶ │ │
│ (format texte) │ │
│ │ │
│ │ 3. Stockage TSDB │
│ │─────────┐ │
│ │ │ │
│ │◀────────┘ │
│ │ │
│ │ │ 4. Requête PromQL
│ │◀──────────────────────│
│ │ │
│ │ 5. Données │
│ │─────────────────────▶ │
│ │ │
│ │ │ 6. Visualisation
│ │ │─────────┐
│ │ │ │
│ │ │◀────────┘
│ │ │
Ce cycle se répète toutes les 15 secondes (configurable)
Composants du Stack
Vue d'Ensemble des Composants
┌─────────────────────────────────────────────────────────────────────────────┐
│ COMPOSANTS DU STACK DE MONITORING │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ │
│ NODE EXPORTER │
│ ───────────── │
│ • Agent léger installé sur chaque serveur à surveiller │
│ • Expose les métriques système sur le port 9100 │
│ • Collecte : CPU, RAM, disque, réseau, processus, etc. │
│ • Format : texte Prometheus (clé=valeur) │
│ │
│ ──────────────────────────────────────────────────────────────────────── │
│ │
│ PROMETHEUS │
│ ────────── │
│ • Serveur central de collecte et stockage │
│ • Récupère (scrape) les métriques des exporters │
│ • Base de données Time Series (TSDB) intégrée │
│ • Langage de requête : PromQL │
│ • Interface web sur le port 9090 │
│ │
│ ──────────────────────────────────────────────────────────────────────── │
│ │
│ GRAFANA │
│ ─────── │
│ • Plateforme de visualisation et dashboarding │
│ • Se connecte à Prometheus comme source de données │
│ • Tableaux de bord interactifs et personnalisables │
│ • Système d'alertes intégré │
│ • Interface web sur le port 3000 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Ports Réseau
┌─────────────────────────────────────────────────────────────────────────────┐
│ PORTS UTILISÉS │
├────────┬──────────────┬─────────────────────────────────────────────────────┤
│ Port │ Service │ Description │
├────────┼──────────────┼─────────────────────────────────────────────────────┤
│ 9100 │ Node Exporter│ Métriques système (CPU, RAM, etc.) │
│ 9090 │ Prometheus │ Interface web + API de requêtes │
│ 3000 │ Grafana │ Interface de visualisation │
└────────┴──────────────┴─────────────────────────────────────────────────────┘
Prérequis
Configuration Système
┌─────────────────────────────────────────────────────────────────────────────┐
│ PRÉREQUIS SYSTÈME │
├─────────────────────────┬───────────────────────────────────────────────────┤
│ Élément │ Minimum Recommandé │
├─────────────────────────┼───────────────────────────────────────────────────┤
│ OS │ Ubuntu 20.04+ / Debian 11+ │
│ RAM (serveur monitor) │ 2 Go minimum, 4 Go recommandé │
│ Stockage │ 20 Go+ (dépend de la rétention) │
│ Accès │ root ou sudo │
│ Réseau │ Connectivité entre serveurs │
└─────────────────────────┴───────────────────────────────────────────────────┘
Architecture de Déploiement
┌─────────────────────────────────────────────────────────────────────────────┐
│ SCÉNARIOS DE DÉPLOIEMENT │
└─────────────────────────────────────────────────────────────────────────────┘
SCÉNARIO 1 : Tout sur un seul serveur SCÉNARIO 2 : Distribué
───────────────────────────────────── ──────────────────────
┌─────────────────────────────────┐ ┌──────────────────────────────┐
│ SERVEUR UNIQUE │ │ SERVEUR MONITORING │
│ │ │ │
│ ┌───────────┐ ┌───────────┐ │ │ ┌───────────┐ ┌───────────┐ │
│ │ Prometheus│ │ Grafana │ │ │ │ Prometheus│ │ Grafana │ │
│ └───────────┘ └───────────┘ │ │ └───────────┘ └───────────┘ │
│ │ │ │ │ │ │
│ └──────┬──────┘ │ └────────┼──────────────────────┘
│ │ │ │
│ ┌──────┴──────┐ │ │ Scrape via réseau
│ │ Node Export │ │ ┌────────┴────────┐
│ └─────────────┘ │ │ │
│ │ ▼ ▼
│ + Applications à monitorer │ ┌───────────┐ ┌───────────┐
│ │ │ VPS #1 │ │ VPS #2 │
└─────────────────────────────────┘ │ Node Exp │ │ Node Exp │
└───────────┘ └───────────┘
✅ Simple à mettre en place ✅ Scalable
✅ Pas de latence réseau ✅ Séparation des responsabilités
❌ Point unique de défaillance ✅ Monitoring reste up si un VPS down
Installation de Node Exporter
Téléchargement et Installation
# Créer un utilisateur système dédié
sudo useradd --no-create-home --shell /bin/false node_exporter
# Télécharger la dernière version
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
# Extraire l'archive
tar xvfz node_exporter-1.8.2.linux-amd64.tar.gz
# Copier le binaire
sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
# Nettoyer
rm -rf node_exporter-1.8.2.linux-amd64*
Création du Service Systemd
sudo nano /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Documentation=https://prometheus.io/docs/guides/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
[Install]
WantedBy=multi-user.target
Démarrage du Service
# Recharger systemd
sudo systemctl daemon-reload
# Démarrer le service
sudo systemctl start node_exporter
# Activer au démarrage
sudo systemctl enable node_exporter
# Vérifier le statut
sudo systemctl status node_exporter
Vérification
# Tester localement
curl http://localhost:9100/metrics | head -20
# Vérifier depuis le réseau
curl http://IP_DU_SERVEUR:9100/metrics | head -20
┌─────────────────────────────────────────────────────────────────────────────┐
│ EXEMPLE DE SORTIE NODE EXPORTER │
└─────────────────────────────────────────────────────────────────────────────┘
# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 123456.78
node_cpu_seconds_total{cpu="0",mode="system"} 1234.56
node_cpu_seconds_total{cpu="0",mode="user"} 5678.90
# HELP node_memory_MemTotal_bytes Memory information field MemTotal_bytes.
# TYPE node_memory_MemTotal_bytes gauge
node_memory_MemTotal_bytes 4.123456789e+09
# HELP node_filesystem_size_bytes Filesystem size in bytes.
# TYPE node_filesystem_size_bytes gauge
node_filesystem_size_bytes{device="/dev/sda1",mountpoint="/"} 5.0e+10
Installation de Prometheus
Structure des Fichiers
┌─────────────────────────────────────────────────────────────────────────────┐
│ STRUCTURE DES FICHIERS PROMETHEUS │
└─────────────────────────────────────────────────────────────────────────────┘
/etc/prometheus/
├── prometheus.yml ← Configuration principale
├── consoles/ ← Templates console web
└── console_libraries/ ← Bibliothèques console
/var/lib/prometheus/ ← Données TSDB (métriques stockées)
/usr/local/bin/
├── prometheus ← Binaire principal
└── promtool ← Outil de validation config
Téléchargement et Installation
# Créer les utilisateurs et groupes
sudo useradd --no-create-home --shell /bin/false prometheus
# Créer les répertoires
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
# Télécharger Prometheus
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
# Extraire
tar xvfz prometheus-2.54.1.linux-amd64.tar.gz
cd prometheus-2.54.1.linux-amd64
# Copier les binaires
sudo cp prometheus /usr/local/bin/
sudo cp promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
# Copier les fichiers de configuration
sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
# Nettoyer
cd /tmp
rm -rf prometheus-2.54.1.linux-amd64*
Configuration de Prometheus
sudo nano /etc/prometheus/prometheus.yml
# Configuration globale
global:
scrape_interval: 15s # Fréquence de collecte
evaluation_interval: 15s # Fréquence d'évaluation des règles
external_labels:
monitor: 'vps-monitoring'
# Configuration des alertes (optionnel)
alerting:
alertmanagers:
- static_configs:
- targets: []
# Fichiers de règles (optionnel)
rule_files:
# - "alert_rules.yml"
# Configuration des cibles à scraper
scrape_configs:
# Prometheus lui-même
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
labels:
instance: 'prometheus-server'
# Serveur local
- job_name: 'node-local'
static_configs:
- targets: ['localhost:9100']
labels:
instance: 'monitoring-server'
environment: 'production'
# Serveurs distants (ajouter vos VPS ici)
- job_name: 'vps-servers'
static_configs:
- targets: ['192.168.1.10:9100']
labels:
instance: 'vps-web'
environment: 'production'
- targets: ['192.168.1.11:9100']
labels:
instance: 'vps-database'
environment: 'production'
- targets: ['192.168.1.12:9100']
labels:
instance: 'vps-mail'
environment: 'production'
┌─────────────────────────────────────────────────────────────────────────────┐
│ SCHÉMA DE CONFIGURATION PROMETHEUS │
└─────────────────────────────────────────────────────────────────────────────┘
prometheus.yml
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ global │ │scrape_ │ │alerting │
│ │ │configs │ │ │
└─────────┘ └────┬────┘ └─────────┘
│ │
│ │
┌────┴────┐ ┌──────────┴──────────┐
│scrape_ │ │ │
│interval │ │ job_name: X │
│ 15s │ │ targets: [...] │
│ │ │ labels: {...} │
└─────────┘ │ │
└─────────────────────┘
Création du Service Systemd
sudo nano /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
Documentation=https://prometheus.io/docs/introduction/overview/
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/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--storage.tsdb.retention.time=30d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
Démarrage du Service
# Valider la configuration
promtool check config /etc/prometheus/prometheus.yml
# Recharger systemd
sudo systemctl daemon-reload
# Démarrer Prometheus
sudo systemctl start prometheus
# Activer au démarrage
sudo systemctl enable prometheus
# Vérifier le statut
sudo systemctl status prometheus
Vérification
# Accéder à l'interface web
# Ouvrir dans un navigateur : http://IP_SERVEUR:9090
# Vérifier les targets
# Aller sur : http://IP_SERVEUR:9090/targets
┌─────────────────────────────────────────────────────────────────────────────┐
│ INTERFACE PROMETHEUS - TARGETS │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│ Prometheus Status │ Targets │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ node-local (1/1 up) │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Endpoint State Labels Last Scrape │ │
│ │ localhost:9100 UP ✅ instance="..." 15s ago │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ vps-servers (3/3 up) │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Endpoint State Labels Last Scrape │ │
│ │ 192.168.1.10:9100 UP ✅ instance="web" 12s ago │ │
│ │ 192.168.1.11:9100 UP ✅ instance="db" 14s ago │ │
│ │ 192.168.1.12:9100 UP ✅ instance="mail" 10s ago │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Installation de Grafana
Installation via Repository APT
# Installer les prérequis
sudo apt-get install -y apt-transport-https software-properties-common wget
# Ajouter la clé GPG
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
# Ajouter le repository
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
# Mettre à jour et installer
sudo apt-get update
sudo apt-get install grafana -y
Démarrage du Service
# Démarrer Grafana
sudo systemctl start grafana-server
# Activer au démarrage
sudo systemctl enable grafana-server
# Vérifier le statut
sudo systemctl status grafana-server
Premier Accès
┌─────────────────────────────────────────────────────────────────────────────┐
│ PREMIER ACCÈS À GRAFANA │
└─────────────────────────────────────────────────────────────────────────────┘
1. Ouvrir dans un navigateur : http://IP_SERVEUR:3000
2. Identifiants par défaut :
┌──────────────────────────────┐
│ Username: admin │
│ Password: admin │
└──────────────────────────────┘
3. Grafana demande de changer le mot de passe
┌─────────────────────────────────────────────────────────────────────┐
│ │
│ Welcome to Grafana │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Email or username: [admin________________] │ │
│ │ │ │
│ │ Password: [••••_________________] │ │
│ │ │ │
│ │ [ Log in ] │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Configuration de Grafana
Ajouter Prometheus comme Source de Données
┌─────────────────────────────────────────────────────────────────────────────┐
│ CONNEXION GRAFANA → PROMETHEUS │
└─────────────────────────────────────────────────────────────────────────────┘
Étape 1: Menu latéral → Connections → Data Sources
Étape 2: Cliquer sur "Add data source"
Étape 3: Sélectionner "Prometheus"
┌─────────────────────────────────────────────────────────────────────┐
│ Data Sources / Prometheus │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Name: [ Prometheus_________________________ ] │
│ │
│ HTTP │
│ ───── │
│ URL: [ http://localhost:9090_____________ ] │
│ │
│ Auth │
│ ───── │
│ [ ] Basic auth │
│ [ ] With Credentials │
│ │
│ [ Save & Test ] │
│ │
│ ✅ Data source is working │
│ │
└─────────────────────────────────────────────────────────────────────┘
Si Prometheus et Grafana sont sur le même serveur : http://localhost:9090
Si sur des serveurs différents : http://IP_PROMETHEUS:9090
Schéma de Connexion
┌─────────────────────────────────────────────────────────────────────────────┐
│ FLUX DE CONNEXION │
└─────────────────────────────────────────────────────────────────────────────┘
┌───────────────┐ ┌───────────────┐
│ │ HTTP Request │ │
│ GRAFANA │─────────────────────▶│ PROMETHEUS │
│ (port 3000) │ │ (port 9090) │
│ │ PromQL Query │ │
│ │ "node_cpu_*" │ │
│ │◀─────────────────────│ │
│ │ JSON Response │ │
└───────────────┘ └───────────────┘
│
│ Rendu graphique
▼
┌───────────────────────────────────────────────────────────────────┐
│ │
│ 📊 Dashboard avec graphiques, jauges, tableaux │
│ │
└───────────────────────────────────────────────────────────────────┘
Tableaux de Bord
Importer un Dashboard Pré-configuré
Le dashboard Node Exporter Full (ID: 1860) est très complet pour monitorer des serveurs Linux.
┌─────────────────────────────────────────────────────────────────────────────┐
│ IMPORTER UN DASHBOARD │
└─────────────────────────────────────────────────────────────────────────────┘
Étape 1: Menu latéral → Dashboards → New → Import
Étape 2: Entrer l'ID du dashboard
┌─────────────────────────────────────────────────────────────────────┐
│ Import dashboard │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Import via grafana.com │
│ │
│ Dashboard ID: [ 1860________________________________ ] [ Load ] │
│ │
│ ─────────────────────────────────────────────────────────────── │
│ │
│ OR │
│ │
│ Import via dashboard JSON model │
│ [ Upload JSON file ] │
│ │
└─────────────────────────────────────────────────────────────────────┘
Étape 3: Sélectionner la source de données Prometheus
Étape 4: Cliquer sur "Import"
Dashboards Recommandés
┌─────────────────────────────────────────────────────────────────────────────┐
│ DASHBOARDS POPULAIRES │
├───────────┬─────────────────────────────────────────────────────────────────┤
│ ID │ Description │
├───────────┼─────────────────────────────────────────────────────────────────┤
│ 1860 │ Node Exporter Full - Très complet, métriques détaillées │
│ 11074 │ Node Exporter - Vue simplifiée et claire │
│ 13978 │ Node Exporter Quickstart - Dashboard minimaliste │
│ 12633 │ Linux Server - Métriques essentielles │
│ 14513 │ Docker Container Monitoring - Pour conteneurs │
└───────────┴─────────────────────────────────────────────────────────────────┘
Aperçu d'un Dashboard
┌─────────────────────────────────────────────────────────────────────────────┐
│ DASHBOARD NODE EXPORTER FULL │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ Node Exporter Full Host: [vps-web ▼] Time: [Last 1 hour ▼] │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ CPU Usage │ │ RAM Usage │ │ Disk Usage │ │ Uptime │ │
│ │ 23% │ │ 67% │ │ 45% │ │ 15 days │ │
│ │ ████░░ │ │ ██████░ │ │ ████░░░ │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ CPU Usage Over Time │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ ^ │ │
│ │ 100%│ │ │
│ │ 80%│ ╱╲ │ │
│ │ 60%│ ╱╲ ╱ ╲ ╱╲ │ │
│ │ 40%│ ╱╲ ╱ ╲ ╱ ╲ ╱ ╲ │ │
│ │ 20%│ ╱ ╲ ╱ ╲╱ ╲╱ ╲────── │ │
│ │ 0%│╱ │ │
│ │ └───────────────────────────────────────────────────────▶ Time │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ Memory Usage │ Network Traffic │
│ ┌─────────────────────────────┐ │ ┌─────────────────────────────────┐ │
│ │ Total: 8 GB │ │ │ In: 125 Mbps ↓ │ │
│ │ Used: 5.4 GB (67%) │ │ │ Out: 45 Mbps ↑ │ │
│ │ Free: 2.6 GB │ │ │ │ │
│ │ Cached: 1.2 GB │ │ │ ╱╲ ╱╲ ╱╲ │ │
│ └─────────────────────────────┘ │ │ ╱ ╲ ╱ ╲ ╱ ╲ │ │
│ │ └─────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
Alertes
Configurer des Alertes dans Grafana
┌─────────────────────────────────────────────────────────────────────────────┐
│ SYSTÈME D'ALERTES │
└─────────────────────────────────────────────────────────────────────────────┘
┌───────────────────────────────────┐
│ PROMETHEUS │
│ │
│ Métrique: node_cpu_usage = 95% │
│ │
└───────────────┬───────────────────┘
│
▼
┌───────────────────────────────────┐
│ GRAFANA │
│ │
│ Règle: CPU > 90% pendant 5min │
│ État: 🔴 FIRING │
│ │
└───────────────┬───────────────────┘
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Email │ │ Slack │ │ Discord │
│ 📧 │ │ 💬 │ │ 🎮 │
└───────────┘ └───────────┘ └───────────┘
Exemples de Règles d'Alerte
# Exemples de conditions d'alerte courantes
# CPU élevé
Condition: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.1
Seuil: CPU utilisé > 90% pendant 5 minutes
# Mémoire insuffisante
Condition: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.1
Seuil: Moins de 10% de RAM disponible
# Disque plein
Condition: node_filesystem_avail_bytes / node_filesystem_size_bytes < 0.15
Seuil: Moins de 15% d'espace disque
# Serveur down
Condition: up == 0
Seuil: Target non joignable
Sécurisation
Firewall UFW
# Autoriser uniquement les ports nécessaires
sudo ufw allow 22/tcp # SSH
sudo ufw allow 3000/tcp # Grafana (restreindre si possible)
sudo ufw allow 9090/tcp # Prometheus (restreindre au réseau interne)
sudo ufw allow 9100/tcp # Node Exporter (restreindre au serveur Prometheus)
# Activer le firewall
sudo ufw enable
Authentification Prometheus (Basic Auth)
# Installer apache2-utils pour htpasswd
sudo apt install apache2-utils -y
# Créer un fichier de mot de passe
sudo htpasswd -c /etc/prometheus/.htpasswd admin
# Éditer la configuration Prometheus
sudo nano /etc/prometheus/web.yml
# /etc/prometheus/web.yml
basic_auth_users:
admin: $2y$12$... # Hash généré par htpasswd
# Modifier le service pour utiliser web.yml
# Ajouter --web.config.file=/etc/prometheus/web.yml à ExecStart
Reverse Proxy avec Nginx (Recommandé)
┌─────────────────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE SÉCURISÉE AVEC NGINX │
└─────────────────────────────────────────────────────────────────────────────┘
INTERNET
│
│ HTTPS (443)
▼
┌────────────────────────┐
│ NGINX │
│ (Reverse Proxy) │
│ + SSL/TLS │
│ + Basic Auth │
└───────────┬────────────┘
│
┌─────────────────┴─────────────────┐
│ localhost:3000 localhost:9090│
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ GRAFANA │ │ PROMETHEUS │
│ (non exposé) │ │ (non exposé) │
└──────────────────┘ └──────────────────┘
Dépannage
Commandes de Diagnostic
# Vérifier les services
sudo systemctl status node_exporter
sudo systemctl status prometheus
sudo systemctl status grafana-server
# Voir les logs
sudo journalctl -u node_exporter -f
sudo journalctl -u prometheus -f
sudo journalctl -u grafana-server -f
# Tester les endpoints
curl http://localhost:9100/metrics | head
curl http://localhost:9090/api/v1/targets
curl http://localhost:3000/api/health
# Valider la config Prometheus
promtool check config /etc/prometheus/prometheus.yml
Problèmes Courants
┌─────────────────────────────────────────────────────────────────────────────┐
│ PROBLÈMES ET SOLUTIONS │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ❌ Target DOWN dans Prometheus │
│ ─────────────────────────────── │
│ • Vérifier que node_exporter tourne : systemctl status node_exporter │
│ • Vérifier le firewall : ufw status │
│ • Tester la connectivité : curl http://IP:9100/metrics │
│ │
│ ❌ Grafana ne se connecte pas à Prometheus │
│ ────────────────────────────────────────── │
│ • Vérifier l'URL (localhost vs IP) │
│ • Vérifier que Prometheus répond : curl http://localhost:9090 │
│ • Vérifier les logs Grafana │
│ │
│ ❌ Pas de données dans le dashboard │
│ ─────────────────────────────────── │
│ • Vérifier le nom du job dans prometheus.yml │
│ • Vérifier que les métriques existent dans Prometheus │
│ • Tester une requête simple dans Prometheus : up │
│ │
│ ❌ Erreur "context deadline exceeded" │
│ ───────────────────────────────────── │
│ • Augmenter le timeout dans la datasource Grafana │
│ • Vérifier la charge du serveur Prometheus │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Bonnes Pratiques
Checklist de Déploiement
┌─────────────────────────────────────────────────────────────────────────────┐
│ CHECKLIST │
└─────────────────────────────────────────────────────────────────────────────┘
[ ] Node Exporter installé sur tous les serveurs à monitorer
[ ] Prometheus configuré avec tous les targets
[ ] Tous les targets en état UP dans Prometheus
[ ] Grafana connecté à Prometheus (datasource OK)
[ ] Dashboard importé et fonctionnel
[ ] Alertes configurées pour les métriques critiques
[ ] Firewall configuré (ports restreints)
[ ] Mot de passe Grafana changé (pas admin/admin)
[ ] Rétention des données configurée
[ ] Sauvegardes planifiées (config + dashboards)
Recommandations
┌─────────────────────────────────────────────────────────────────────────────┐
│ BONNES PRATIQUES │
└─────────────────────────────────────────────────────────────────────────────┘
✅ Utiliser des labels cohérents (environment, instance, job)
✅ Configurer une rétention adaptée (30 jours par défaut)
✅ Sécuriser l'accès avec reverse proxy + SSL
✅ Sauvegarder régulièrement les dashboards (export JSON)
✅ Documenter les alertes et les seuils
✅ Tester les alertes régulièrement
✅ Monitorer le serveur de monitoring lui-même
✅ Utiliser des dashboards existants comme base
Récapitulatif des Commandes
┌─────────────────────────────────────────────────────────────────────────────┐
│ AIDE-MÉMOIRE │
└─────────────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────┬────────────────────────────────────┐
│ Commande │ Description │
├────────────────────────────────────────┼────────────────────────────────────┤
│ systemctl status node_exporter │ État Node Exporter │
│ systemctl status prometheus │ État Prometheus │
│ systemctl status grafana-server │ État Grafana │
├────────────────────────────────────────┼────────────────────────────────────┤
│ systemctl restart prometheus │ Redémarrer Prometheus │
│ systemctl restart grafana-server │ Redémarrer Grafana │
├────────────────────────────────────────┼────────────────────────────────────┤
│ curl localhost:9100/metrics │ Tester Node Exporter │
│ curl localhost:9090/api/v1/targets │ Voir les targets Prometheus │
├────────────────────────────────────────┼────────────────────────────────────┤
│ promtool check config <file> │ Valider config Prometheus │
│ journalctl -u prometheus -f │ Logs Prometheus en direct │
└────────────────────────────────────────┴────────────────────────────────────┘


















