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

TP — Supervision SNMP satellite avec Zabbix (AegisSat + Starlink)

Acte 1 · Monitoring Zabbix · SNMP · Satellite · AegisSat · Starlink

Auteur : Thibaut Fontaine — Kodetis Institution : Université de la Réunion Date : 2026



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

  1. Modèles de satellites : différence LEO unique (pass+gap) vs constellation (toujours en ligne avec handovers)
  2. Métriques SATCOM : signal level, élévation, drop rate, obstruction, latence — leur signification physique
  3. Triggers Zabbix : écrire des conditions métier sur des items SNMP réels
  4. Dashboards métier : structurer des panels pour répondre à des questions opérationnelles précises
  5. Validation par simulation : utiliser un script pour faire vivre les sat et vérifier ses triggers/dashboards
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

TermeDéfinition courte
LEOLow Earth Orbit — satellite en orbite basse (< 2000 km). Vitesse ~27 000 km/h, période ~90 min
PassPériode pendant laquelle un satellite LEO est visible depuis une station au sol (typique 10-15 min)
GapPériode entre deux passes — sat invisible, pas de communication possible
ÉlévationAngle entre l’horizon et le satellite vu depuis la station. 0° = horizon, 90° = zénith
RSSIReceived Signal Strength Indicator — puissance signal reçue en dBm (plus négatif = plus faible)
LOSLoss Of Signal — satellite hors visibilité, lien down
HandoverBascule d’un satellite à un autre dans une constellation (typique Starlink : toutes les 15s)
Drop rateTaux de paquets perdus, mesuré en (pour mille)
ObstructionFraction du ciel visible bloquée par un obstacle (arbre, neige, bâtiment), mesurée en
PoPPoint of Presence — passerelle terrestre vers Internet de l’opérateur satellite
TriggerCondition Zabbix qui se déclenche quand une expression devient vraie (ex: last(.../signal) < -120)

Fenêtre de terminal
git clone git@gitlab.com:kds-formation/zabbix-lab.git
cd zabbix-lab
make up

Attendre ~60s. Vérifier :

Fenêtre de terminal
make status
# Tous containers en "Up (healthy)"
URLLoginQuoi
http://localhost:8080Admin / zabbixZabbix Frontend (ton outil principal)
http://localhost:5050App simulateur (à lancer plus tard : make app)
http://localhost:3001Console SCADA technicien (vue secondaire, utile pour debug)

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.

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étriqueOIDSignificationValeur nominale
Signal level.1.3.6.1.4.1.99999.1.1.0Puissance reçue en dBm-85 dBm
Link state.99999.1.2.00=DOWN · 1=UP · 2=ACQUIRING1
Bytes received.99999.1.3.0Counter32 octets reçuscroissant
Bytes transmitted.99999.1.4.0Counter32 octets émiscroissant
Sat in view.99999.1.5.0Identifiant sat visibleAEGIS-1A
Elevation.99999.1.6.0Angle d’élévation en degrés47°

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étriqueOIDSignificationValeur nominale
Dish state.1.3.6.1.4.1.50000.1.1.13.0CONNECTED · OBSTRUCTED · SEARCHINGCONNECTED
PoP latency.50000.1.1.4.0Latence ms vers le PoP (Sydney pour Concordia)32 ms
Downlink.50000.1.1.5.0Débit descendant Mbps215 Mbps
Drop rate.50000.1.1.3.0Paquets perdus en ‰0-5 ‰
Obstruction.50000.1.1.7.0% du ciel visible masqué en ‰3 ‰
Satellites.50000.1.1.12.0Nb de sats actuellement linkés4

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) »

Administration → Proxies → Create proxy

ChampValeur
Proxy nameProxy-Concordia
Proxy modePassive
Addresszabbix-proxy-concordia
Port10051

Update. Attends ~30s, refresh → State: Online (vert).

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.

Configuration → Hosts → coche aegissat + starlinkMass updateMonitored by = ProxyProxy-Concordia → Apply.

Quelle est la valeur de {$SNMP_COMMUNITY} sur l’host aegissat ? 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.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-Concordia est Online

Depuis ton hôte Mac :

Fenêtre de terminal
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

Lance un snmpwalk sur aegissat/nominal localhost:1161 .1.3.6.1.4.1.99999. Que voit-on ? Pourquoi le sysUpTime augmente-t-il à chaque requête alors que signal reste 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.

Pour chaque trigger : Configuration → Hosts → aegissat → Triggers → Create trigger.

#DescriptionSeverityExpression (à toi de la trouver)
T1Link DOWNHighbasé sur aegissat.link
T2Signal très faible (< -120 dBm)Averagebasé sur aegissat.signal
T3Élévation basse (< 10°)Warningbasé sur aegissat.elev
T4Sat hors visu (no sat in view)Highbasé sur aegissat.sat
#DescriptionSeverityBasé sur
T5Outage (0 sats linkés)Highstarlink.satellites
T6Obstruction > 5% (50‰)Averagestarlink.obstruction
T7Drop rate > 10% (100‰)Averagestarlink.drop
T8Latency anormale (> 100 ms)Warningstarlink.latency

