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

Monitoring - Système de Supervision TAAF

Acte 1 Tronc commun · les deux publics Débutant → Intermédiaire Prometheus · Grafana · Loki

Port-aux-Français, base perdue dans l’océan Indien. Un service tombe — et personne ne le sait avant qu’un chercheur ne trouve porte close. La DSI des TAAF pilote à l’aveugle.

Votre première mission : lui rendre la vue. Vous construisez la visibilité de l’infrastructure — métriques, dashboards, logs centralisés, alertes — sans laquelle aucune détection n’est possible.

→ Le parcours complet : la progression et les deux parcours.

Le parcours Monitoring vous apprend à mettre en place une solution complète de supervision et d’observabilité pour les bases polaires TAAF. Vous allez déployer et configurer une stack de monitoring moderne avec Prometheus, Grafana et Loki.

La solution de supervision s’appuie sur les technologies suivantes :

  • PostgreSQL (bases multiples) : Stockage des données opérationnelles
  • Prometheus : Collecte et stockage des métriques
  • Alertmanager : Gestion et routage des alertes
  • Grafana : Visualisation et dashboards
  • Loki : Agrégation et analyse des logs
  • Alloy : Agent de collecte unifié (Grafana Agent)
  • cAdvisor : Collecte des métriques des conteneurs Docker
  • Caddy : Serveur web et proxy inverse avec SSL automatique
  • Exporters : postgres_exporter, node_exporter
graph LR
 subgraph "Stack Monitoring (Observabilité)"
 PG[(PostgreSQL<br/>Bases TAAF)] -->|métriques|PROM[Prometheus]
 NC[NextCloud] -->|logs|ALLOY[Grafana Alloy]
 PG -->|logs|ALLOY

 ALLOY --> LOKI[Loki]
 PROM --> GRAF[Grafana]
 LOKI --> GRAF

 PROM --> AM[Alertmanager]
 AM -->|notifications|DISC[Discord/Slack]
 end

 classDef monitoring fill:#99ff99,stroke:#333,stroke-width:2px
 classDef infra fill:#ffcc99,stroke:#333,stroke-width:2px
 classDef alert fill:#cc99ff,stroke:#333,stroke-width:2px

 class PROM,ALLOY,LOKI,GRAF monitoring
 class PG,NC infra
 class AM,DISC alert
  • Disponibilité : Statut UP/DOWN des bases
  • Performance : Temps de réponse, throughput
  • Ressources : CPU, RAM, stockage
  • Connexions : Nombre de sessions actives
  • Erreurs : Logs d’erreurs et exceptions

Via Alertmanager (TP4) :

  • Base de données inaccessible
  • Performances dégradées
  • Espace disque critique
  • Erreurs critiques dans les logs
  • Notifications Discord/Slack/Email

Le système gère une seule instance PostgreSQL (postgres-af) exposant une unique base de données base_af. Toutes les données opérationnelles des bases polaires y sont regroupées sous forme de tables :

  • personnel_base : Gestion du personnel, rotations et congés
  • conditions_meteo : Relevés météorologiques et alertes
  • equipements_critiques : Inventaire et maintenance du matériel
  • communications_satellite : Logs des communications satellite

Les scripts suivants doivent être exécutés dans l’ordre depuis le repository kds-formation/sql sur la base base_af :

Schémas (création des tables) :

  1. personnel_base.sql
  2. conditions_meteo.sql
  3. equipements_critiques.sql
  4. communications_satellite.sql

Données (insertion) : 5. data-personel.sql 6. data-meteo.sql 7. data-materiel.sql 8. data-com-satellite.sql

IMPORTANT : Les TPs doivent être réalisés dans l’ordre strict suivant :

  1. TP1 - Métriques Grafana

    • Créer dashboard de supervision des conteneurs Docker
    • Livrable : 1 dashboard métriques système
  2. TP2 - Dashboards Données

    • Ajouter dashboards données métier TAAF
    • Livrable : 2 dashboards supplémentaires (Communications + RH)
  3. TP3 - Intégration Loki

    • Intégrer la dimension logs
    • Livrable : Dashboards hybrides logs+métriques
  4. TP4 - Alerting

    • Configuration alertes multi-sources
    • Livrable : Alertmanager + webhooks Discord/Google Chat
  5. TP Bonus (Optionnel)

    • Monitoring production électrique La Réunion

Consultez l’ordre détaillé des TPs pour plus d’informations.

  • Docker Desktop ou Docker Engine
  • Docker Compose
  • 8 GB RAM minimum (16 GB recommandé)
  • 20 GB d’espace disque libre

L’Acte 1 est réparti sur deux VMs depuis le split apps/monitoring :

  • VM apps (TAAF-APPS-001, IP_APPS) — le SI observé et ses collecteurs, déployés par docker-compose-apps.yml : PostgreSQL postgres-af (5432), NextCloud (8081), Adminer (8080), Alloy (collecteur de logs), cAdvisor (8082), node-exporter (9100), postgres-exporter (9187). Le log-generator (profil scenario) ne fait pas partie de l’Acte 1 : il sert au seeding de l’incident (Acte 0 · Phase 4) que l’Acte 2 SIEM détecte — inutile pour superviser ici.
  • VM monitoring (TAAF-MONITORING-001, IP_VM1) — le plan de contrôle d’observabilité, déployé par docker-compose.yml : Grafana (3000), Prometheus (9090), Loki (3100), Alertmanager (9093), Caddy.

