跳转至

Diff Agent

Diff Agent 检测两次快照之间的变化。可比较任意运维表 — 拓扑链接、BGP 邻居、OSPF 状态、接口状态或原始配置。

功能声明

ID 声明 状态
C-NE-26 diff_topology_drift 检测快照间链路 up/down 状态变化 🔶 需设备环境
C-NE-27 diff_sql_state 可比较任意表在两个 snapshot ID 间的差异 🔶 需设备环境

使用场景

  • "昨天以来网络有什么变化?"
  • "比较最近两次快照的 BGP 邻居"
  • "维护窗口以来有链路断开吗?"
  • "显示 R1 的配置差异"

工具

工具 用途
diff_sql_state 用 SQL EXCEPT 比较任意表在两个 snapshot_id 间的差异
diff_topology_drift 物理链路状态变化(up → down、down → up)
diff_routing_drift 路由变化:丢失前缀、下一跳改变、AS-PATH 变化
diff_configs 原始配置文件比较(unified diff)

工作原理

diff_sql_state

最灵活的工具 — 比较任意表或视图在两个快照间的差异:

diff_sql_state(
    table: str,           # 表名或视图名
    snapshot_old: str,     # T1 snapshot_id(之前)
    snapshot_new: str,     # T2 snapshot_id(之后)
    key_columns: list[str] # 标识唯一行的列
)

内部使用 EXCEPT 查找新增、删除或变更的行:

-- T2 有但 T1 没有的行(新增或变更)
SELECT * FROM table WHERE snapshot_id = :t2
EXCEPT
SELECT * FROM table WHERE snapshot_id = :t1

diff_topology_drift

拓扑变化专用:

  • 断开的链路(T1 存在,T2 缺失或 down)
  • 恢复的链路(T1 缺失或 down,T2 存在且 up)
  • 接口变化(速率、双工、错误计数)

diff_routing_drift

路由变化专用:

  • 丢失前缀 — T1 有但 T2 没有的路由
  • 新增前缀 — T2 有但 T1 没有的路由
  • 下一跳漂移 — 同一前缀,不同下一跳
  • AS-PATH 变化 — BGP 路径属性漂移

diff_configs

两次快照间 show running-config 原始文本比较,输出 unified diff 格式。


示例

olav --agent ops "最近两次快照的 BGP 邻居有什么变化?"

编排器:

  1. 路由到 Diff agent
  2. Diff 查询最近两个 snapshot ID
  3. v_bgp_neighbors_auto 执行 diff_sql_state
  4. 返回新增/删除/变更的 BGP 会话表