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
Table des matières
Section intitulée « Table des matières »- Objectifs et Contexte
- Mission et Prérequis
- Consignes de Réalisation
- Questions de Validation
- Critères d’Évaluation
- Livrables Attendus
- Ressources et Conseils
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 — transformer les données métier TAAF (RH, météo, énergie) en dashboards qui aident à décider, pas seulement à observer.
Contexte
Section intitulée « Contexte »À 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.
🔴 Au fil de l’enquête
Section intitulée « 🔴 Au fil de l’enquête »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.
Architecture du TP2
Section intitulée « Architecture du TP2 »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 :
- Connecter Grafana à la base de données PostgreSQL
- Créer des requêtes SQL pour extraire les données métier
- Construire 2 dashboards : Communications Satellite + Gestion RH
Base de données disponible
Section intitulée « Base de données disponible »Tables disponibles
Section intitulée « Tables disponibles »| Table | Description |
|---|---|
conditions_meteo | Données météorologiques |
personnel_base | Effectifs et rotations |
equipements_critiques | État du matériel |
communications_satellite | Liaisons avec l’extérieur |
stocks_approvisionnement | Inventaires critiques |
Mission et Prérequis
Section intitulée « Mission et Prérequis »Créer 2 dashboards Grafana fonctionnels :
- Dashboard Communications Satellite
- Dashboard Gestion RH Personnel
Prérequis techniques
Section intitulée « Prérequis techniques »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_affonctionnelle
Consignes de Réalisation
Section intitulée « Consignes de Réalisation »É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.
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 PostgreSQL
Section intitulée « 0.2 Ajouter la Source de Données PostgreSQL »- Dans le menu latéral gauche, cliquez sur ⚙️ Configuration → Data Sources
- Cliquez sur le bouton Add data source
- Recherchez et sélectionnez PostgreSQL dans la liste
0.3 Configuration de la Connexion
Section intitulée « 0.3 Configuration de la Connexion »Configurez les paramètres suivants.
Configuration datasource PostgreSQL dans Grafana :
| Paramètre | Valeur | Description |
|---|---|---|
| Name | PostgreSQL TAAF - Alfred Faure | Nom de la source de données |
| Host | postgres-af:5432 | Nom de service Docker (même réseau) |
| Database | base_af | Nom de la base de données (unique) |
| User | taaf_admin | Utilisateur PostgreSQL |
| Password | (voir ci-dessous) | Mot de passe de l’utilisateur |
| TLS/SSL Mode | disable | Pas de chiffrement (réseau interne) |
Trouver le mot de passe PostgreSQL :
# Sur la VM monitoring, consulter le docker-compose.ymlgrep POSTGRES_PASSWORD docker-compose.yml
# Ou se connecter directement au conteneurdocker exec -it postgres-af env | grep POSTGRES_PASSWORD0.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 : ✅ “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_afexiste
0.5 Vérification avec une Requête Test
Section intitulée « 0.5 Vérification avec une Requête Test »- Retournez à l’accueil de Grafana
- Cliquez sur Explore (icône boussole) dans le menu latéral
- Sélectionnez PostgreSQL TAAF comme source de données
- Passez en mode SQL Editor (bouton en haut à droite)
- Testez la requête suivante :
SELECT COUNT(*) as total_communicationsFROM communications_satellite;- Cliquez sur Run query
- 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 ! ✅
Étape 1 : Analyse des données
Section intitulée « Étape 1 : Analyse des données »- Connectez-vous à votre base PostgreSQL et explorez les tables
Requêtes d’exploration recommandées
Section intitulée « Requêtes d’exploration recommandées »-- Exemples de requêtes d'explorationSELECT COUNT(*) FROM communications_satellite;SELECT DISTINCT type_communication FROM communications_satellite;SELECT DISTINCT statut FROM personnel_base;Étape 2 : Dashboard Communications
Section intitulée « Étape 2 : Dashboard Communications »- Créer un dashboard contenant au minimum :
Panneaux requis
Section intitulée « Panneaux requis »- 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
Étape 3 : Dashboard RH
Section intitulée « Étape 3 : Dashboard RH »- Créer un dashboard contenant au minimum :
Panneaux requis
Section intitulée « Panneaux requis »- Panneau 1 : Effectifs actuels par statut
- Panneau 2 : Répartition du personnel par fonction
- Panneau 3 : Évolution des arrivées/départs
Étape 4 : Configuration avancée
Section intitulée « Étape 4 : Configuration avancée »- 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
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 - Données de base (Facile)
Section intitulée « Question 1 - Données de base (Facile) »“Combien de lignes contient la table communications_satellite au total ?”
Réponse attendue : Requête SQL COUNT(*) et résultat numérique.
Question 2 - Filtrage simple (Facile)
Section intitulée « Question 2 - Filtrage simple (Facile) »“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.
Question 3 - Personnel actuel (Facile)
Section intitulée « Question 3 - Personnel actuel (Facile) »“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.
Question 4 - Calculs de moyenne (Moyen)
Section intitulée « Question 4 - Calculs de moyenne (Moyen) »“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.
Question 5 - Analyse par type (Moyen)
Section intitulée « Question 5 - Analyse par type (Moyen) »“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.
Question 6 - Analyse temporelle (Moyen)
Section intitulée « Question 6 - Analyse temporelle (Moyen) »“À 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.
Question 9 - Dashboard d’alertes (Difficile)
Section intitulée « Question 9 - Dashboard d’alertes (Difficile) »“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ères d’Évaluation
Section intitulée « Critères d’Évaluation »Technique (60%)
Section intitulée « Technique (60%) »| Critère | Description | Points |
|---|---|---|
| Dashboards fonctionnels | Les panneaux affichent les bonnes données | 20% |
| Requêtes SQL correctes | Syntaxe PostgreSQL respectée | 15% |
| Interface utilisable | Lisibilité, organisation, couleurs | 15% |
| Configuration avancée | Seuils, variables, rafraîchissement | 10% |
Analyse (40%)
Section intitulée « Analyse (40%) »| Critère | Description | Points |
|---|---|---|
| Réponses aux questions | Exactitude des valeurs trouvées | 15% |
| Justifications | Explication des méthodes utilisées | 10% |
| Contexte TAAF | Compréhension des enjeux opérationnels polaires | 10% |
| Suggestions d’amélioration | Propositions d’évolutions des dashboards | 5% |
Livrables Attendus
Section intitulée « Livrables Attendus »Livrables obligatoires
Section intitulée « Livrables obligatoires »- 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
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 : 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 :
- Page de garde avec informations étudiant
- Réponses aux 10 questions de validation
- Captures d’écran des dashboards fonctionnels
- Rapport technique (difficultés et solutions)
- 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
Ressources et Conseils
Section intitulée « Ressources et Conseils »Ressources disponibles
Section intitulée « Ressources disponibles »- Documentation Grafana : Panels, queries, variables
- PostgreSQL : Fonctions d’agrégation, filtrage temporel
- Base de données : Structure et contenu des tables TAAF
Requêtes utiles pour débuter :
Section intitulée « Requêtes utiles pour débuter : »-- Communications des derniers joursSELECT * FROM communications_satelliteWHERE timestamp_comm >= NOW() - INTERVAL '7 days';
-- Personnel actuel avec durée de missionSELECT *, EXTRACT(DAY FROM (NOW() - date_arrivee)) as duree_joursFROM personnel_baseWHERE statut IN ('Présent', 'Mission extérieure');
-- Statistiques par stationSELECT station_receptrice, COUNT(*) as total, AVG(qualite_signal) as signal_moyenFROM communications_satelliteGROUP BY station_receptrice;Conseils pratiques
Section intitulée « Conseils pratiques »Dashboard Communications
Section intitulée « Dashboard Communications »- 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
Dashboard RH
Section intitulée « Dashboard RH »- 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
Performance
Section intitulée « Performance »- Limitez les requêtes lourdes avec LIMIT
- Utilisez des agrégations pour les gros volumes
- Configurez le cache Grafana approprié