Table des matières

  1. Introduction et Architecture
  2. Composants du Stack
  3. Prérequis
  4. Installation de Node Exporter
  5. Installation de Prometheus
  6. Installation de Grafana
  7. Configuration de Grafana
  8. Tableaux de Bord
  9. Alertes
  10. Sécurisation
  11. Dépannage
  12. 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         │
└────────────────────────────────────────┴────────────────────────────────────┘