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 格式。
示例¶
编排器:
- 路由到 Diff agent
- Diff 查询最近两个 snapshot ID
- 对
v_bgp_neighbors_auto执行diff_sql_state - 返回新增/删除/变更的 BGP 会话表