Pour le trigger T2 (Signal < -120 dBm), écris 2 versions de l’expression :

  1. Une qui se déclenche sur la dernière valeur uniquement → fragile aux faux positifs
  2. 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 :

QQuestion opérationnelleType de widget suggéré
Q1Le lien est-il UP maintenant ?Single value Link state + Signal level
Q2Quel satellite je vois ?Single value Sat in view
Q3Le sat est-il proche de l’horizon (lien va couper bientôt) ?Single value Elevation avec seuils colorés
Q4Quel pattern de pass au cours du temps ?Time-series graph Elevation (montre les pass + gaps)
Q5Quel volume de data échangé ?Time-series graph Bytes in/out (bps)
Q6Y a-t-il un problème actif sur AegisSat ?Problems widget filtré sur l’host
  • 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 → Thresholds sur les widgets single value

Une fois ton dashboard fait, prends un screenshot de l’état nominal. Tu l’inclueras dans le rapport.


Section intitulée « 9. Section 6 — Construire le dashboard Starlink (25 min) »

Même exercice pour TAAF · Starlink. 7 questions cette fois :

QQuestion opérationnelleWidget suggéré
Q1Mon débit est-il OK ?Single value Downlink Mbps avec seuils
Q2La latence est-elle nominale ?Single value PoP latency
Q3Combien de sats je vois (redondance) ?Single value Satellites avec seuils
Q4Y a-t-il une obstruction physique ?Single value Obstruction ‰ + graph
Q5Quelle qualité du lien (perte de paquets) ?Time-series graph Drop rate
Q6Quel est l’état actuel du dishy ?Single value Dish state
Q7Y a-t-il un problème actif sur Starlink ?Problems widget filtré

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é ?

Dans un nouveau terminal :

Fenêtre de terminal
make app
# → ouvre http://localhost:5050

L’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
  1. Clique 🟡 Dégrader AegisSat → attends 30s → ton dashboard AegisSat doit montrer le signal à -110 dBm et trigger T2 actif
  2. Clique 🔴 LOS AegisSat → trigger T1 (Link DOWN) + T4 (no sat) actifs
  3. Clique 🟢 Restaurer AegisSat → triggers résolvent

Refais le cycle avec Starlink : Obstruction → Outage → Restaurer.

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)

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

Pendant la simulation continue, tu observes que le widget Drop rate Starlink est presque toujours à 0 sauf de rares pics. Est-ce :

  1. Un bug du simulator (trop conservateur) ?
  2. Le comportement attendu d’un Starlink en bonne condition ?
  3. 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.


Tu présentes ton lab à un opérateur SOC TAAF qui découvre la supervision satellite. En 7-10 lignes, vends-lui :

  1. Pourquoi tu as 2 dashboards séparés (plutôt qu’un seul)
  2. Quelle est la différence fondamentale entre superviser AegisSat (LEO unique) et Starlink (constellation)
  3. Quel trigger te paraît le plus critique à monitorer en prod, et pourquoi

#LivrableFormePts
1Proxy Proxy-Concordia configuré + 2 hosts montés et OnlineScreenshot Configuration → Hosts2
24 triggers AegisSat fonctionnels (T1-T4)Screenshot Configuration → Triggers2
34 triggers Starlink fonctionnels (T5-T8)Idem2
4Dashboard TAAF · AegisSat répondant aux Q1-Q6Screenshot dashboard + export YAML3
5Dashboard TAAF · Starlink répondant aux Q1-Q7Idem3
6Démo simulation : screenshot dashboard en état dégradéScreenshot pendant LOS ou Outage1
#ItemPts
Q12 stacks Docker — raison technique + pédagogique1
Q2Drop rate vs obstruction — exemples croisés1
Q3Macro {$SNMP_COMMUNITY} au host (pas template)1
Q4snmpwalk + value_type analyse1
Q5Expression trigger fragile (last()) vs robuste (avg(5m))1
Q6Drop rate = 0 + observation — bug, comportement attendu ou défaut config1
SynthèseSOC pitch (7-10 lignes)1

SymptômeCause probableFix
Items en Not supportedMacro {$SNMP_COMMUNITY} absenteTab Macros host → ajouter {$SNMP_COMMUNITY} = aegissat/nominal
Proxy Last seen: NeverLe Proxy n’arrive pas à joindre le ServerVérifier make status, docker logs zabbix-proxy-concordia
Dashboard widget graph videLe widget cherche les mauvaises dataEdit 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 pasThreshold mal calibré, ou expression non-fonctionnelleTester l’expression dans Configuration → Triggers → Expression constructor

  • 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