IS-IS 运维实战

IS-IS Watcher 实战手册

每次只做一处受控变更,预测其结果,并从 Watcher 事件到 Topolograph 逐层核对同一事实。

开始实战

相关链接: IS-IS Watcher - 仓库与部署指南 · Topolograph

1. 本手册的使用方式

每个练习:做一处变更,预测 IS-IS 结果,观察 Watcher 事件,然后在 Topolograph 监控页面、SDK 中,以及在关联练习中在 agent 的回答里找到同一事实。下一个独立练习前先还原实验环境。

isis01 是单区域(49.0001,AS 65100)内的六路由器 FRR 域。router2-router3 运行 Level-1-2;router3router6,以及 router3 通往 router4/router5 LAN 的一段,均为仅 Level-2。Watcher 通过 router1 上的一条 Level-2 邻接接入,并借助 IS-IS 动态主机名 TLV 将每个 System ID 解析为主机名,因此事件中显示 router2router3router6 而非 0100.1001.000x

  1. Watcher CSV 行是确定性的源事件。
  2. 监控页面与 SDK 证明事件已被接收且可查询。
  3. agent 仅用于把多个事件关联成一次事件,绝不替代源行。

2. 六路由器实验环境的启动与验证

运行 IS-IS Watcher 仓库中基于 GRE 的公开 isis01 拓扑。prepare.sh 还会创建 isis-br-dr 网桥并加载 IS-IS TE 所需的 MPLS 内核模块。

先用 sudo clab inspect --all 检查是否已有实验环境在运行。若列出残留的 isis01,请在 containerlab/isis01/ 目录下用 sudo clab destroy --topo isis01.clab.yml --cleanup 拆除后再重新部署——指明拓扑文件,以免影响其他实验环境。

命令

cd containerlab/isis01
sudo clab inspect --all
sudo clab destroy --topo isis01.clab.yml --cleanup   # only if a stale isis01 is listed
sudo ./prepare.sh
sudo clab deploy --topo isis01.clab.yml
sudo docker logs clab-isis01-isis-watcher
sudo tail -f watcher/logs/watcher1.isis.log
需确认项 继续前需确认的事实
  • 六个路由器容器加上 watcher 均已运行:docker ps --filter name=clab-isis01 列出 clab-isis01-router1..6clab-isis01-isis-watcherState 全部为 Up
  • watcher 已获得 LSDB 并在抓包:docker logs clab-isis01-isis-watcher 显示 ISIS LSDB has been receivedSniffing packets on interface: eth1
  • 邻接为 Up:docker exec clab-isis01-router1 vtysh -c 'show isis neighbor' 列出处于 Up 状态的 router3;此时第一个 Topolograph 图包含六个路由器。

回滚: 完成本手册后,在 containerlab/isis01/ 目录下用 sudo clab destroy --topo isis01.clab.yml --cleanup 删除实验环境。

3. 网络事件记录的格式

本手册使用三类事件:hostmetricnetwork。将 event_object 读作发生变化的对象,event_status 读作状态转变,event_detected_by 读作发布或探测到该事件的路由器。graph_time 是 watcher 为本次运行自定的标签,用于选定 Topolograph 图。

IS-IS 行带有一个 OSPF 行没有的 level 字段(12)——它是第三个字段,紧跟在 watcher_name 之后。把上面的 metric 行读成一句话:在 2026-09-07T06:55:14Z,watcher lab-isis01 看到 router3 重新发布其指向 router2 的 Level-1 链路,度量从 10 变为 -1(邻接丢失),接口地址为 192.168.23.2,位于区域 49.0001 / AS 65100router2 背后的身份是其 NET / System ID 49.0001.0100.1001.0002.00;因为每台路由器都发布动态主机名 TLV,watcher 才打印主机名。

单独的 hostnetwork up/down 行不带度量字段,因此 Fluent Bit 只转发配对的 changed 行。Topolograph 从 new_cost-1metric 行判断邻接中断,从 old_cost-1 的行判断邻接恢复。

  1. 字段顺序:watcher_timewatcher_namelevelevent_nameevent_objectevent_status、[度量字段]、event_detected_bygraph_timearea_numasn、[local_ip, remote_ip | subnet_type, int_ext_subtype]、sesidsrcid
  2. area_num 49.0001asn 65100 标识路由域;sesid 是 watcher 会话,srcid 是源路由器的 System ID(router10100.1001.0001)。

Watcher 日志 (CSV)

