Aller au contenu

Topologie & architecture

/topology affiche un graphe de nœuds (serveurs, équipements réseau, services externes) et arêtes (liaisons entre eux). Deux sources alimentent ce graphe :

  • Auto-détecté — Les agents Monsys signalent leurs propres IPs et ports d’écoute ; le hub déduit les liaisons potentielles entre les agents dans le même sous-réseau
  • Manuel — Ajoutez les services externes qui ne tournent pas d’agent (SaaS, uplink ISP, CDN, fournisseur cloud externe) via l’interface utilisateur ou l’API

Modèle de données

TableCe qu’il stocke
topology_nodesServeurs, VMs, commutateurs, services externes — 30+ types de nœuds
topology_edgesLiaisons avec protocole, port, encryption, importance
topology_zonesZones réseau / VLANs / sous-réseaux / VPC cloud
topology_certificatesCertificats TLS liés aux arêtes (CN, SAN, expiration)
topology_node_configsConfigurations spécifiques à l’appareil (markdown), historique de versions
topology_snapshotsSauvegardes JSONB pointues pour suivre les changements
topology_changesJournal d’audit append-only de qui a fait quoi et quand
topology_detected_connectionsTable intermédiaire : auto-détecté mais pas encore documenté

Isolement du locataire via Postgres RLS — Chaque ligne a un tenant_id et la politique correspond à current_setting('app.current_tenant') sur chaque requête.

Auto-bootstrap

TopologyMatcherWorker tourne toutes les 10 minutes et :

  1. Crée un topology_node pour chaque agent actif qui n’en a pas encore (étiquette = nom, type = serveur, géré par Monsys = vrai)
  2. Étend agent_connections × inventory_ports (seulement non-loopback) en lignes de détection par port dans topology_detected_connections

Un nouveau agent Monsys apparaît donc dans le diagramme dès qu’il pousse l’inventaire (~5 minutes après l’installation).

Détection vs. documentation

Les liaisons auto-détectées ont is_documented = false. Dans la tab Détection de l’interface utilisateur (ou GET /api/v1/topology/detected?unmatched=1) vous voyez pour chaque liaison :

  • Agent source + IP destination + port + protocole
  • Première/ dernière fois vue
  • Bouton Promote → pour choisir un nœud cible. Cela crée une vraie topology_edge avec is_documented = true.

Ainsi, le diagramme grandit de manière organique : chaque nouvelle liaison a un moment “approuver cela” pour l’opérateur.

API

MéthodeChemin
GET /api/v1/topology/nodesListe des nœuds avec statut agent + dernier vu
POST /api/v1/topology/nodesNouveau nœud (manuel — SaaS, commutateur, …)
PATCH /api/v1/topology/nodes/:idMettre à jour (blanc liste sur champs éditables)
DELETE /api/v1/topology/nodes/:idSupprimer
GET /api/v1/topology/edges · POST · DELETE /:idCRUD arêtes
GET /api/v1/topology/zones · POSTCRUD zones
GET /api/v1/topology/detected[?unmatched=1]Liste auto-détectée
POST /api/v1/topology/detected/:id/promotePromouvoir → arête
GET /api/v1/topology/snapshots · POSTSauvegardes
GET /api/v1/topology/export/mermaidTéléchargement de graphique Mermaid

Interface utilisateur

L’interface utilisateur a 4 onglets :

  • Diagramme — Canvas React Flow avec drag-to-position (position stockée par drag-end via PATCH /nodes/:id), drag-to-connect entre nœuds (créer nouvelle arête), clavier Delete pour supprimer les arêtes
  • Détection — flux de promotion (voir ci-dessus)
  • Sauvegardes — Sauvegardes pointues avec comptage de nœuds/edges
  • Nœuds & arêtes — Vue tableau de lecture+suppression

Style des arêtes :

  • Solide vert = chiffré et documenté
  • Rouge solide + animé = critique
  • Orange tracé = auto-détecté mais pas documenté

Liens connexes

  • Diagrammes — Utilise cette topologie comme entrée pour l’export PNG/SVG/PDF avec algorithmes de disposition
  • Rayon d’explosion — Utilise les mêmes arêtes pour la portée 3-hops par hôte