跳转至

监控 API:事件、时间线与状态

本页是 Topolograph REST API 为受监控的图计算的衍生字段的参考文档: 事件时间线(波次)、图的 status,以及事件的 object_status。它解释了 每个计算值的含义。

事件时间线(波次)

事件时间线将节点/主机的 up/down 事件按时间顺序分组为波次(wave), 以便您能够描述一次网络事故的经过(例如:"不稳定始于 T 时刻,源自设备 X; 设备 Y 出现了一阵抖动;在 T+n 时重新收敛"),而无需逐条查看数百条原始事件。 分组计算在服务端完成。

可通过 Topolograph REST API 获取:

GET /api/events/{graph_time}/adjacency/timeline
    ?last_minutes=<int>       (optional)
    ?start_time=<ISO8601>     (optional, e.g. 2025-06-30T20:00:00Z)
    ?end_time=<ISO8601>       (optional)
    ?page=<int>               (optional, default 1)
    ?per_page=<int>           (optional, default 20)

waves 列表是分页的;响应中包含一个 pagination 区块 (pageper_pagetotaltotal_pages)。

事件只存在于受 watcher 监控的图上。响应只包含波次摘要(不包含嵌套的 事件数组)。要获取某个波次的具体事件,需带上该波次的 start_ts/end_ts 重新查询 Topolograph API 端点 GET /api/events/{graph_time}/adjacency

波次是如何检测的

事件被放置在一条统一的时间线上,并根据事件之间的静默时间被切分为多个波次: 当到下一个事件的间隔超过 gap_multiplier * median_gap_sec 时,就开始一个新的 波次。使用的是中位数间隔(而非平均值),这样单次长时间的平静期就不会 扭曲这个阈值。

字段 含义
gap_multiplier 用于切分波次的乘数(默认 5)。
median_gap_sec 连续事件之间间隔秒数的中位数(对突发事件具有鲁棒性)。

每个波次的字段

字段 含义
wave_number 波次的序号,从 1 开始。
start_ts / end_ts 该波次第一个/最后一个事件的 ISO 8601(...Z)时间戳。可复用为 start_time/end_time 来获取该波次的事件。
duration_sec 从该波次第一个事件到最后一个事件的秒数。
event_count 该波次中的事件数量。
distinct_devices 该波次中涉及的唯一设备数量。
trigger_device 该波次中第一个事件所属的设备。
pattern 波次分类(见下文)。
converged 如果该波次中所有下线的设备都在查询的时间窗口内恢复(后续出现了 up),则为 true。窗口 end_time 之后发生的恢复是不可见的,因此即使网络之后在窗口外恢复了,某个波次也可能显示为 converged: false

波次模式

pattern 根据设备状态发生的变化对波次进行分类。它对应于 Topolograph API GET /api/graph/{graph_time}/status 返回的图级别 status

pattern 含义 示例 相关的图状态
outage 至少有一台设备在该波次结束时仍处于 down 状态(下线后未恢复)。 R1 down(之后没有 up);R1 down, R2 down then up(R1 仍处于 down) critical
flap 所有下线的设备都在该波次内恢复上线。与设备数量无关:1 台设备 down 后 up,或 100 台设备各自 down 后 up,都属于 flap R1 down then upR1..R100 each down then up warning
up 只有 up 事件,该波次内没有任何设备下线(恢复或全新的邻接关系)。 R1 upR2 up ok

响应示例

{
  "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 }
}

图状态

Topolograph API GET /api/graph/{graph_time}/status 会返回该图的整体 status,根据其连通性和事件计算得出。这是波次 pattern 在图级别的对应物:

status 何时出现 相关的波次 pattern
critical 已断开,或某个节点下线后恢复(持续处于 down 状态)。 outage
warning 图是连通的,但有节点下线后又上线了(一次抖动),或者存在网络下线事件或链路开销变化。 flap
ok 存在事件,但只有 up(主机/网络恢复),或者根本没有任何事件且图是连通的。 up
no_monitoring_data 该图未受 watcher 监控,因此没有事件。 不适用

status.details 还包含:

字段 含义
is_monitored 如果该图是由 watcher 提供数据的,则为 true(只有受监控的图才有事件)。
is_connected 如果拓扑图是完全连通的,则为 true
up_node_events / down_node_events 自该图被采集以来,节点 up / down 事件的计数。
all_host_up_down_events 所有主机 up/down 事件的计数(包括已恢复的)。
network_up_down_events 网络(子网)up/down 事件的计数。
adjacency_cost_change_events 链路/邻接关系开销变化的计数(度量发生变化,而非下线)。
top_unstable_devices 按降序排列的前 N 个 {device, event_count}(问题最多的设备)。

事件的 object_status

原始事件(/adjacency/networks)携带一个由 watcher 上报的开销变化推导出的 object_status

object_status 含义
down 开销变为 -1(邻接关系/网络下线)。
up 开销 -1 变为其他值(恢复或新出现)。
changed 开销在两个真实值之间变化(度量变化,不是下线/上线)。

只有 up/down 类的主机事件会计入波次changed 事件属于 链路开销变化,单独在 adjacency_cost_change_events 中报告。