host:    2026-09-07T06:55:14.754Z,lab-isis01,1,host,router2,down,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.23.2,192.168.23.1,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
metric:  2026-09-07T06:55:14.756Z,lab-isis01,1,metric,router2,changed,old_cost:10,new_cost:-1,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.23.2,192.168.23.1,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
network: 2026-09-07T06:55:14.761Z,lab-isis01,1,network,192.168.23.0/24,changed,old_cost:10,new_cost:-1,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001

4. 事件从何而来

一次 IS-IS 变更在每个 level 上产生一行 Watcher CSV。Fluent Bit 将其转发给 Topolograph,后者存储并通过监控页面、事件 API 和 SDK 对外提供。下面每个练习都会在你可用的每个层面上核对同一事实。

  1. isis01 Watcher 日志 -> Fluent Bit CSV 解析器 -> Topolograph 接收 -> 监控页面 + 事件 API -> Topolograph SDK
  2. 监控页面:OSPF/IS-IS Real-Time Monitoring。在 Choose the graph 中按时间戳选择图,按 UTC 设置 From/To 时间窗,打开 L1L2 开关,点击 Find logsNew/Old SubnetsUp/Down LinksChanged metric 开关用于过滤所列内容。
  3. 图选择器列出 watcher 上报的每个拓扑快照——那就是 watcher 发送的拓扑。
图 07Sep2026_06h49m43s_6_hosts 的 Topolograph OSPF/IS-IS Real-Time Monitoring 控件:图选择器、From/To 时间窗、均已打开的 L1 与 L2 级别开关、New/Old Subnets、Up/Down Links 和 Changed metric 开关,以及 Find logs。Watchers Status 面板显示 "No watchers registered yet",因为 containerlab watcher 只发送拓扑而不发送心跳。

SDK 请求

from topolograph import Topolograph

topo = Topolograph(url="http://<your-topolograph>:8080",
                   username="<email>", password="<password>")
graph = topo.graphs.get(latest=True)
print(graph.graph_time, graph.protocol, graph.hosts)

SDK 输出

07Sep2026_06h49m43s_6_hosts isis {'count': 6}

5. 点到点链路上的度量变化

更改 router2 eth1 朝向 router3 的度量。IS-IS 度量是有向的,因此不能把 router3router2 的反向度量说成同一个标量。router2 eth1 没有显式的 isis metric,因此从 wide-metric 默认值 10 起步。router2-router3 是 Level-1-2 电路,因此该变更在两个 level 上都被通告。

命令

sudo docker exec clab-isis01-router2 vtysh \
  -c 'conf t' -c 'interface eth1' -c 'isis metric 222'

核对此次变更。 打开你环境中每一个可用的来源,并与下面的示例逐一核对。

Watcher 日志 变更及其回滚的 metric 与 network 行,L1 与 L2 L1 + L2

Watcher 日志 (CSV)

# router2: interface eth1 / isis metric 222
2026-09-07T06:52:15.035Z,lab-isis01,1,metric,router3,changed,old_cost:10,new_cost:222,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:52:15.037Z,lab-isis01,1,network,192.168.23.0/24,changed,old_cost:10,new_cost:222,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:52:15.045Z,lab-isis01,2,metric,router3,changed,old_cost:10,new_cost:222,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
# rollback (isis metric 10):
2026-09-07T06:52:37.514Z,lab-isis01,1,metric,router3,changed,old_cost:222,new_cost:10,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:52:37.526Z,lab-isis01,2,metric,router3,changed,old_cost:222,new_cost:10,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
监控 事件流中的 10 -> 222 度量变更

在 OSPF/IS-IS Real-Time Monitoring 中,于 Choose the graph 选择 07Sep2026_06h49m43s_6_hosts,将 From/To 时间窗设在 06:52 UTC 前后,打开 L1L2,点击 Find logs。开启 Changed metric 后,事件流显示 object router3detected by router210 -> 222——仅 router2 -> router3 方向,L1 一次、L2 一次。反向不列出。

SDK 核对 get_adjacency_events 与 get_network_events 返回相同的对象与度量 2 个事件

SDK 请求

adj = graph.events.get_adjacency_events(
    start_time="2026-09-07T06:52:14Z", end_time="2026-09-07T06:52:20Z")
net = graph.events.get_network_events(
    start_time="2026-09-07T06:52:14Z", end_time="2026-09-07T06:52:20Z")
for e in adj["adjacency_cost_change_events"]:
    print(e.event_object, e.event_detected_by, e.old_cost, "->", e.new_cost, "L" + str(e.level_number))
for e in net["network_cost_change_events"]:
    print(e.event_object, e.old_cost, "->", e.new_cost, "L" + str(e.level_number))

SDK 输出

