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

TP 2 — Lire l'état des stations dans leurs données métier (Grafana)

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 — transformer les données métier TAAF (RH, météo, énergie) en dashboards qui aident à décider, pas seulement à observer.

À Kerguelen, 34 personnes, six mois de rotation, des stocks qui se vident et une météo qui décide de tout. Ces chiffres existent déjà en base — personne ne les regarde. Au TP 1 vous avez vu tourner les conteneurs ; ici vous lisez ce qu’ils contiennent.

Vous construisez des dashboards à partir des tables métier (RH, communications, météo) : passer du « est-ce que ça tourne ? » au « qu’est-ce que ça raconte ? ». C’est cette lecture du normal qui fera ressortir l’anormal — un export hors-norme, un accès à une heure impossible.

Le jour J à 10:12Z, l’attaquant exfiltrera la table genetic_samples (KER-2024-002) sans approved_by. Un dashboard métier qui connaît le volume normal d’accès à ces tables est ce qui transformera ce vol en pic visible. Vous apprenez ici à regarder les données — pour qu’un jour, leur fuite saute aux yeux.


Vous disposez d’une base de données PostgreSQL contenant les données opérationnelles des bases TAAF. Votre mission : créer deux dashboards de supervision pour permettre aux gestionnaires de suivre les activités critiques.

graph LR
 subgraph "Base de Données"
 PG[(PostgreSQL
postgres-af
base_af)] end subgraph "Tables" T1[communications_satellite] T2[personnel_base] T3[conditions_meteo] T4[equipements_critiques] T5[stocks_approvisionnement] end subgraph "Visualisation" GRAF[Grafana
Port: 3000] D1[Dashboard
Communications] D2[Dashboard
RH Personnel] end PG --> T1 PG --> T2 PG --> T3 PG --> T4 PG --> T5 T1 -->|requêtes SQL|GRAF T2 -->|requêtes SQL|GRAF GRAF --> D1 GRAF --> D2 U[Vous] -->|créez dashboards|GRAF classDef db fill:#ffcc99,stroke:#333,stroke-width:2px classDef tables fill:#e6e6e6,stroke:#333,stroke-width:1px classDef viz fill:#99ff99,stroke:#333,stroke-width:2px classDef user fill:#99ccff,stroke:#333,stroke-width:2px class PG db class T1,T2,T3,T4,T5 tables class GRAF,D1,D2 viz class U user

Dans ce TP, vous allez :

  1. Connecter Grafana à la base de données PostgreSQL
  2. Créer des requêtes SQL pour extraire les données métier
  3. Construire 2 dashboards : Communications Satellite + Gestion RH
TableDescription
conditions_meteoDonnées météorologiques
personnel_baseEffectifs et rotations
equipements_critiquesÉtat du matériel
communications_satelliteLiaisons avec l’extérieur
stocks_approvisionnementInventaires critiques

Créer 2 dashboards Grafana fonctionnels :

  1. Dashboard Communications Satellite
  2. Dashboard Gestion RH Personnel

