Aller au contenu
TAAF-OPS --:-- UTC

TP 1 — Rendre la vue au SOC : superviser les conteneurs de PAF

Auteur : Thibaut Fontaine
Institution : Université de la Réunion
Date : 2025



📡 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.

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.

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.


  • 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
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 :

  1. Utiliser cAdvisor pour collecter les métriques des conteneurs
  2. Interroger Prometheus avec des requêtes PromQL
  3. Créer un dashboard Grafana pour visualiser les métriques en temps réel
  • 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.

  1. Ouvrez votre navigateur et accédez à http://localhost:3000
  2. Connectez-vous avec les identifiants par défaut :
    • Username : admin
    • Password : AdminTAAF2024!
  1. Dans le menu latéral gauche, cliquez sur ⚙️ ConfigurationData Sources
  2. Cliquez sur le bouton Add data source
  3. Recherchez et sélectionnez Prometheus dans la liste

Configuration datasource Prometheus dans Grafana :

ParamètreValeurDescription
NamePrometheus TAAFNom de la source de données
URLhttp://prometheus:9090Nom du service Docker
AccessServer (default)Accès via le serveur Grafana

Notes importantes :

  • Pourquoi http://prometheus:9090 fonctionne ? Grafana et Prometheus tournent dans le même docker compose (VM monitoring), donc le même réseau Docker : le nom de service prometheus est résolu.
  • N’utilisez PAS http://localhost:9090 car cela pointerait vers le conteneur Grafana lui-même.
  1. Faites défiler vers le bas de la page de configuration
  2. Cliquez sur le bouton Save & Test
  3. 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.yml est bien prometheus.
  • Que le port 9090 est 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 »

La base d’un bon dashboard est sa capacité à filtrer les données. Nous allons créer deux variables pour cela.

  1. Créez un nouveau dashboard et nommez-le TAAF - Supervision des Conteneurs
  2. Allez dans Dashboard settings (icône engrenage) > Variables
  1. 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 .*
  1. 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”

Vous devriez maintenant avoir deux menus déroulants en haut de votre dashboard.


Ces panneaux donnent un aperçu rapide de l’état de l’infrastructure.

  1. 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
  1. 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)
  1. 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

Étape 3 : Création des Graphiques d’Historique

Section intitulée « Étape 3 : Création des Graphiques d’Historique »

Ces panneaux permettent d’analyser les tendances et de diagnostiquer les problèmes passés.

Panneau “Historique Utilisation RAM” (Time series)

Section intitulée « Panneau “Historique Utilisation RAM” (Time series) »
  1. 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}}
    • Options du panneau :
      • Unit : Data > Bytes (IEC)
      • Graph styles > Stacking : Normal (cela empilera les graphiques pour une meilleure lisibilité)

Panneau “Historique Utilisation CPU” (Time series)

Section intitulée « Panneau “Historique Utilisation CPU” (Time series) »
  1. 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}}
    • Options du panneau :
      • Unit : Percent (0-100)

Durant ce TP, vous pourriez rencontrer un panneau qui affiche “No data”. C’est une étape normale du débogage.

  • 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 Host et un ou plusieurs Conteneur
    • Vérifiez que les variables sont correctement configurées
  • 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 name et instance
    • Parfois, ils peuvent être différents (ex: container_name)
  • 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

À 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

Les 10 questions suivantes valident votre compréhension et votre réalisation (difficulté croissante) :

“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.

“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.

“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.

“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.

“À 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.

“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.

“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é.

“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.

“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.

“Analysez vos dashboards et proposez 2 améliorations concrètes :

  1. Un panel supplémentaire qui serait utile pour les opérateurs TAAF
  2. 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

  • 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

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 :
    1. Page de garde avec informations étudiant
    2. Réponses aux 10 questions de validation
    3. Captures d’écran du dashboard fonctionnel
    4. Configuration des variables $host et $conteneur
    5. Requêtes PromQL utilisées et explications
    6. Rapport technique (résolution des problèmes “No data”)
    7. 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.