router3 router2 10 -> 222 L1
router3 router2 10 -> 222 L2
3ffe::192:168:23:2/127 10 -> 222 L1
192.168.23.0/24 10 -> 222 L1
3ffe::192:168:23:2/127 10 -> 222 L2
192.168.23.0/24 10 -> 222 L2

metric 事件标明 router2 -> router3 方向(event_object router3event_detected_by router2),10 -> 222,两个 level 都有;直连的 IPv4 与 IPv6 子网带有同样的变化。没有反向。

询问 agent 关于 router2 的通用故障提问

提问: What happened with router2 in the last 10 minutes?

合格的回答在提问未提及 cost 或 metric 的情况下,指出 router2 -> router3 方向和两个度量值(10222),并且不声称反向 router3 -> router2 发生了变化。

回滚:router2 eth1 上执行 isis metric 10(或 no isis metric),确认反向的 222 -> 10 metricnetwork 事件。

6. 检测内部与外部前缀事件

各前缀实验独立进行。与 OSPF 不同,IS-IS 按配置的掩码通告 loopback,并以接口度量作为其开销——/24 仍是 /24,开销 10,不会被收敛为 /32 主机路由。router6 仅为 Level-2,因此其前缀只出现在 L2。

  1. 6a. 在 router2 上,interface lo / ip address 192.168.123.1/24;观察 192.168.123.0/24 up 以及 L1 与 L2 上开销 -1 -> 10
  2. 6b. 在 router6 上,interface lo / ip address 10.10.36.6/24;观察 10.10.36.0/24 up 以及 L2 上开销 -1 -> 10
  3. 6c. 在 router6 上,no ip route 6.6.6.6/32 192.168.36.3;观察 6.6.6.6/32 down 以及 L2 上开销 11 -> -1。FRR 在重分发进 IS-IS 时不设置 external 位,因此 watcher 将其标记为 internal

命令

sudo docker exec clab-isis01-router2 vtysh \
  -c 'conf t' -c 'interface lo' -c 'ip address 192.168.123.1/24'

核对此次变更。 打开你环境中每一个可用的来源,并与下面的示例逐一核对。

Watcher 日志 每个子练习一行 up/down 和一行 changed 3 个前缀

Watcher 日志 (CSV)

# 6a router2: interface lo / ip address 192.168.123.1/24
2026-09-07T06:52:52.074Z,lab-isis01,1,network,192.168.123.0/24,up,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:52:52.075Z,lab-isis01,1,network,192.168.123.0/24,changed,old_cost:-1,new_cost:10,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
# 6b router6: interface lo / ip address 10.10.36.6/24
2026-09-07T06:53:39.099Z,lab-isis01,2,network,10.10.36.0/24,up,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:53:39.099Z,lab-isis01,2,network,10.10.36.0/24,changed,old_cost:-1,new_cost:10,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
# 6c router6: no ip route 6.6.6.6/32 192.168.36.3
2026-09-07T06:54:14.533Z,lab-isis01,2,network,6.6.6.6/32,down,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:54:14.533Z,lab-isis01,2,network,6.6.6.6/32,changed,old_cost:11,new_cost:-1,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
监控 事件流中新增与撤销的前缀

在 OSPF/IS-IS Real-Time Monitoring 中选择本图,将时间窗设在 06:52-06:55 UTC 前后,打开 L1L2,点击 Find logs。开启 New/Old Subnets 后,192.168.123.0/2410.10.36.0/24 显示为新增,6.6.6.6/32 显示为撤销。

SDK 核对 get_network_events,每个子练习一个 changed 事件 3 个事件

SDK 请求

for start, end in [("2026-09-07T06:52:50Z", "2026-09-07T06:52:55Z"),
                   ("2026-09-07T06:53:37Z", "2026-09-07T06:53:42Z"),
                   ("2026-09-07T06:54:12Z", "2026-09-07T06:54:17Z")]:
    net = graph.events.get_network_events(start_time=start, end_time=end)
    for e in net["network_up_down_events"]:
        print(e.event_object, e.event_status, e.event_detected_by,
              f"{e.old_cost} -> {e.new_cost}", "L" + str(e.level_number), e.subnet_type)

SDK 输出

192.168.123.0/24 changed router2 -1 -> 10 L1 internal
192.168.123.0/24 changed router2 -1 -> 10 L2 internal
10.10.36.0/24 changed router6 -1 -> 10 L2 internal
6.6.6.6/32 changed router6 11 -> -1 L2 internal

/24 保留其掩码——不收敛为 /32。可达性是 forwarder 丢弃的 up/down 行;开销变化才是 SDK 返回的 changed 事件。router2 的 loopback 在 L1 与 L2 都能看到,router6 的仅在 L2,重分发的 6.6.6.6/32 被标记为 internal

