Aller au contenu

API de supervision : événements, chronologie et statut

Cette page est la référence des champs dérivés que l'API REST de Topolograph calcule pour les graphes supervisés : la chronologie des événements (vagues), le status du graphe, et l'object_status de l'événement. Elle explique la signification de chaque valeur calculée.

Chronologie des événements (vagues)

La chronologie des événements regroupe les événements up/down de nœud/hôte en vagues chronologiques afin que vous puissiez raconter un incident réseau (par exemple : « l'instabilité a commencé à T sur l'équipement X ; une rafale de flapping de l'équipement Y ; reconvergence à T+n ») sans parcourir des centaines d'événements bruts. Le regroupement est calculé côté serveur.

Disponible via l'API REST de Topolograph à :

GET /api/events/{graph_time}/adjacency/timeline
    ?last_minutes=<int>       (optionnel)
    ?start_time=<ISO8601>     (optionnel, ex. 2025-06-30T20:00:00Z)
    ?end_time=<ISO8601>       (optionnel)
    ?page=<int>               (optionnel, défaut 1)
    ?per_page=<int>           (optionnel, défaut 20)

La liste waves est paginée ; la réponse inclut un bloc pagination (page, per_page, total, total_pages).

Les événements n'existent que pour les graphes supervisés par un watcher. La réponse contient uniquement des résumés de vagues (pas de tableaux d'événements imbriqués). Pour récupérer les événements individuels d'une vague, réinterrogez le point d'accès de l'API Topolograph GET /api/events/{graph_time}/adjacency avec les start_ts/end_ts de la vague.

Comment les vagues sont détectées

Les événements sont placés sur une seule chronologie et découpés en vagues selon le temps calme entre eux : une nouvelle vague commence quand l'écart avec l'événement suivant dépasse gap_multiplier * median_gap_sec. C'est la médiane de l'écart qui est utilisée (pas la moyenne), afin qu'une seule longue période de calme ne fausse pas le seuil.

Champ Signification
gap_multiplier Multiplicateur utilisé pour découper les vagues (défaut 5).
median_gap_sec Médiane en secondes entre événements consécutifs (robuste aux rafales).

Champs par vague

Champ Signification
wave_number Index séquentiel de la vague, commençant à 1.
start_ts / end_ts Horodatages ISO 8601 (...Z) du premier/dernier événement de la vague. Réutilisables comme start_time/end_time pour récupérer les événements de la vague.
duration_sec Secondes entre le premier et le dernier événement de la vague.
event_count Nombre d'événements dans la vague.
distinct_devices Nombre d'équipements uniques dans la vague.
trigger_device L'équipement du premier événement de la vague.
pattern Classification de la vague (voir ci-dessous).
converged true si chaque équipement resté down dans la vague récupère (un up ultérieur) dans la fenêtre temporelle demandée. Une récupération après end_time n'est pas visible, donc une vague peut afficher converged: false même si le réseau a récupéré plus tard, hors de la fenêtre.

Modèles de vague

pattern classe une vague selon ce qui est arrivé à l'état des équipements. Cela reflète le status au niveau du graphe de l'API Topolograph GET /api/graph/{graph_time}/status :

pattern Signification Exemple Statut de graphe associé
outage Au moins un équipement reste down à la fin de la vague (tombé et non revenu). R1 down (pas de up ultérieur) ; R1 down, R2 down puis up (R1 toujours down) critical
flap Tout ce qui est tombé est revenu up au sein de la vague. Indépendant du nombre d'équipements : 1 équipement down puis up, ou 100 équipements chacun down puis up, sont tous deux flap. R1 down puis up ; R1..R100 chacun down puis up warning
up Uniquement des événements up, rien n'est tombé dans la vague (une récupération ou une toute nouvelle adjacence). R1 up, R2 up ok

Exemple de réponse

{
  "graph_time": "10May2025_17h03m00s_7_hosts_ospfwatcher",
  "watcher_name": "demo-watcher",
  "gap_multiplier": 5,
  "median_gap_sec": 10.0,
  "waves": [
    {
      "wave_number": 1,
      "start_ts": "2025-05-10T17:09:24.707000Z",
      "end_ts": "2025-05-10T17:11:27.707000Z",
      "duration_sec": 123.0,
      "event_count": 10,
      "distinct_devices": 6,
      "trigger_device": "10.1.1.3",
      "pattern": "outage",
      "converged": false
    }
  ],
  "pagination": { "page": 1, "per_page": 20, "total": 1, "total_pages": 1 }
}

Statut du graphe

L'API Topolograph GET /api/graph/{graph_time}/status renvoie un status global pour le graphe, calculé à partir de sa connectivité et de ses événements. C'est le pendant, au niveau du graphe entier, du pattern d'une vague :

status Quand pattern de vague associé
critical Le graphe est déconnecté, ou un nœud est tombé et n'est pas revenu (un down persistant). outage
warning Le graphe est connecté, mais un nœud est tombé puis revenu (un flap), ou il y a des événements de réseau down ou des changements de coût de lien. flap
ok Des événements existent mais sont uniquement up (récupérations d'hôte/réseau), ou il n'y a aucun événement et le graphe est connecté. up
no_monitoring_data Le graphe n'est pas supervisé par un watcher, il n'a donc aucun événement. n/a

status.details inclut aussi :

Champ Signification
is_monitored true si le graphe est alimenté par un watcher (seuls les graphes supervisés ont des événements).
is_connected true si le graphe de topologie est entièrement connecté.
up_node_events / down_node_events Nombre d'événements up / down de nœud depuis la collecte du graphe.
all_host_up_down_events Nombre total d'événements up/down d'hôte (y compris ceux récupérés).
network_up_down_events Nombre d'événements up/down de réseau (sous-réseau).
adjacency_cost_change_events Nombre de changements de coût de lien/adjacence (métrique modifiée, pas un down).
top_unstable_devices Top N {device, event_count} triés par ordre décroissant (les pires équipements).

object_status d'événement

Les événements bruts (/adjacency, /networks) portent un object_status dérivé du changement de coût rapporté par le watcher :

object_status Signification
down Le coût est passé à -1 (adjacence/réseau tombé).
up Le coût est passé de -1 à autre chose (récupéré ou apparu).
changed Le coût a changé entre deux valeurs réelles (changement de métrique, pas un down/up).

Seuls les événements d'hôte up/down alimentent les vagues ; les événements changed sont des changements de coût de lien et sont rapportés séparément sous adjacency_cost_change_events.