Au sein d’une même VM, les services se joignent par leur nom de service Docker (postgres-af, prometheus, loki…). Entre les deux VMs, on passe par l’IP : Prometheus (monitoring) scrape les exporters d’apps sur IP_APPS, et Alloy (apps) pousse vers Loki (monitoring) sur IP_MONITORING:3100.

Fenêtre de terminal
# Cloner le projet
git clone https://gitlab.com/kds-formation/monitoring
cd monitoring
# Démarrer tous les services
docker compose up -d
# Vérifier le statut
docker compose ps

Depuis votre poste de travail (navigateur) :

  • Grafana : http://IP_VM1:3000
    • User : admin
    • Password : AdminTAAF2024!
  • Prometheus : http://IP_VM1:9090

Connexion à la base PostgreSQL (client SQL, depuis votre poste) :

  • PostgreSQL australe (base_af) : IP_APPS:5432 (VM apps ; user: taaf_admin, password: AdminTAAF2024!, base : base_af)
    • Tables disponibles dans base_af : personnel_base, conditions_meteo, equipements_critiques, communications_satellite

Dans les configurations Grafana (datasources) — tout en nom de service Docker :

  • Prometheus : http://prometheus:9090
  • Prometheus / Loki / Alertmanager (même VM que Grafana) : nom de service Docker
  • PostgreSQL base_af (VM apps) : IP_APPS:5432

VM monitoring (plan de contrôle d’observabilité) :

  • 3000 : Interface Grafana
  • 9090 : Interface Prometheus
  • 3100 : Service Loki
  • 9093 : Alertmanager

VM apps (SI observé + collecteurs) :

  • 5432 : PostgreSQL australe base_af (toutes les bases)
  • 8080 : Adminer (UI SQL)
  • 8081 : NextCloud (UI)
  • 8082 : cAdvisor (métriques conteneurs)
  • 9187 : postgres_exporter
  • 9100 : node_exporter
  • 12345 : Alloy (collecteur de logs)

cAdvisor tourne sur la VM apps (déployé par docker-compose-apps.yml) et collecte les métriques de tous les conteneurs Docker de cette VM.

Fenêtre de terminal
# Sur la VM apps (vagrant ssh apps) :
docker ps | grep cadvisor
# Interface / métriques cAdvisor (port 8082 sur apps)
curl http://localhost:8082/containers/
curl http://localhost:8082/metrics
# Depuis Prometheus (VM monitoring) : http://IP_VM1:9090 → Explorer → "container_"
# (Prometheus scrape cAdvisor sur IP_APPS:8082)

Métriques cAdvisor disponibles :

  • container_cpu_usage_seconds_total : Utilisation CPU par conteneur
  • container_memory_usage_bytes : Utilisation mémoire
  • container_network_receive_bytes_total : Octets réseau reçus
  • container_network_transmit_bytes_total : Octets réseau envoyés
  • container_fs_usage_bytes : Utilisation disque

Ces métriques sont utilisées dans le TP1 pour créer le dashboard de supervision des conteneurs.

Fenêtre de terminal
# Démarrer les services
docker compose up -d
# Voir les logs d'un service spécifique
docker compose logs -f grafana
docker compose logs -f prometheus
# Voir les logs de tous les services
docker compose logs -f
# Arrêter les services
docker compose down
# Nettoyer (attention: supprime les données)
docker compose down -v
# Redémarrer un service spécifique
docker compose restart grafana
# Accéder à la base base_af
docker exec -it postgres-af psql -U taaf_admin -d base_af
# Lister les tables de base_af
docker exec -it postgres-af psql -U taaf_admin -d base_af -c "\dt"
# Interroger une table
docker exec -it postgres-af psql -U taaf_admin -d base_af -c "SELECT COUNT(*) FROM communications_satellite;"
docker exec -it postgres-af psql -U taaf_admin -d base_af -c "SELECT COUNT(*) FROM personnel_base;"

Services qui ne démarrent pas :

Fenêtre de terminal
# Vérifier les ports utilisés
netstat -tulpn | grep -E ':(3000|9090|5432)'
# Voir les logs d'erreur
docker compose logs grafana
docker compose logs prometheus

Données manquantes :

Fenêtre de terminal
# Réinitialiser les données PostgreSQL
docker compose down -v
docker compose up -d

Performance lente :

  • Vérifier la RAM disponible (minimum 8 GB)
  • Augmenter les limites Docker si nécessaire

Plateforme : Moodle de l’Université de la Réunion Format : nom-prénom-promo.PDF (exemple: dupont-marie-m2info.PDF)

PÉNALITÉ : -5 points pour non-respect du nommage

Lisibilité et compréhensibilité = 15% de la note finale

  • Police : 11pt minimum (12pt recommandé)
  • Structure : Titres clairs, sections organisées
  • Images : Captures d’écran nettes et contrastées
  • Code : Formatage correct des requêtes SQL/PromQL
  • Orthographe : Relecture obligatoire

Un rapport illisible sera sanctionné même si le contenu technique est correct.

  1. Consulter l’ordre des TPs
  2. Lire la présentation du projet
  3. Commencer par le TP1 - Métriques Grafana