OBLIGATOIRE - TP précédent :

  • TP 1 - Grafana Metric terminé : Dashboard supervision conteneurs fonctionnel
  • Stack de supervision démarrée (docker compose up -d)
  • Interface Grafana accessible (http://localhost:3000)

Configuration supplémentaire :

  • Source de données PostgreSQL ajoutée à Grafana
  • Connexion à la base base_af fonctionnelle

Étape 0 : Configuration Source de Données PostgreSQL

Section intitulée « Étape 0 : Configuration Source de Données PostgreSQL »

Avant de créer les dashboards, vous devez configurer la connexion à PostgreSQL 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 PostgreSQL dans la liste

Configurez les paramètres suivants.

Configuration datasource PostgreSQL dans Grafana :

ParamètreValeurDescription
NamePostgreSQL TAAF - Alfred FaureNom de la source de données
Hostpostgres-af:5432Nom de service Docker (même réseau)
Databasebase_afNom de la base de données (unique)
Usertaaf_adminUtilisateur PostgreSQL
Password(voir ci-dessous)Mot de passe de l’utilisateur
TLS/SSL ModedisablePas de chiffrement (réseau interne)

Trouver le mot de passe PostgreSQL :

Fenêtre de terminal
# Sur la VM monitoring, consulter le docker-compose.yml
grep POSTGRES_PASSWORD docker-compose.yml
# Ou se connecter directement au conteneur
docker exec -it postgres-af env | grep POSTGRES_PASSWORD
  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 : ✅ “Database Connection OK”

Si vous obtenez une erreur, vérifiez :

  • Que le conteneur PostgreSQL est bien démarré : docker ps | grep postgres
  • Que les identifiants sont corrects
  • Que la base de données base_af existe
  1. Retournez à l’accueil de Grafana
  2. Cliquez sur Explore (icône boussole) dans le menu latéral
  3. Sélectionnez PostgreSQL TAAF comme source de données
  4. Passez en mode SQL Editor (bouton en haut à droite)
  5. Testez la requête suivante :
SELECT COUNT(*) as total_communications
FROM communications_satellite;
  1. Cliquez sur Run query
  2. Vérifiez que le résultat retourne un nombre > 0

Si la requête fonctionne, votre source de données PostgreSQL est correctement configurée !


  1. Connectez-vous à votre base PostgreSQL et explorez les tables
-- Exemples de requêtes d'exploration
SELECT COUNT(*) FROM communications_satellite;
SELECT DISTINCT type_communication FROM communications_satellite;
SELECT DISTINCT statut FROM personnel_base;
  1. Créer un dashboard contenant au minimum :
  • Panneau 1 : Tableau résumé des communications par station
  • Panneau 2 : Graphique temporel de la qualité du signal
  • Panneau 3 : Répartition des statuts (réussie/partielle/échec)
  • Panneau 4 : Volume de données transférées par type
  • Panneau 5 : Liste des communications problématiques
  1. Créer un dashboard contenant au minimum :
  • Panneau 1 : Effectifs actuels par statut
  • Panneau 2 : Répartition du personnel par fonction
  • Panneau 3 : Évolution des arrivées/départs
  1. Configuration des fonctionnalités avancées :
  • Ajouter des seuils d’alerte avec codes couleurs
  • Configurer le rafraîchissement automatique
  • Définir des variables template pour filtrer les données

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

“Combien de lignes contient la table communications_satellite au total ?”

Réponse attendue : Requête SQL COUNT(*) et résultat numérique.

“Combien de communications ont eu un statut ‘Réussie’ dans les 7 derniers jours ?”

Réponse attendue : Requête SQL avec WHERE et conditions temporelles + résultat numérique.

“Combien de personnes ont actuellement le statut ‘Présent’ sur la base ?”

Réponse attendue : Requête SQL simple sur personnel_base + nombre de personnes.

“Quelle est la qualité de signal moyenne de la station ‘Toulouse’ sur les 30 derniers jours ?”

Réponse attendue : Requête SQL avec AVG() et filtres + valeur avec 2 décimales + capture dashboard.

“Quels sont les 3 types de communication qui génèrent le plus de volume de données (en MB) ?”

Réponse attendue : Requête SQL avec GROUP BY et ORDER BY + liste des 3 types + volumes correspondants.

“À quelle heure de la journée observe-t-on le plus grand nombre de communications satellite ?”

Réponse attendue : Requête SQL avec EXTRACT(hour) + graphique Grafana + heure optimale justifiée.

Question 7 - Analyse personnel longue mission (Difficile)

Section intitulée « Question 7 - Analyse personnel longue mission (Difficile) »

“Identifiez le personnel dont la mission dépasse 4 mois et analysez la répartition par fonction. Quels sont les risques opérationnels pour les missions prolongées ?”

Réponse attendue : Requête SQL avec calcul de durée (CURRENT_DATE - date_arrivee) + répartition par fonction + analyse risques polaires détaillée (fatigue, isolement, rotation).

Question 8 - Analyse des équipements critiques (Difficile)

Section intitulée « Question 8 - Analyse des équipements critiques (Difficile) »

“Listez tous les équipements critiques en panne depuis plus de 48h. Pour chaque équipement, indiquez le type, la localisation et proposez une priorisation de maintenance.”

Réponse attendue : Requête SQL sur table equipements_critiques avec calcul de durée de panne + liste des équipements + priorisation justifiée + dashboard panel correspondant.

“Créez un panel d’alertes critiques affichant : personnel mission > 90 jours, communications interrompues > 24h, équipements critiques en panne.”

Réponse attendue : Requête SQL complexe + configuration panel Grafana + capture écran fonctionnelle + explication seuils.

Question 10 - Optimisation opérationnelle (Expert)

Section intitulée « Question 10 - Optimisation opérationnelle (Expert) »

“Analysez les patterns dans vos données et proposez 3 améliorations concrètes pour la supervision TAAF avec métriques de suivi.”

Réponse attendue : Analyse approfondie des données + 3 améliorations détaillées + métriques KPI proposées + impact opérationnel + faisabilité technique.


CritèreDescriptionPoints
Dashboards fonctionnelsLes panneaux affichent les bonnes données20%
Requêtes SQL correctesSyntaxe PostgreSQL respectée15%
Interface utilisableLisibilité, organisation, couleurs15%
Configuration avancéeSeuils, variables, rafraîchissement10%
CritèreDescriptionPoints
Réponses aux questionsExactitude des valeurs trouvées15%
JustificationsExplication des méthodes utilisées10%
Contexte TAAFCompréhension des enjeux opérationnels polaires10%
Suggestions d’améliorationPropositions d’évolutions des dashboards5%

  • Fichiers JSON des 2 dashboards exportés
  • Document de réponses aux 10 questions avec justifications
  • Captures d’écran des dashboards en fonctionnement
  • Rapport technique (1 page) : difficultés rencontrées, solutions apportées

Plateforme de rendu : Moodle de l’Université de la Réunion

Nommage STRICT : nom-prénom-promo.PDF
Exemple : dupont-marie-m2info.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 : 10 pages (annexes incluses)
  • Structure obligatoire :
    1. Page de garde avec informations étudiant
    2. Réponses aux 10 questions de validation
    3. Captures d’écran des dashboards fonctionnels
    4. Rapport technique (difficultés et solutions)
    5. Fichiers JSON des dashboards (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
  • 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 incompréhensible sera sanctionné même si le contenu technique est correct.

Date limite : À préciser par l’enseignant


  • Documentation Grafana : Panels, queries, variables
  • PostgreSQL : Fonctions d’agrégation, filtrage temporel
  • Base de données : Structure et contenu des tables TAAF
-- Communications des derniers jours
SELECT * FROM communications_satellite
WHERE timestamp_comm >= NOW() - INTERVAL '7 days';
-- Personnel actuel avec durée de mission
SELECT *, EXTRACT(DAY FROM (NOW() - date_arrivee)) as duree_jours
FROM personnel_base
WHERE statut IN ('Présent', 'Mission extérieure');
-- Statistiques par station
SELECT station_receptrice,
COUNT(*) as total,
AVG(qualite_signal) as signal_moyen
FROM communications_satellite
GROUP BY station_receptrice;

  • Utilisez des couleurs distinctes pour chaque station (Toulouse/La Réunion)
  • Configurez des seuils : signal > 70% = vert, < 40% = rouge
  • Filtrez les données sur les 30 derniers jours pour la performance
  • Alertes visuelles pour communications > 7 jours (rouge)
  • Couleurs par statut : Présent = vert, Évacuation médicale = rouge
  • Graphiques temporels pour visualiser les rotations saisonnières
  • Limitez les requêtes lourdes avec LIMIT
  • Utilisez des agrégations pour les gros volumes
  • Configurez le cache Grafana approprié