TP — Supervision SNMP satellite avec Zabbix (AegisSat + Starlink)
Auteur : Thibaut Fontaine — Kodetis Institution : Université de la Réunion Date : 2026
Table des matières
Section intitulée « Table des matières »- Objectifs et contexte
- Glossaire express
- Section 0 — Démarrer le lab (10 min)
- Section 1 — Comprendre les métriques satellite (15 min)
- Section 2 — Importer le lab et lier les hosts au Proxy (15 min)
- Section 3 — Tester le polling SNMP (10 min)
- Section 4 — Créer les triggers métier (25 min)
- Section 5 — Construire le dashboard AegisSat (25 min)
- Section 6 — Construire le dashboard Starlink (25 min)
- Section 7 — Valider avec le simulateur (15 min)
- Synthèse finale (1 pt)
- Livrables & barème
1. Objectifs et contexte
Section intitulée « 1. Objectifs et contexte »📡 Poste SOC · La Réunion — Tu superviser 2 liaisons satellite :
- AegisSat (satellite fictif souverain) → station ground à PAF Réunion, surveillance maritime ZEE
- Starlink → station Concordia (Antarctique intérieur), lien Internet primaire
Les 2 sat utilisent des modèles physiques très différents (1 LEO unique vs constellation), et donc les métriques pertinentes sont différentes. Tu vas construire un système de supervision adapté à chaque cas.
🆕 Tu n’as jamais touché au domaine spatial / satellite ? Lis d’abord la ressource Comprendre la supervision satellite — elle explique les termes (LEO, élévation, drop rate, obstruction, etc.), donne les analogies concrètes, et compare AegisSat avec les vrais opérateurs (Inmarsat, Iridium, Starlink). 15 min de lecture, ça t’évite de patauger pendant le TP.
Ce que tu vas apprendre
Section intitulée « Ce que tu vas apprendre »- Modèles de satellites : différence LEO unique (pass+gap) vs constellation (toujours en ligne avec handovers)
- Métriques SATCOM : signal level, élévation, drop rate, obstruction, latence — leur signification physique
- Triggers Zabbix : écrire des conditions métier sur des items SNMP réels
- Dashboards métier : structurer des panels pour répondre à des questions opérationnelles précises
- Validation par simulation : utiliser un script pour faire vivre les sat et vérifier ses triggers/dashboards
Architecture du TP
Section intitulée « Architecture du TP »graph LR subgraph "VM monitoring (PC La Réunion)" ZS[Zabbix Server
+ Frontend :8080] PG[(Postgres)] end subgraph "VM concordia (ground station)" ZP[Zabbix Proxy] SIM[snmpsim
2 devices simulés] APP[App simulateur :5050
UI étudiant] end ZS <--> ZP ZP <--> SIM APP -.pilote.-> SIM
2. Glossaire express
Section intitulée « 2. Glossaire express »| Terme | Définition courte |
|---|---|
| LEO | Low Earth Orbit — satellite en orbite basse (< 2000 km). Vitesse ~27 000 km/h, période ~90 min |
| Pass | Période pendant laquelle un satellite LEO est visible depuis une station au sol (typique 10-15 min) |
| Gap | Période entre deux passes — sat invisible, pas de communication possible |
| Élévation | Angle entre l’horizon et le satellite vu depuis la station. 0° = horizon, 90° = zénith |
| RSSI | Received Signal Strength Indicator — puissance signal reçue en dBm (plus négatif = plus faible) |
| LOS | Loss Of Signal — satellite hors visibilité, lien down |
| Handover | Bascule d’un satellite à un autre dans une constellation (typique Starlink : toutes les 15s) |
| Drop rate | Taux de paquets perdus, mesuré en ‰ (pour mille) |
| Obstruction | Fraction du ciel visible bloquée par un obstacle (arbre, neige, bâtiment), mesurée en ‰ |
| PoP | Point of Presence — passerelle terrestre vers Internet de l’opérateur satellite |
| Trigger | Condition Zabbix qui se déclenche quand une expression devient vraie (ex: last(.../signal) < -120) |
3. Section 0 — Démarrer le lab (10 min)
Section intitulée « 3. Section 0 — Démarrer le lab (10 min) »3.1 Cloner et lancer
Section intitulée « 3.1 Cloner et lancer »git clone git@gitlab.com:kds-formation/zabbix-lab.gitcd zabbix-labmake upAttendre ~60s. Vérifier :
make status# Tous containers en "Up (healthy)"3.2 Vérifier les 3 UIs
Section intitulée « 3.2 Vérifier les 3 UIs »| URL | Login | Quoi |
|---|---|---|
http://localhost:8080 | Admin / zabbix | Zabbix Frontend (ton outil principal) |
http://localhost:5050 | — | App simulateur (à lancer plus tard : make app) |
http://localhost:3001 | — | Console SCADA technicien (vue secondaire, utile pour debug) |
❓ Question 1 (1 pt)
Section intitulée « ❓ Question 1 (1 pt) »Pourquoi a-t-on 2 stacks Docker séparées (
zabbix-server-lab+zabbix-proxy-lab) au lieu d’une seule ? Donne 1 raison technique et 1 raison pédagogique.
4. Section 1 — Comprendre les métriques satellite (15 min)
Section intitulée « 4. Section 1 — Comprendre les métriques satellite (15 min) »Avant de toucher Zabbix, comprendre ce que tu vas mesurer.
4.1 AegisSat — un satellite LEO unique
Section intitulée « 4.1 AegisSat — un satellite LEO unique »AegisSat orbite à 600 km, vitesse ~27 000 km/h. Depuis PAF, il passe au-dessus 4 fois par jour, chaque pass dure ~15 minutes. Entre 2 pass : 45 min de gap (silence total).
Élévation au cours d’un pass :
90° ┤ 60° ┤ .─. ← pic du pass (sat à la verticale) 30° ┤ .─´ `─. 0° ┤_/_________\_ ← sat à l'horizon (apparaît / disparaît) ├─── 15 min ───┤Métriques importantes :
| Métrique | OID | Signification | Valeur nominale |
|---|---|---|---|
| Signal level | .1.3.6.1.4.1.99999.1.1.0 | Puissance reçue en dBm | -85 dBm |
| Link state | .99999.1.2.0 | 0=DOWN · 1=UP · 2=ACQUIRING | 1 |
| Bytes received | .99999.1.3.0 | Counter32 octets reçus | croissant |
| Bytes transmitted | .99999.1.4.0 | Counter32 octets émis | croissant |
| Sat in view | .99999.1.5.0 | Identifiant sat visible | AEGIS-1A |
| Elevation | .99999.1.6.0 | Angle d’élévation en degrés | 47° |
4.2 Starlink — une constellation LEO
Section intitulée « 4.2 Starlink — une constellation LEO »Starlink = ~6000 satellites à 550 km. La dish parle simultanément à 3-5 sats et bascule toutes les 15s entre eux (handover). Le lien est continu (pas de gap comme AegisSat) mais subit des micro-coupures lors des handovers.
Métriques importantes :
| Métrique | OID | Signification | Valeur nominale |
|---|---|---|---|
| Dish state | .1.3.6.1.4.1.50000.1.1.13.0 | CONNECTED · OBSTRUCTED · SEARCHING | CONNECTED |
| PoP latency | .50000.1.1.4.0 | Latence ms vers le PoP (Sydney pour Concordia) | 32 ms |
| Downlink | .50000.1.1.5.0 | Débit descendant Mbps | 215 Mbps |
| Drop rate | .50000.1.1.3.0 | Paquets perdus en ‰ | 0-5 ‰ |
| Obstruction | .50000.1.1.7.0 | % du ciel visible masqué en ‰ | 3 ‰ |
| Satellites | .50000.1.1.12.0 | Nb de sats actuellement linkés | 4 |
❓ Question 2 (1 pt)
Section intitulée « ❓ Question 2 (1 pt) »Explique pourquoi drop rate et obstruction ne mesurent pas la même chose. Donne un exemple où obstruction = 0‰ mais drop = 200‰, et inversement.
5. Section 2 — Importer le lab et lier les hosts au Proxy (15 min)
Section intitulée « 5. Section 2 — Importer le lab et lier les hosts au Proxy (15 min) »5.1 Créer le Proxy dans Zabbix
Section intitulée « 5.1 Créer le Proxy dans Zabbix »Administration → Proxies → Create proxy
| Champ | Valeur |
|---|---|
| Proxy name | Proxy-Concordia |
| Proxy mode | Passive |
| Address | zabbix-proxy-concordia |
| Port | 10051 |
Update. Attends ~30s, refresh → State: Online (vert).
5.2 Importer les templates et hosts
Section intitulée « 5.2 Importer les templates et hosts »Configuration → Templates → Import → choisir le fichier templates/taaf-lab.yaml du repo cloné.
Cocher les checkboxes Create new et Update existing. Click Import.
→ Vérifier Configuration → Hosts : tu dois voir 2 hosts créés (aegissat + starlink) avec leurs templates linkés et 9+7 = 16 items.
5.3 Lier les hosts au Proxy
Section intitulée « 5.3 Lier les hosts au Proxy »Configuration → Hosts → coche aegissat + starlink → Mass update → Monitored by = Proxy → Proxy-Concordia → Apply.
❓ Question 3 (1 pt)
Section intitulée « ❓ Question 3 (1 pt) »Quelle est la valeur de
{$SNMP_COMMUNITY}sur l’hostaegissat? Pourquoi cette macro n’est-elle pas définie au niveau du template mais au niveau du host ? (Indice : pense au cas où tu superviserais 2 dishys Starlink en même temps, l’un à Concordia, l’autre à DDU.)
6. Section 3 — Tester le polling SNMP (10 min)
Section intitulée « 6. Section 3 — Tester le polling SNMP (10 min) »6.1 Vérifier que les items reçoivent des données
Section intitulée « 6.1 Vérifier que les items reçoivent des données »Monitoring → Latest data → filtrer sur les 2 hosts. Tu dois voir des valeurs récentes (< 1 min) pour la quasi-totalité des items.
Si certains restent en Not supported :
- Vérifier la macro
{$SNMP_COMMUNITY}sur l’host - Vérifier que l’interface SNMP du host est en
DNS = snmpsim,port = 161 - Vérifier que
Proxy-Concordiaest Online
6.2 Polling SNMP en CLI (bonus)
Section intitulée « 6.2 Polling SNMP en CLI (bonus) »Depuis ton hôte Mac :
snmpget -v2c -c aegissat/nominal localhost:1161 \ .1.3.6.1.4.1.99999.1.1.0 \ .1.3.6.1.4.1.99999.1.5.0 \ .1.3.6.1.4.1.99999.1.6.0
# Sortie attendue (valeurs courantes) :# SNMPv2-SMI::enterprises.99999.1.1.0 = INTEGER: -85# SNMPv2-SMI::enterprises.99999.1.5.0 = STRING: "AEGIS-1A"# SNMPv2-SMI::enterprises.99999.1.6.0 = INTEGER: 47❓ Question 4 (1 pt)
Section intitulée « ❓ Question 4 (1 pt) »Lance un
snmpwalksuraegissat/nominal localhost:1161 .1.3.6.1.4.1.99999. Que voit-on ? Pourquoi lesysUpTimeaugmente-t-il à chaque requête alors quesignalreste fixe à -85 ? (Indice : value_type SNMP, preprocessing simulator).
7. Section 4 — Créer les triggers métier (25 min)
Section intitulée « 7. Section 4 — Créer les triggers métier (25 min) »À toi de créer les triggers. Ne pas importer un fichier — les écrire dans l’UI Zabbix.
7.1 Triggers AegisSat à créer (4 triggers)
Section intitulée « 7.1 Triggers AegisSat à créer (4 triggers) »Pour chaque trigger : Configuration → Hosts → aegissat → Triggers → Create trigger.
| # | Description | Severity | Expression (à toi de la trouver) |
|---|---|---|---|
| T1 | Link DOWN | High | basé sur aegissat.link |
| T2 | Signal très faible (< -120 dBm) | Average | basé sur aegissat.signal |
| T3 | Élévation basse (< 10°) | Warning | basé sur aegissat.elev |
| T4 | Sat hors visu (no sat in view) | High | basé sur aegissat.sat |
7.2 Triggers Starlink à créer (4 triggers)
Section intitulée « 7.2 Triggers Starlink à créer (4 triggers) »| # | Description | Severity | Basé sur |
|---|---|---|---|
| T5 | Outage (0 sats linkés) | High | starlink.satellites |
| T6 | Obstruction > 5% (50‰) | Average | starlink.obstruction |
| T7 | Drop rate > 10% (100‰) | Average | starlink.drop |
| T8 | Latency anormale (> 100 ms) | Warning | starlink.latency |
❓ Question 5 (1 pt)
Section intitulée « ❓ Question 5 (1 pt) »Pour le trigger T2 (
Signal < -120 dBm), écris 2 versions de l’expression :
- Une qui se déclenche sur la dernière valeur uniquement → fragile aux faux positifs
- Une qui se déclenche sur la moyenne sur 5 minutes → plus robuste
Donne les 2 expressions Zabbix exactes et explique en 2 phrases laquelle tu choisirais en prod.
8. Section 5 — Construire le dashboard AegisSat (25 min)
Section intitulée « 8. Section 5 — Construire le dashboard AegisSat (25 min) »Monitoring → Dashboards → Create dashboard. Nomme-le TAAF · AegisSat.
Tu dois construire un dashboard qui répond à 6 questions opérationnelles d’un SOC PAF :
| Q | Question opérationnelle | Type de widget suggéré |
|---|---|---|
| Q1 | Le lien est-il UP maintenant ? | Single value Link state + Signal level |
| Q2 | Quel satellite je vois ? | Single value Sat in view |
| Q3 | Le sat est-il proche de l’horizon (lien va couper bientôt) ? | Single value Elevation avec seuils colorés |
| Q4 | Quel pattern de pass au cours du temps ? | Time-series graph Elevation (montre les pass + gaps) |
| Q5 | Quel volume de data échangé ? | Time-series graph Bytes in/out (bps) |
| Q6 | Y a-t-il un problème actif sur AegisSat ? | Problems widget filtré sur l’host |
Tips de mise en page
Section intitulée « Tips de mise en page »- Largeur dashboard : 24 colonnes (grid Zabbix). Une rangée = ce que tu décides.
- Big numbers en haut (single value 8×4)
- Graphs en dessous (svggraph 24×6 ou 12×5)
- Thresholds : configurer
Advanced configuration → Thresholdssur les widgets single value
📸 Livrable de la section
Section intitulée « 📸 Livrable de la section »Une fois ton dashboard fait, prends un screenshot de l’état nominal. Tu l’inclueras dans le rapport.
9. Section 6 — Construire le dashboard Starlink (25 min)
Section intitulée « 9. Section 6 — Construire le dashboard Starlink (25 min) »Même exercice pour TAAF · Starlink. 7 questions cette fois :
| Q | Question opérationnelle | Widget suggéré |
|---|---|---|
| Q1 | Mon débit est-il OK ? | Single value Downlink Mbps avec seuils |
| Q2 | La latence est-elle nominale ? | Single value PoP latency |
| Q3 | Combien de sats je vois (redondance) ? | Single value Satellites avec seuils |
| Q4 | Y a-t-il une obstruction physique ? | Single value Obstruction ‰ + graph |
| Q5 | Quelle qualité du lien (perte de paquets) ? | Time-series graph Drop rate |
| Q6 | Quel est l’état actuel du dishy ? | Single value Dish state |
| Q7 | Y a-t-il un problème actif sur Starlink ? | Problems widget filtré |
📸 Livrable
Section intitulée « 📸 Livrable »Screenshot du dashboard Starlink en état nominal.
10. Section 7 — Valider avec le simulateur (15 min)
Section intitulée « 10. Section 7 — Valider avec le simulateur (15 min) »C’est le moment de vérité : tes triggers et dashboards reflètent-ils bien la réalité ?
10.1 Lancer le simulateur
Section intitulée « 10.1 Lancer le simulateur »Dans un nouveau terminal :
make app# → ouvre http://localhost:5050L’app web cockpit s’ouvre. Tu as :
- Boutons scénarios one-shot (Dégrader / LOS / Outage / Obstruction / Restaurer)
- Bouton ▶ Démarrer simulation (cycle complet pass+gap AegisSat + événements aléatoires Starlink)
- État live des 2 satellites
- Journal des derniers événements
10.2 Test scénarios one-shot
Section intitulée « 10.2 Test scénarios one-shot »- Clique 🟡 Dégrader AegisSat → attends 30s → ton dashboard AegisSat doit montrer le signal à
-110 dBmet trigger T2 actif - Clique 🔴 LOS AegisSat → trigger T1 (Link DOWN) + T4 (no sat) actifs
- Clique 🟢 Restaurer AegisSat → triggers résolvent
Refais le cycle avec Starlink : Obstruction → Outage → Restaurer.
10.3 Test simulation continue
Section intitulée « 10.3 Test simulation continue »Click ▶ Démarrer simulation. Laisse tourner 15 minutes minimum pour voir un pass complet AegisSat :
- L’élévation monte de 0° → 70° → 0° (visible sur ton graph Q4 dashboard AegisSat)
- Signal suit (passe nominal → degraded en début/fin de pass → los entre pass)
- Starlink subit des obstructions et outages aléatoires (visible sur ton graph Q5 dashboard Starlink)
10.4 Vérifie ce qui te paraissait évident
Section intitulée « 10.4 Vérifie ce qui te paraissait évident »→ Si certains widgets ne bougent pas alors qu’ils devraient → c’est qu’ils ne lisent pas le bon item ou que le type d’affichage ne convient pas. Itère.
❓ Question 6 (1 pt)
Section intitulée « ❓ Question 6 (1 pt) »Pendant la simulation continue, tu observes que le widget
Drop rate Starlinkest presque toujours à 0 sauf de rares pics. Est-ce :
- Un bug du simulator (trop conservateur) ?
- Le comportement attendu d’un Starlink en bonne condition ?
- Un défaut de configuration de l’item Zabbix ?
Explique pourquoi et propose une condition d’alerte pertinente (cf T7) basée sur cette observation.
11. Synthèse finale (1 pt)
Section intitulée « 11. Synthèse finale (1 pt) »Tu présentes ton lab à un opérateur SOC TAAF qui découvre la supervision satellite. En 7-10 lignes, vends-lui :
- Pourquoi tu as 2 dashboards séparés (plutôt qu’un seul)
- Quelle est la différence fondamentale entre superviser AegisSat (LEO unique) et Starlink (constellation)
- Quel trigger te paraît le plus critique à monitorer en prod, et pourquoi
12. Livrables & barème
Section intitulée « 12. Livrables & barème »Pratique — /13
Section intitulée « Pratique — /13 »| # | Livrable | Forme | Pts |
|---|---|---|---|
| 1 | Proxy Proxy-Concordia configuré + 2 hosts montés et Online | Screenshot Configuration → Hosts | 2 |
| 2 | 4 triggers AegisSat fonctionnels (T1-T4) | Screenshot Configuration → Triggers | 2 |
| 3 | 4 triggers Starlink fonctionnels (T5-T8) | Idem | 2 |
| 4 | Dashboard TAAF · AegisSat répondant aux Q1-Q6 | Screenshot dashboard + export YAML | 3 |
| 5 | Dashboard TAAF · Starlink répondant aux Q1-Q7 | Idem | 3 |
| 6 | Démo simulation : screenshot dashboard en état dégradé | Screenshot pendant LOS ou Outage | 1 |
Théorique — /7
Section intitulée « Théorique — /7 »| # | Item | Pts |
|---|---|---|
| Q1 | 2 stacks Docker — raison technique + pédagogique | 1 |
| Q2 | Drop rate vs obstruction — exemples croisés | 1 |
| Q3 | Macro {$SNMP_COMMUNITY} au host (pas template) | 1 |
| Q4 | snmpwalk + value_type analyse | 1 |
| Q5 | Expression trigger fragile (last()) vs robuste (avg(5m)) | 1 |
| Q6 | Drop rate = 0 + observation — bug, comportement attendu ou défaut config | 1 |
| Synthèse | SOC pitch (7-10 lignes) | 1 |
Total : /20
Section intitulée « Total : /20 »🛠️ Troubleshooting
Section intitulée « 🛠️ Troubleshooting »| Symptôme | Cause probable | Fix |
|---|---|---|
Items en Not supported | Macro {$SNMP_COMMUNITY} absente | Tab Macros host → ajouter {$SNMP_COMMUNITY} = aegissat/nominal |
Proxy Last seen: Never | Le Proxy n’arrive pas à joindre le Server | Vérifier make status, docker logs zabbix-proxy-concordia |
| Dashboard widget graph vide | Le widget cherche les mauvaises data | Edit widget → vérifier Data set host + item matche le host |
| Simulation web : “console inaccessible” | zabbix-proxy-lab pas démarré | make proxy-up ou make up |
| Triggers ne se déclenchent pas | Threshold mal calibré, ou expression non-fonctionnelle | Tester l’expression dans Configuration → Triggers → Expression constructor |
📚 Pour aller plus loin
Section intitulée « 📚 Pour aller plus loin »- Comparaison satellite réelle 2026 : Inmarsat BGAN (492 kbps, 1.3s latency) vs Iridium (1.4 Mbps, 100ms) vs Starlink (200 Mbps, 30ms). Voir le TP bonus “Wrapper HTTP Starlink + Grafana” pour traiter du non-SNMP.
- MIBs vendor : générer des templates Zabbix depuis une MIB constructeur avec mib2zabbix
- Zabbix Proxy en mode actif : pattern alternatif pour environnements firewalled