OSPF Watcher¶
OSPF Watcher 是一款用于监控 OSPF 拓扑变化的工具。它通过 GRE 邻接关系或 BGP-LS被动监听 OSPF 控制平面——记录每一次变化,并/或(通过 Logstash 或 Fluent Bit)将其导出到 ELK、Zabbix、WebHooks,以及 Topolograph 监控仪表盘。一切都以 容器形式提供,因此启动速度很快。

检测到的事件¶
- OSPF 邻居邻接关系 Up/Down
- OSPF 链路开销变化
- OSPF 网络的出现/消失
- OSPF TE 属性(通过 opaque LSA 或 BGP-LS):管理组、最大链路带宽、最大 可预留带宽、未预留带宽、TE 默认度量,以及共享风险链路组(SRLG)
- OSPF 节点角色变化:路由器成为(或不再是)ABR(区域边界路由器)、 ASBR(AS 边界路由器),或进入/退出 max-metric(RFC 3137 stub router——所有 transit 链路都以最大度量通告,以将 transit 流量引导离开该 路由器;这是 OSPF 中与 IS-IS overload bit 相对应的机制)



建立连接¶
连接本身的建立方式记录在获取拓扑数据中:
- GRE 模式 —— FRR 通过 GRE 隧道建立 OSPF 邻接关系。 XDP OSPF 过滤器保证 Watcher 始终保持仅监听状态。
- BGP-LS 模式 —— 路由器通过 BGP-LS 导出 OSPF
拓扑;GoBGP + 转发器为 Watcher 提供数据。需要镜像
vadims06/ospf-watcher:v3.1.0或更新版本。
兼容性
OSPF 网络变化从 topolograph v2.27 或更高版本开始会显示在 Topolograph 图上。
快速实验环境(containerlab)¶
containerlab/frr01 下提供了一个现成的实验环境,让您无需任何真实硬件即可
观察 OSPF 变化:

在这个最小化的搭建中,Watcher 会将拓扑变化打印到文本文件中。添加 Topolograph 和/或 ELK 即可对其进行可视化和搜索——参见部署规模表格。
没有设备?使用测试模式
设置 TEST_MODE=True 即可端到端回放演示 LSDB 和示例事件(邻接关系丢失、
度量变化)。
事件日志格式¶
Watcher 事件是简单的逗号分隔行。一条主机(邻接关系)事件:
2023-01-01T00:00:00Z,demo-watcher,host,10.10.10.4,down,10.10.10.5,01Jan2023_00h00m00s_7_hosts,0,1234,192.168.145.5
10.10.10.5检测到主机10.10.10.4(接口地址为192.168.145.5,位于 区域0/ AS1234)在该时间戳下线。
一条度量变化事件:
2023-01-01T00:00:00Z,demo-watcher,network,192.168.13.0/24,changed,old_cost:10,new_cost:12,10.10.10.1,01Jan2023_00h00m00s_7_hosts,0.0.0.0,1234,internal,0
10.10.10.1检测到内部 stub 网络192.168.13.0/24的度量从10变为12。
一条节点标志变化事件:
2023-01-01T00:00:00Z,demo-watcher,node,10.1.1.3,changed,attr:abr,old:0,new:1,10.1.1.3,01Jan2023_00h00m00s_7_hosts,0,1234
10.1.1.3将自己通告为 ABR(abr0→1)。每个变化的标志会发出一条 事件(OSPF 对应abr、asbr、maxmetric;IS-IS 对应overload、attached)。进入 max-metric 状态还会为每条链路发出一条metric事件, 因为每条 transit 链路的开销都会跳变到其最大值。
这些记录就是 Logstash/Fluent Bit 转发给 ELK、Zabbix 和 Webhooks 的内容。
仅监听模式(XDP)¶
在 GRE 模式下,Watcher 运行一个真实的 FRR 实例——因此至关重要的是,它绝不能 向您的 OSPF 域注入前缀。XDP 过滤器会检查 FRR 试图发送的每一条 OSPF 消息, 并丢弃任何通告了超出 Watcher 自身 GRE 隧道网络范围的内容。

例如,如果 8.8.8.8/32 被意外地在 Watcher 上重分发,该 LSA 5 会被 XDP 丢弃,
永远不会到达网络。同样的保护机制也适用于 Database Description 消息,以及
LSA 1 中多余的 stub 网络。
常用命令:
# Watch XDP drop logs
sudo cat /sys/kernel/debug/tracing/trace_pipe
# Confirm the XDP program is attached to the Watcher's interface
ip l show dev it-vhost1025 # look for "prog/xdp id ..."
# Enable / disable the filter
sudo docker run -it --rm -v ./:/home/watcher/watcher/ --cap-add=NET_ADMIN \
-u root --network host vadims06/ospf-watcher:latest \
python3 ./client.py --action enable_xdp --watcher_num <num>
故障排查¶
GRE 模式 —— 确认邻接关系:
您的设备应该显示为一个邻居。如果没有,请运行 Watcher 附带的诊断脚本 (参见代码仓库的故障排查部分)。
BGP-LS 模式 —— Watcher 只有在 BGP 会话建立之后才会向 Topolograph 提交数据。 检查方法:
docker logs watcher<num>-bgpls-ospf-bgplswatcher
docker exec -it watcher<num>-bgpls-ospf-bgplswatcher gobgp neighbor
docker exec -it watcher<num>-bgpls-ospf-bgplswatcher gobgp global rib -a ls
完整的验证流程请参见 BGP-LS 会话。
相关内容: IS-IS Watcher · ELK / Kibana · Zabbix · Webhooks