mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-08-29 05:20:14 +03:00
4.2 KiB
4.2 KiB
GNS3-Copilot 故障注入概览
核心流程
flowchart TB
subgraph "① 接口触发与模式切换"
A["POST /chat/inject\n用户请求注入故障"] --> B["验证项目已打开"]
B --> C["设置copilot_mode =\ntroubleshooting_injection"]
C --> D["启动Agent\n携带故障注入工具集"]
end
subgraph "② 拓扑分析与故障选型"
D --> E["GNS3TopologyTool\n获取拓扑信息"]
E --> F["ExecuteMultipleDeviceCommands\n获取设备配置"]
F --> G["InjectionSkillsTool\n查询可用故障类型"]
G --> H{"注入技能仓库\ngns3/gns3-skills"}
H --> I["返回匹配的故障定义\n含配置注入命令"]
end
subgraph "③ 故障注入"
I --> J["选择注入方式"]
J --> K["ExecuteMultipleDeviceConfigCommands\n注入配置变更"]
J --> L["GNS3PacketFilterTool\n注入链路层故障"]
end
subgraph "④ 结果确认"
K --> M["验证故障生效"]
L --> M
M --> N["记录故障详情\n含恢复命令"]
end
工具总览
| 工具 | 源文件 | 作用 | 可用模式 |
|---|---|---|---|
InjectionSkillsTool |
registry.py(skills 模块) |
查询协议级故障定义(配置变更命令) | troubleshooting_injection |
GNS3PacketFilterTool |
gns3_packet_filter.py |
链路层故障注入(延迟、丢包、损坏、BPF) | troubleshooting_injection |
ExecuteMultipleDeviceConfigCommands |
config_tools_nornir.py |
批量执行设备配置变更 | troubleshooting_injection |
ExecuteMultipleDeviceCommands |
display_tools_nornir.py |
读取设备配置(只读) | troubleshooting_injection |
GNS3TopologyTool |
gns3_client |
获取项目拓扑信息 | troubleshooting_injection |
故障注入 API
| 端点 | 功能 |
|---|---|
POST /v3/projects/{pid}/chat/inject |
触发故障注入,设置 troubleshooting_injection 模式后启动 Agent |
前置条件:项目必须为 opened 状态,否则返回 403。
GNS3PacketFilterTool 链路滤波器
| 滤波器类型 | 功能 | 参数 |
|---|---|---|
delay |
延迟 + 抖动 | [latency(0-32767), jitter(0-32767)] |
packet_loss |
丢包率 | [chance(0-100)] |
corrupt |
包损坏率 | [chance(0-100)] |
frequency_drop |
每 N 包丢弃一个 | [frequency(-1~32767)] |
bpf |
Berkeley Packet Filter | 表达式文本 |
Agent 工作流(LangGraph)
sequenceDiagram
participant U as User
participant API as POST /chat/inject
participant LLM as LLM Node
participant Topo as GNS3TopologyTool
participant DC as ExecuteMultipleDeviceCommands
participant CC as ExecuteMultipleDeviceConfigCommands
participant Skill as InjectionSkillsTool
participant Filter as GNS3PacketFilterTool
U->>API: 注入一个OSPF故障
API->>LLM: 设置mode=troubleshooting_injection
LLM->>Topo: 获取拓扑
Topo-->>LLM: 拓扑信息
LLM->>DC: 查看设备配置
DC-->>LLM: Running配置
LLM->>Skill: list context=["ospf"]
Skill-->>LLM: 匹配的故障类型
LLM->>Skill: get device_type=injection_ospf
Skill-->>LLM: 故障定义+注入命令
LLM->>CC: 执行配置注入
CC-->>LLM: 注入结果
LLM->>Filter: set filters={delay:[200,50]}
Filter-->>LLM: 链路延迟注入成功
LLM-->>U: 故障已注入,含恢复命令
关键设计要点
- 专用 API 入口 —
POST /chat/inject端点专门用于故障注入,自动切换为troubleshooting_injection模式 - LLM 主导故障选型 — LLM 分析拓扑后通过
InjectionSkillsTool查询匹配协议栈的故障,不硬编码故障场景 - 双层注入 — 设备级配置变更 + 链路级网络损伤,覆盖完整排错场景
- 故障可逆 — 每条注入均附带恢复命令,链路滤波器可通过
action: clear一键清除 - 安全前置 — BPF 语法通过 tshark 预验证,配置命令受
command_filter限制 - 上下文过滤 —
InjectionSkillsTool强制要求传入context参数,只返回与拓扑协议匹配的故障