回滚: 6a:在 router2 interface lono ip address 192.168.123.1/24。6b:在 router6 interface lono ip address 10.10.36.6/24。6c:在 router6ip route 6.6.6.6/32 192.168.36.3。每一步之后确认反向事件。

7. 检测连通性丢失与恢复

关闭 router2 eth1,查看相关联的事件集合,然后用 no shutdown 恢复接口。由于 router2-router3 是 Level-1-2,每行都会 L1 一次、L2 一次地出现。

命令

# down
sudo docker exec clab-isis01-router2 vtysh \
  -c 'conf t' -c 'interface eth1' -c 'shutdown'
# recovery
sudo docker exec clab-isis01-router2 vtysh \
  -c 'conf t' -c 'interface eth1' -c 'no shutdown'

核对此次变更。 打开你环境中每一个可用的来源,并与下面的示例逐一核对。

Watcher 日志 router2-router3 链路的 L1 中断集合与 L1 恢复集合 down + up

Watcher 日志 (CSV)

# router2: interface eth1 / shutdown
2026-09-07T06:55:14.754Z,lab-isis01,1,host,router2,down,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.23.2,192.168.23.1,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:55:14.756Z,lab-isis01,1,metric,router2,changed,old_cost:10,new_cost:-1,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.23.2,192.168.23.1,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:55:14.760Z,lab-isis01,1,metric,router3,changed,old_cost:10,new_cost:-1,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:55:14.761Z,lab-isis01,1,network,192.168.23.0/24,changed,old_cost:10,new_cost:-1,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
# router2: interface eth1 / no shutdown
2026-09-07T06:55:39.545Z,lab-isis01,1,metric,router3,changed,old_cost:-1,new_cost:10,router2,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:55:39.607Z,lab-isis01,1,metric,router2,changed,old_cost:-1,new_cost:10,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.23.2,192.168.23.1,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
监控 事件流中作为一个波次的中断

在 OSPF/IS-IS Real-Time Monitoring 中选择本图,将时间窗设在 06:55 UTC 前后,打开 L1L2,点击 Find logs。开启 Up/Down Links 后,router2router3 各自显示其一侧链路降到 -1 再恢复,192.168.23.0/24 变为不可达再恢复——两次,每个 level 一次。

SDK 核对 get_adjacency_events 返回配对的 down/up 变化 4 次变化

SDK 请求

down = graph.events.get_adjacency_events(
    start_time="2026-09-07T06:55:14Z", end_time="2026-09-07T06:55:16Z")
for e in down["all_host_up_down_events"]:
    print(e.event_object, "detected_by", e.event_detected_by,
          f"{e.old_cost} -> {e.new_cost}", "L" + str(e.level_number))

SDK 输出

router2 detected_by router3 10 -> -1 L1
router3 detected_by router2 10 -> -1 L1
router2 detected_by router3 10 -> -1 L2
router3 detected_by router2 10 -> -1 L2

host router2 down,由 router3 探测到,两条有向度量均为 -1192.168.23.0/24 down——L1 与 L2 都有;随后是镜像恢复。恢复时 watcher 还记录了 router2 上一次 node attr:attached 抖动,Topolograph 目前尚不接收该事件。

询问 agent 关于该网络的通用故障提问

提问: What happened in the network in the last 30 minutes?

已记录的回答(Qwen;每次运行措辞会变)

In the last 30 minutes the IS-IS domain (area 49.0001, AS 65100) had 7 event waves detected by watcher lab-isis01, starting at 06:55:15 UTC. Every device that went down recovered within the window.

06:55:15 - router2 and router3 each lost the adjacency between them, at L1 and L2 (router2 detected by router3, router3 detected by router2).

06:55:40 - both routers restored that adjacency at L1 and L2, followed by a few repeated up notifications through 06:56:33.

06:57:23 - router6 lost its L2 adjacency to router3; 06:57:56 - router6 and router3 restored it.

In short: the router2-router3 link dropped at 06:55:15 and came back at 06:55:40; the router3-router6 link dropped at 06:57:23 and recovered at 06:57:56 - both fully converged.

回答指出中断的邻接(router2 - router3)、router3 探测到 router2 丢失且反之亦然、两条度量均为 -1,以及恢复——与上面 CSV 行相同的事实,而提问从未提到 "adjacency" 或 "failure"。router6 相关的行属于下面的中转练习,被同一个 30 分钟时间窗一并捕获。

回滚:router2 eth1 上执行 no shutdown 恢复接口;等待两个 level 上的 hostnetworkmetric 恢复事件。

