TP 1 — Rendre la vue au SOC : superviser les conteneurs de PAF
Auteur : Thibaut Fontaine
Institution : Université de la Réunion
Date : 2025
Table des matières
Section intitulée « Table des matières »- Objectifs et Contexte
- Prérequis
- Étape 1 : Création du Dashboard et des Variables
- Étape 2 : Création des Indicateurs Clés (KPIs)
- Étape 3 : Création des Graphiques d’Historique
- Dépannage
Objectifs et Contexte
Section intitulée « Objectifs et Contexte »📡 Poste SOC · La Réunion — vous supervisez Port-aux-Français (Kerguelen), à ~3 300 km. Liaison SATCOM nominale.
🎯 Objectif métier — superviser en temps réel les conteneurs d’une base TAAF et repérer une dérive avant qu’un service ne lâche.
Contexte
Section intitulée « Contexte »Un service tombe à Kerguelen. Vous l’apprenez quand un chercheur trouve porte close — six heures et un fuseau horaire plus tard. Aujourd’hui, on inverse l’ordre : depuis le SOC de La Réunion, vous le verrez dériver avant qu’il ne lâche.
Concrètement, vous montez le premier tableau de bord de supervision des conteneurs Docker de la station (bases de données, applications). C’est la baseline : sans elle, rien d’anormal ne se voit — ni une panne, ni un intrus. Première brique du fil rouge : Voir, avant de Détecter.
🔴 Au fil de l’enquête
Section intitulée « 🔴 Au fil de l’enquête »Le jour J à 08:00Z, l’intrusion démarrera par un simple phishing — indétectable sur une infra qu’on ne regarde pas. Ce TP n’attrape pas l’attaquant : il pose les yeux. La baseline que vous construisez ici est exactement ce qui rendra l’anormal visible aux Actes 2 et 3.
Objectifs Pédagogiques
Section intitulée « Objectifs Pédagogiques »- Mettre en place et configurer des variables de dashboard pour le filtrage dynamique
- Créer des panneaux avec des requêtes PromQL pour visualiser l’état et la performance des conteneurs
- Maîtriser les métriques clés de cAdvisor (
container_cpu...,container_memory..., etc.) - Apprendre à déboguer des problèmes courants de visualisation (“No data”, légendes incorrectes)
- Configurer les options visuelles (unités, légendes, styles, “stacking”) pour une lisibilité optimale
Architecture du TP1
Section intitulée « Architecture du TP1 »graph LR subgraph "Conteneurs Docker" PG[postgres-af] NC[nextcloud-taaf] ADM[adminer] end subgraph "Stack Monitoring" CAD[cAdvisor
Port: 8081] PROM[Prometheus
Port: 9090] GRAF[Grafana
Port: 3000] end PG -.->|surveille|CAD NC -.->|surveille|CAD ADM -.->|surveille|CAD CAD -->|métriques|PROM PROM -->|datasource|GRAF U[Vous] -->|créez dashboard|GRAF classDef infra fill:#ffcc99,stroke:#333,stroke-width:2px classDef monitoring fill:#99ff99,stroke:#333,stroke-width:2px classDef user fill:#99ccff,stroke:#333,stroke-width:2px class PG,NC,ADM infra class CAD,PROM,GRAF monitoring class U user
Dans ce TP, vous allez :
- Utiliser cAdvisor pour collecter les métriques des conteneurs
- Interroger Prometheus avec des requêtes PromQL
- Créer un dashboard Grafana pour visualiser les métriques en temps réel
Prérequis
Section intitulée « Prérequis »- Une instance Grafana fonctionnelle (démarrez la stack avec
docker compose up -d) - Prometheus doit être démarré et accessible, collectant les métriques d’un exporteur cAdvisor supervisant plusieurs conteneurs (ex:
postgres-af,nextcloud,adminer,prometheus, etc.)
Étape 0 : Configuration de la Source de Données Prometheus dans Grafana
Section intitulée « Étape 0 : Configuration de la Source de Données Prometheus dans Grafana »Avant de créer votre dashboard, vous devez configurer la connexion à Prometheus dans Grafana.
0.1 Accéder à Grafana
Section intitulée « 0.1 Accéder à Grafana »- Ouvrez votre navigateur et accédez à http://localhost:3000
- Connectez-vous avec les identifiants par défaut :
- Username :
admin - Password :
AdminTAAF2024!
- Username :
0.2 Ajouter la Source de Données Prometheus
Section intitulée « 0.2 Ajouter la Source de Données Prometheus »- Dans le menu latéral gauche, cliquez sur ⚙️ Configuration → Data Sources
- Cliquez sur le bouton Add data source
- Recherchez et sélectionnez Prometheus dans la liste
0.3 Configuration de la Connexion
Section intitulée « 0.3 Configuration de la Connexion »Configuration datasource Prometheus dans Grafana :
| Paramètre | Valeur | Description |
|---|---|---|
| Name | Prometheus TAAF | Nom de la source de données |
| URL | http://prometheus:9090 | Nom du service Docker |
| Access | Server (default) | Accès via le serveur Grafana |
Notes importantes :
- Pourquoi
http://prometheus:9090fonctionne ? Grafana et Prometheus tournent dans le mêmedocker compose(VM monitoring), donc le même réseau Docker : le nom de serviceprometheusest résolu. - N’utilisez PAS
http://localhost:9090car cela pointerait vers le conteneur Grafana lui-même.
0.4 Tester la Connexion
Section intitulée « 0.4 Tester la Connexion »- Faites défiler vers le bas de la page de configuration
- Cliquez sur le bouton Save & Test
- Vérifiez que le message suivant apparaît : ✅ “Data source is working”
Si vous obtenez une erreur, vérifiez :
- Que le conteneur Prometheus est bien démarré :
docker ps | grep prometheus - Que le nom du service Prometheus dans votre
docker-compose.ymlest bienprometheus. - Que le port
9090est bien exposé par Prometheus.
Étape 1 : Création du Dashboard et des Variables
Section intitulée « Étape 1 : Création du Dashboard et des Variables »Introduction
Section intitulée « Introduction »La base d’un bon dashboard est sa capacité à filtrer les données. Nous allons créer deux variables pour cela.
Création du dashboard
Section intitulée « Création du dashboard »- Créez un nouveau dashboard et nommez-le
TAAF - Supervision des Conteneurs - Allez dans Dashboard settings (icône engrenage) > Variables
Configuration des variables
Section intitulée « Configuration des variables »Variable $host
Section intitulée « Variable $host »- Créez la variable
$host:- Name :
host - Type :
Query - Query type :
Label values - Label :
instance - Metric :
container_last_seen - Cochez “Include All option” et dans le champ “Custom all value”, entrez
.*
- Name :
Variable $conteneur
Section intitulée « Variable $conteneur »- Créez la variable
$conteneur:- Name :
conteneur - Type :
Query - Query type :
Label values - Query :
label_values(container_last_seen{instance=~"$host"}, name) - Cochez “Include All option” et dans le champ “Custom all value”, entrez
.* - Cochez “Multi-value”
- Name :
Vous devriez maintenant avoir deux menus déroulants en haut de votre dashboard.
Étape 2 : Création des Indicateurs Clés (KPIs)
Section intitulée « Étape 2 : Création des Indicateurs Clés (KPIs) »Introduction
Section intitulée « Introduction »Ces panneaux donnent un aperçu rapide de l’état de l’infrastructure.
Panneaux KPIs
Section intitulée « Panneaux KPIs »Panneau “Conteneurs Actifs” (Stat)
Section intitulée « Panneau “Conteneurs Actifs” (Stat) »- Créez le panneau “Conteneurs Actifs” :
- Requête PromQL :
count(container_last_seen{name!="", instance=~"$host"})
- Options : Mettez en “Instant” pour n’afficher que la dernière valeur
- Requête PromQL :
Panneau “Utilisation CPU” (Gauge)
Section intitulée « Panneau “Utilisation CPU” (Gauge) »- Créez le panneau “Utilisation CPU” :
- Requête PromQL :
sum(rate(container_cpu_usage_seconds_total{name=~"$conteneur", instance=~"$host"}[5m])) * 100
- Options :
- Unit :
Percent - Thresholds : Mettez des seuils (ex: 70 pour orange, 90 pour rouge)
- Unit :
- Requête PromQL :
Panneau “Utilisation RAM” (Gauge)
Section intitulée « Panneau “Utilisation RAM” (Gauge) »- Créez le panneau “Utilisation RAM” :
- Requête PromQL :
sum(container_memory_usage_bytes{name=~"$conteneur", instance=~"$host"})
- Options :
- Unit :
Data > Bytes (IEC) - Thresholds : Configurez des seuils pertinents
- Unit :
- Requête PromQL :
Étape 3 : Création des Graphiques d’Historique
Section intitulée « Étape 3 : Création des Graphiques d’Historique »Introduction
Section intitulée « Introduction »Ces panneaux permettent d’analyser les tendances et de diagnostiquer les problèmes passés.
Panneaux d’historique
Section intitulée « Panneaux d’historique »Panneau “Historique Utilisation RAM” (Time series)
Section intitulée « Panneau “Historique Utilisation RAM” (Time series) »- Créez le panneau “Historique Utilisation RAM” :
- Requête PromQL :
container_memory_usage_bytes{name!="", instance=~"$host", name=~"$conteneur"}
- Options de la requête :
- Legend :
{{name}}
- Legend :
- Options du panneau :
- Unit :
Data > Bytes (IEC) - Graph styles > Stacking :
Normal(cela empilera les graphiques pour une meilleure lisibilité)
- Unit :
- Requête PromQL :
Panneau “Historique Utilisation CPU” (Time series)
Section intitulée « Panneau “Historique Utilisation CPU” (Time series) »- Créez le panneau “Historique Utilisation CPU” :
- Requête PromQL :
sum(rate(container_cpu_usage_seconds_total{name!="", instance=~"$host", name=~"$conteneur"}[5m])) by (name) * 100
- Options de la requête :
- Legend :
{{name}}
- Legend :
- Options du panneau :
- Unit :
Percent (0-100)
- Unit :
- Requête PromQL :
Dépannage
Section intitulée « Dépannage »Problèmes courants
Section intitulée « Problèmes courants »Durant ce TP, vous pourriez rencontrer un panneau qui affiche “No data”. C’est une étape normale du débogage.
Solutions de dépannage
Section intitulée « Solutions de dépannage »-
Vérifiez la source de données Prometheus :
- Assurez-vous que l’Étape 0 a été complétée avec succès et que la source de données “Prometheus TAAF” est bien configurée et fonctionnelle.
-
Vérifiez vos filtres :
- Assurez-vous d’avoir sélectionné un
Hostet un ou plusieursConteneur - Vérifiez que les variables sont correctement configurées
- Assurez-vous d’avoir sélectionné un
-
Vérifiez les noms des métriques :
- Si une requête ne retourne rien, allez dans l’interface de Prometheus
- Utilisez l’autocomplétion pour vérifier que le nom de la métrique (
container_memory_usage_bytes, etc.) est bien celui utilisé par votre cAdvisor
-
Vérifiez les noms des labels :
- Vérifiez que les labels sont bien
nameetinstance - Parfois, ils peuvent être différents (ex:
container_name)
- Vérifiez que les labels sont bien
-
Testez vos requêtes PromQL :
- Utilisez l’interface Prometheus pour tester vos requêtes directement
- Vérifiez que les données existent pour la période sélectionnée
Résultats attendus
Section intitulée « Résultats attendus »À la fin de ce TP, votre dashboard devrait afficher :
- Le nombre de conteneurs actifs
- L’utilisation CPU et RAM en temps réel
- Les graphiques d’historique pour analyser les tendances
- Des filtres fonctionnels pour naviguer entre hosts et conteneurs
Questions de Validation
Section intitulée « Questions de Validation »Les 10 questions suivantes valident votre compréhension et votre réalisation (difficulté croissante) :
Question 1 - Variables de base (Facile)
Section intitulée « Question 1 - Variables de base (Facile) »“Combien d’hosts différents sont disponibles dans la variable $host de votre dashboard ?”
Réponse attendue : Nombre d’hosts + capture écran du dropdown de variable.
Question 2 - Métriques simples (Facile)
Section intitulée « Question 2 - Métriques simples (Facile) »“Combien de conteneurs sont actuellement en cours d’exécution au total ?”
Réponse attendue : Requête PromQL utilisée + résultat numérique + capture panel.
Question 3 - Filtrage par conteneur (Facile)
Section intitulée « Question 3 - Filtrage par conteneur (Facile) »“Listez les 5 conteneurs qui consomment le plus de mémoire actuellement.”
Réponse attendue : Requête PromQL avec topk() + liste des conteneurs avec valeurs mémoire.
Question 4 - Calcul de pourcentage (Moyen)
Section intitulée « Question 4 - Calcul de pourcentage (Moyen) »“Quel est le pourcentage d’utilisation CPU moyen du conteneur postgres-af sur les 5 dernières minutes ?”
Réponse attendue : Requête PromQL avec rate() + calcul pourcentage + valeur avec 2 décimales + graphique.
Question 5 - Analyse temporelle (Moyen)
Section intitulée « Question 5 - Analyse temporelle (Moyen) »“À quel moment de la dernière heure le conteneur prometheus a-t-il eu le pic de consommation mémoire ?”
Réponse attendue : Graphique temporel + timestamp précis + valeur maximale + explication possible du pic.
Question 6 - Métriques réseau (Moyen)
Section intitulée « Question 6 - Métriques réseau (Moyen) »“Quel conteneur a généré le plus de trafic réseau sortant (bytes transmis) dans la dernière heure ?”
Réponse attendue : Requête PromQL avec container_network_transmit_bytes + nom conteneur + volume données.
Question 7 - Corrélation métrique (Difficile)
Section intitulée « Question 7 - Corrélation métrique (Difficile) »“Identifiez une corrélation entre l’utilisation CPU et mémoire d’un conteneur de votre choix sur les 2 dernières heures.”
Réponse attendue : Double graphique superposé + analyse de corrélation + explication logique du comportement observé.
Question 8 - Alertes de seuil (Difficile)
Section intitulée « Question 8 - Alertes de seuil (Difficile) »“Configurez un panel qui affiche tous les conteneurs dont l’utilisation mémoire dépasse 80% de leur limite.”
Réponse attendue : Requête PromQL complexe avec seuils + configuration panel + capture écran + liste conteneurs concernés.
Question 9 - Performance système (Difficile)
Section intitulée « Question 9 - Performance système (Difficile) »“Analysez l’impact des conteneurs sur les performances du host : quel conteneur cause le plus d’I/O disque et pourquoi ?”
Réponse attendue : Requête PromQL I/O + graphique + identification conteneur + analyse technique de la cause + impact opérationnel.
Question 10 - Analyse et amélioration (Avancé)
Section intitulée « Question 10 - Analyse et amélioration (Avancé) »“Analysez vos dashboards et proposez 2 améliorations concrètes :
- Un panel supplémentaire qui serait utile pour les opérateurs TAAF
- Un seuil d’alerte pertinent pour une métrique de votre choix
Justifiez vos propositions avec des captures d’écran et des explications techniques.”**
Réponse attendue :
- Proposition de panel avec mockup/capture d’écran
- Requête PromQL pour ce panel
- Seuil d’alerte avec valeur justifiée
- Explication de la pertinence opérationnelle pour les bases TAAF
Évaluation et Rendu
Section intitulée « Évaluation et Rendu »Livrables attendus
Section intitulée « Livrables attendus »- Dashboard Grafana fonctionnel :
TAAF - Supervision des Conteneurs - Captures d’écran des panneaux en fonctionnement
- Export JSON du dashboard complet
- Rapport technique : Configuration des variables, requêtes PromQL utilisées, difficultés rencontrées
Format de remise
Section intitulée « Format de remise »Consignes de rendu OBLIGATOIRES
Section intitulée « Consignes de rendu OBLIGATOIRES »Plateforme de rendu : Moodle de l’Université de la Réunion
Nommage STRICT : nom-prénom-promo.PDF
Exemple : martin-lucas-but3.PDF
ATTENTION : Tout fichier ne respectant pas ce format de nommage entraînera une pénalité de -5 points sur la note finale.
Contenu du rendu :
- Format unique : Document PDF consolidé
- Pages maximum : 8 pages (annexes incluses)
- Structure obligatoire :
- Page de garde avec informations étudiant
- Réponses aux 10 questions de validation
- Captures d’écran du dashboard fonctionnel
- Configuration des variables
$hostet$conteneur - Requêtes PromQL utilisées et explications
- Rapport technique (résolution des problèmes “No data”)
- Export JSON du dashboard (en annexe ou lien de téléchargement)
Critères de lisibilité :
- Police : Minimum 11pt, recommandé 12pt
- Marges : Minimum 2cm
- Images : Haute résolution, bien contrastées
- Code PromQL : Formatage avec coloration syntaxique
- Structure : Titres et sous-titres clairs
- Orthographe : Relecture obligatoire
Lisibilité et compréhensibilité : Ces critères représentent 15% de la note finale. Un rapport illisible, mal structuré ou avec du code non formaté sera sanctionné même si le dashboard fonctionne correctement.
Date limite : À préciser par l’enseignant
Ce TP valide vos compétences en monitoring de conteneurs avec Prometheus et Grafana dans un contexte d’infrastructure critique.