8. 广播中转网段的事件呈现

router6 eth1 在一条广播(LAN)电路上对接 router3router6isis priority 100 高于 router364,因此 router6 是 DIS 并发起伪节点 LSP。该电路仅为 Level-2,因此每一行都是 L2。router6 eth1 没有显式的 isis metric,因此基线为默认值 10

命令

# cost
sudo docker exec clab-isis01-router6 vtysh \
  -c 'conf t' -c 'interface eth1' -c 'isis metric 66'
# then, separately: shutdown, then no shutdown
sudo docker exec clab-isis01-router6 vtysh \
  -c 'conf t' -c 'interface eth1' -c 'shutdown'
sudo docker exec clab-isis01-router6 vtysh \
  -c 'conf t' -c 'interface eth1' -c 'no shutdown'

核对此次变更。 打开你环境中每一个可用的来源,并与下面的示例逐一核对。

Watcher 日志 L2 开销变更及其对 network 的连带影响,外加 shutdown/恢复 这对事件 开销 + up/down

Watcher 日志 (CSV)

# router6: interface eth1 / isis metric 66   (rollback: isis metric 10)
2026-09-07T06:56:47.139Z,lab-isis01,2,network,192.168.36.0/24,changed,old_cost:10,new_cost:66,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:56:47.140Z,lab-isis01,2,metric,router3,changed,old_cost:10,new_cost:66,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:57:04.561Z,lab-isis01,2,metric,router3,changed,old_cost:66,new_cost:10,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
# router6: interface eth1 / shutdown
2026-09-07T06:57:22.037Z,lab-isis01,2,network,192.168.36.0/24,changed,old_cost:10,new_cost:-1,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,internal,0,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:57:22.055Z,lab-isis01,2,host,router6,down,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.36.3,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:57:22.055Z,lab-isis01,2,metric,router6,changed,old_cost:10,new_cost:-1,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.36.3,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
# router6: interface eth1 / no shutdown
2026-09-07T06:57:55.962Z,lab-isis01,2,host,router6,up,router3,07Sep2026_06h49m43s_6_hosts,49.0001,65100,192.168.36.3,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
2026-09-07T06:57:55.973Z,lab-isis01,2,metric,router3,changed,old_cost:-1,new_cost:66,router6,07Sep2026_06h49m43s_6_hosts,49.0001,65100,,,e50b9d98-aa86-11f1-92b0-46ed252a638b,0100.1001.0001
监控 中转开销变更与 router6 中断,仅 L2

在 OSPF/IS-IS Real-Time Monitoring 中选择本图,将时间窗设在 06:56-06:58 UTC 前后,打开 L2,点击 Find logsmetric 事件的 objectrouter3event_detected_byrouter6,且变更仅在 L2——该电路为 level-2-only。shutdown 时事件流显示 host router6 down 和 192.168.36.0/24 不可达,随后是恢复。

SDK 核对 针对中转开销与 shutdown/恢复 的 get_adjacency_events 仅 L2

SDK 请求

cost = graph.events.get_adjacency_events(
    start_time="2026-09-07T06:56:46Z", end_time="2026-09-07T06:56:49Z")
for e in cost["adjacency_cost_change_events"]:
    print("cost", e.event_object, e.event_detected_by, f"{e.old_cost} -> {e.new_cost}", "L" + str(e.level_number))
flap = graph.events.get_adjacency_events(
    start_time="2026-09-07T06:57:21Z", end_time="2026-09-07T06:58:00Z")
for e in flap["all_host_up_down_events"]:
    print("updown", e.event_object, e.event_detected_by, f"{e.old_cost} -> {e.new_cost}", "L" + str(e.level_number))

SDK 输出

cost router3 router6 10 -> 66 L2
updown router6 router3 10 -> -1 L2
updown router6 router3 -1 -> 10 L2
updown router3 router6 -1 -> 10 L2

在广播网段上,metric 事件仍然标明邻居(router3),由 router6 探测到,且仅在 L2;该 metric 变更还带动 192.168.36.0/24 和两个 IPv6 /127。shutdown 表现为 L2 上 host router6 down,随后恢复。

询问 agent 关于 router6 的通用故障提问

提问: What happened on router6 in the last 20 minutes?

合格的回答在提问未提及 cost、DIS 或 shutdown 的情况下,指出 router6 -> router3 的中转度量在 10 -> 66 间往返,随后 router6 的接入中断(L2 上度量 -1)并恢复。

回滚:router6 eth1 上执行 isis metric 10(或 no isis metric)恢复基线 10no shutdown 恢复邻接。确认反向的 metric 事件。

Topolograph 2.69.4 📣 加入社区!