# netpilot **Repository Path**: xyx199395/netpilot ## Basic Information - **Project Name**: netpilot - **Description**: 从零自研的网络运维自动化平台:AI 巡检、合规检查、告警闭环、拓扑与大屏,H3C/华为/思科开箱即用 - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 7 - **Created**: 2026-09-14 - **Last Updated**: 2026-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 统一运维平台 — AI 驱动的网络运维自动化平台 > 从零自研的多厂商网络运维自动化平台:SSH/SNMP/Telemetry 采集、AI 巡检、合规检查、事件驱动告警闭环、LLDP 拓扑与监控大屏,让 AI 替你敲命令。 ## ✨ 核心特性 - **多厂商适配**:H3C Comware / 华为 VRP / 思科 IOS / 锐捷 RGOS,一套抽象层自动识别并适配命令体系(锐捷与思科同族,复用同一套 show 命令层) - **AI 巡检**:自然语言描述需求 → AI 生成命令 → 确认下发 → 回显解析汇总入报告 - **合规检查**:只读优先的全面"体检",账号 / 权限 / 基线逐项核验,查完不改一台设备 - **变更工单**:改配置走「提交 → 审批 → 执行 → 回滚」流程,执行前体检高危命令、可选自动备份,高风险工单需管理员执行,申请人不能批自己的单 - **告警闭环**:Syslog / SNMP 指标异常 / 服务器主机指标(超阈值与数据过期离线)/ 交换机遥测指标(CPU / 内存 / 温度 / 接口错包增长 / 推送中断)/ 配置变更 / IP 冲突 / 未规划网段 → 企微 / 钉钉 / 飞书 / 邮件推送 → AI 修复或人工处理 - **AI 助手**:一句话问平台里的数据(回答附「本次参考的数据」,人工一眼能核),单条告警一键出根因分析与排查步骤 - **拓扑与大屏**:SNMP 采集 LLDP 自动生成拓扑,**按分组分区绘制**(同组才连线,跨组邻居只提示不连线),每个分组都有设备/链路明细;「拓扑分析」页把采集结果当图做结构体检(孤立设备 / 单向链路 / 未识别邻居 / 跨分组链路 / 环路 / 数据过期)出风险清单,监控大屏分「网络设备(SNMP)」「服务器健康」「交换机遥测健康」三块 + 设备 CPU/内存历史曲线 + 3D 机房(全屏 / 自动巡检 / 设备图标库) - **遥测与终端**:gRPC dial-out / HTTP 遥测接收解析(深层键名提取设备标识、自动关联设备台账、按「设备+传感器」看最新值),推送入库时自动抽成**结构化指标**(CPU / 内存 / 温度 / 接口错包丢包)驱动告警、大屏、趋势图与报表,并在页面上画成图(健康环形图 / 设备指标趋势 / 接口流量与错包增长排行 / 推送节奏,服务端 SVG 零前端依赖,可按时间范围与设备钻取);SNMP 采集终端与接入交换机关系图 - **无线管理**:SSH 登录无线控制器采集 AP 与在线无线终端,用 LLDP 邻居 / MAC 地址表 自动推断「AP ↔ 接入交换机 + 端口」对应关系,可人工绑定(不被后续采集覆盖) - **服务器监控**:服务器也能网页 SSH 登录(通用 shell,不再下发关分屏这类厂商命令); Windows / Linux 原生二进制 Agent(目标机零依赖)或 SSH 只读探测上报 CPU / 内存 / 磁盘 / 负载 / 运行时长 / 硬件信息,按阈值判健康、留历史趋势;也收 **Categraf**(Prometheus remote write) 的上报——采什么由 Categraf 定,平台只挑这几项落库,认不出的指标如实回清单;健康档直接上监控大屏, 超阈值与「数据过期」自动生成告警中心事件并推送 - **Agent 主动采集(v1.17.0)**:主机详情新增「⚡ 主动采集」,不用再等 5 分钟周期。 平台把请求落库,Agent 每 10 秒用同一把令牌轮询领取,收到后立即采集、强制刷新检查清单并上报; **Agent 仍然只做出站连接,主机不开监听端口**,旧版 Agent 或旧平台自动降级,周期上报不受影响 - **eBPF 内核观测(Agent v1.19.0 / Phase 0)**:Agent 探测 root、BTF 与 bpf syscall 能力, 上报进程 Top-N、进程 exec/exit 事件、TCP 连接明细(PID/进程/状态/重传)与采集器状态, 平台写入 ClickHouse 四张 eBPF 表并在「eBPF 内核观测」页与 `/api/v1/ebpf/` 展示; 当前环境没有完整 eBPF 数据面时回退只读 `/proc` 采集,状态里如实标注 `available=false` 与原因 - **精细化采集窗口(Agent v1.19.0)**:主机告警落库时自动把该主机上报间隔临时缩到 30 秒并持续 15 分钟, 也可在 eBPF 页手动开一段(10/15/30/60 秒、1 分钟~24 小时);窗口起止落库、结束后自动恢复原间隔, 事故现场的高密度数据因此不会被 5 分钟粒度漏掉 - **进程时序(procstat,Agent v1.17.0)**:Agent 每次上报先带一份本机进程清单(最多前 300 个, 含每个进程的 LISTEN 端口),主机详情「进程时序」页列出可监控进程;**Agent 自身进程首次上报即 自动加入时序**,**应用管理里被监控的服务端口也会自动匹配监听进程并建好时序**,其他进程选中后 预填检查表单,确认保存即按目标采集每个进程实例的 历史——PID / 命令行 / 用户 / 启动时间 / CPU / RSS / VMS / 线程 / 句柄 / IO / limits;看生命周期、 资源峰值、重启次数与缺失时长;目标没有进程时也留显式缺失样本,不拿旧值冒充现在 - **应用监控(全链路)**:登记应用(服务类型 / IP:端口 / 有无 nginx / 是否前后端分离 / 关联服务器), 手动绑定交换机端口,把「服务检查 → 服务器指标 → 交换机端口 → 系统告警 → Syslog」串成一条链路, 一键生成检查项、健康档联动告警中心、监控大屏独立一块展示 - **镜像流量分析**:接入旁路 APM(交换机镜像口 → 会话重组 → L7 解析 → 评分)的导出, 应用健康分 / p99 / 错误率 / 重传进全链路第六段与大屏,采集引擎异常(没流量、丢包、 spill 积压、落地不健康)也能告警;appmap 一键导出 - **多地区与 IPAM**:地区层级归属设备与网段,ARP 对账自动生成地址台账、使用率报告、未规划网段与 IP 冲突告警,闲置地址可预览后回收 - **网页终端**:xterm.js + SSE 的交互式 SSH 终端,多会话并行,敲过的命令逐条留痕可下载; - **堡垒机**:参考 JumpServer 的一期——人→账号→资产的授权、回车前的命令过滤(拦截 / 警告 / 人工复核)、会话录像回放与在线强制断开;二期补上 **RDP 图形桌面**(桥接 guacd,口令只在服务器侧、全程录像、与 SSH 同一条审计链); 交换机与服务器都能连,选中服务器时快捷命令面板自动切成 Linux / Windows 两套 - **SSL 证书监控**(2026-10-12 借鉴 ITOps-Watch):站点列表 + 定时 TLS 握手读证书有效期, 剩余天数快照入库、历史可查;告警规则(来源「SSL 证书监控」)按「剩余天数低于阈值 / 站点不可达」推送 - **数据库监控**(2026-10-12 借鉴 ITOps-Watch,2026-10-15 周期化并接入态势):MySQL/MariaDB、 PostgreSQL、SQLite **直连采集**(免 Agent,只读账号;SQLite 填文件路径即可)——连接数与使用率、 活跃会话、容量、QPS 现算、版本快照入库;告警规则(来源「数据库监控」)按「连接使用率 ≥ 阈值 / 采集不可达」推送。驱动(pymysql / psycopg2-binary)没装时该目标如实标「无法检查」而不是报 0。 **默认带「数据库监控采集」定时任务(5 分钟一轮)**,页面画 24h 连接/QPS 趋势;目标可**绑定 归属应用**,该库的指标随即进入应用的风险态势基线(连接使用率/QPS/活跃会话/容量增速/慢查询/ 中断连接/行锁等待七因子,库不可达强制报高风险)——不做绑定则按 IP+端口 自动匹配。**连接账号 添加后仍可随时编辑**(目标行「编辑」,口令留空不改);数据库类应用还可在应用详情勾选 **使用外部数据库监控数据**,直接展示这里采集的连接/QPS/会话/容量与 24h 趋势(不依赖 Agent) - **巡检健康分**:每次设备巡检按 CPU / 内存 / STP / 接口错包加权算 0-100 分(解析不到的项不扣分, 连接失败=未评定),批次均分进历史表并画趋势曲线,CSV 导出带「健康评分」列 - **报告 PDF 推送**:运维报表与 AI 巡检支持 `pdf` 参数——正文排版成 PDF(pymupdf + CJK 字体, 零系统依赖),邮件通道带附件、IM 通道发摘要;容器镜像已装 Noto CJK 字体 - **拓扑交互增强**:拓扑设备盒子双击直达该设备的历史曲线(SNMP 监控页);AI 智能体新增 `topology_snapshot` 工具(节点 + 链路清单),可让模型直接画 Mermaid / 讲清「谁连谁哪个口」 - **大屏轮播**:运维驾驶舱支持 `?carousel=秒` 或点「🎞 轮播」把所有看板挨个轮放(值班室大屏用), 间隔可改、状态留在地址栏 - **语音告警通道**:告警通道新增「语音电话(网关)」类型——按 `{"type":"voice","text":…,"callee":[…]}` POST 给自建/云语音网关,由网关拨打播报(被叫号码填通道的收件人字段) - **数据与安全**:设备密码 / AI Key / 告警密钥统一 Fernet 加密存储;syslog、采集、巡检、日志按保留策略自动清理 - **权限与审计**:只读 / 运维 / 管理员三档角色 + 按地区划数据范围,全站写操作一处拦住;数据增删改与高危动作自动留痕,可筛选、导出 CSV - **运维报表**:日报 / 周报一键聚合 15 类数据,先给一份按严重程度排序的风险清单,可下载 Markdown / JSON / CSV 并推送到值班群 - **REST API**:`/api/v1/` 取数端点(设备 / 拓扑 / 告警 / 巡检 / 合规 / IPAM / 备份 / 任务…)统一 JSON 信封,令牌绑定账号、权限不超过所属用户、明文只显示一次;写接口面只有 `/api/v1/deploy/*`(开场客户端,需 `deploy` 权限域)与 `/api/v1/automation/hooks//`(Webhook 触发自动化,需 `automation` 权限域) - **开局助手客户端**:独立的桌面程序(`deploy_client/`,PySide6 + pyserial,打包 `NetPilotDeploy.exe`),用串口初始化新交换机——从平台领管理 IP、取初始化模板、生成并下发配置,再把序列号/sysname/型号回传平台纳管;离网时数据留本地、联网自动补传 - **工程化**:环境变量覆盖配置(密钥 / DEBUG / 监听端口)、空库自动建表、管理员自动初始化;网页与后台服务可拆成两个进程部署,100 个测试脚本一键并行跑在独立库上,`check_production` 一条命令做上线体检 - **外部系统联动**:从 **Zabbix** 只读拉取主机台账、问题事件与指标取值——设备按 IP 落库(重跑只补空字段)、告警进告警中心并**带恢复状态**(默认不重复推送,避免和 Zabbix 自己的通道双份)、指标项最新值进平台的服务器/SNMP 监控表(指标项 → 角色的映射由人确认,可开关);从 **GLPI** 只读导入资产台账(序列号 / 型号 / 厂商 / 位置直接带入,补上平台本来靠采集才有的字段) - **功能开关**:44 个模块在不在网页上出现由管理员一处决定——关掉后**导航隐藏 + 直连拦回首页**,但**不动任何数据**;与各模块自己的启用开关(如「启用 Zabbix 联动」)分两层,只管网页入口、不影响 API 与 Agent 上报 - **拓扑连线上的流量**:连线旁标接口利用率(85% 黄 / 95% 红),来源可选 **sFlow 计数器**或 **SNMP 接口快照**(只读刷新只采连线用到的口),接口沿用 LLDP 采集的邻居口;拿不到链路速率时**不报 0%** ## 🚀 快速开始 ```bash cd netpilot/h3c_web pip install -r requirements.txt # 双击「启动网页.cmd」会自动做这一步(见下) python manage.py migrate # 首次部署或升级后执行(「启动网页.cmd」已自动带上) python manage.py runserver # 或双击仓库根目录「启动网页.cmd」 ``` 浏览器打开 ,默认账号 `admin / admin`(登录后请立即修改密码)。 > 双击「启动网页.cmd」会先把两件事办妥再起服务:**依赖自检**——对着 `requirements.txt` > 逐条查(`h3c_web/check_deps.py`),缺库或版本不够就自动 `pip install`,装不上就停下并给出 > 手工/镜像安装命令,绝不带着缺库的环境硬起——以及 `python manage.py migrate --noinput`。 > 所以新机器上只要装了 Python 3 就能双击跑起来;拉取新版本后直接双击即可,新增的数据表与 > 新增的依赖都会自动搞定。手动 `runserver` 时请记得先 `pip install -r requirements.txt` > 再 migrate,否则缺库会在启动时报 ImportError、涉及新表的页面会报 `no such table`。 > > **目标机不装 Python 也行**:`packaging\build_exe.bat` 把整个平台打成单文件 > `dist\NetPilot.exe`(约 60MB),拷过去双击即用——自动建库、自动开浏览器,数据落在 > exe 旁的 `data\` 目录。详见[部署与运维指南](docs/11-架构与部署/01-部署与运维指南.md)第九节。 > > **Linux 服务器用容器**:目标机只需一次性在 `daemon.json` 里加 > `"insecure-registries": ["36.111.146.122:3000"]` 并重启 docker,然后 > `docker compose -f dist/docker-compose.yml up -d` —— 镜像**免登录**从本仓库的 Gitea > 容器仓库拉取(`36.111.146.122:3000/admin/netpilot:1.0.0`)。要自己构建/推送用 > `docker/docker-compose.yml`(`image:` 已写成仓库地址)。详见部署指南第十节。 ### 跑测试(改完代码怎么验证) **验证一律用 `python run_all_tests.py`(在 `h3c_web/` 下),不要裸跑 `python test_xxx.py`。** 测试脚本默认直连开发库 `db.sqlite3`,而开发库同时被运行中的 dev server 与它的定时任务 写入(SNMP 采集、告警生成都会改数据),裸跑会撞出成片「假失败」;`run_all_tests.py` 把整套测试跑在独立测试库(`test_db.sqlite3`)上并关掉后台线程,结果才可信。 ```bash python run_all_tests.py # 全部 67 个脚本,串行 python run_all_tests.py -j 4 # 并行 4 个(每个 worker 各建独立测试库) python run_all_tests.py test_sflow.py # 只跑指定脚本 ``` CI(GitHub Actions)对所有分支的推送与 PR 自动跑同一套:Django 自检 → 迁移一致性 → 部署体检 → 全量测试脚本 → Go Agent 编译与单测。 ### 代码仓库与推送 仓库配了三个远程:`gitee`(Gitee)、`origin`(内网 Gitea)、`all`(一次推两边): ```bash git push all main # 同时推到 Gitee 与内网 Gitea git push gitee main # 只推 Gitee git push origin main # 只推内网 ``` `main` 的上游仍是 `gitee/main`,裸 `git push` 只推 Gitee;`all` 只配了推送地址, 不要用它 `fetch` / `pull`(拉取请指定 `gitee` 或 `origin`)。 `git push all main` 不会刷新 `gitee/main`、`origin/main` 这两个本地跟踪引用, 推完补一句 `git fetch gitee; git fetch origin`(或 `git fetch --all`),否则 `git status` 会误报「ahead 1」。别写成 `git fetch gitee origin`——那里的 `origin` 会被当成远程上的分支名,直接报 `couldn't find remote ref origin`。 换机器后重建 `all`: ```bash git remote add all git remote set-url --add --push all git remote set-url --add --push all <内网 Gitea 地址> ``` ## 📖 使用手册 以下为完整功能手册(CLI 工具 + 网页管理平台)。 > ⚠️ 声明:本项目仅供实验环境学习交流,所有设备操作默认只读优先,请勿在生产环境执行未经确认的变更。 --- ### H3C 交换机 SSH 指令下发工具 基于 paramiko 的纯 Python 脚本,通过 SSH 连接 H3C(Comware V5 / V7)交换机下发指令。 ## 安装 只需安装一个依赖: ```bash pip install paramiko ``` ## 用法 ```bash # 1. 执行单条 / 多条指令(多条用 ; 分隔) python h3c_ssh.py 192.168.1.1 -u admin -p 123456 -c "display version; display ip interface brief" # 2. 从指令文件批量下发(输出自动保存到当前目录 log.txt) python h3c_ssh.py 192.168.1.1 -u admin -p 123456 -f commands_example.txt # 3. 指定日志文件名 python h3c_ssh.py 192.168.1.1 -u admin -p 123456 -f commands_example.txt -o mylog.txt # 3. 交互模式(不指定指令时默认进入) python h3c_ssh.py 192.168.1.1 -u admin -p 123456 -i # 4. 不写 -p 会交互式提示输入密码(推荐,避免明文出现在命令行) python h3c_ssh.py 192.168.1.1 -u admin -c "display current-configuration" ``` 每次运行会自动把会话和指令记录写入 SQLite(默认 `h3c_logs.db`),不想写库加 `--no-db`。 ## 查询历史记录 ```bash # 列出最近 10 次会话 python h3c_log_query.py # 查看某次会话的全部指令与回显 python h3c_log_query.py -s 3 # 按关键字搜指令(每种指令默认只显示最近一次执行) python h3c_log_query.py -c "display ip" # 显示所有匹配记录,并导出到文件 python h3c_log_query.py -c "display" -a -l 50 -o out.txt # 数据库不是默认文件名时指定 python h3c_log_query.py -d other.db ``` 数据库结构:`sessions` 存会话(时间、目标设备、用户名、状态),`commands` 存每条指令(指令内容、回显、耗时、执行时间)。 ## 网页管理界面(Django) 用浏览器管理设备、下发指令、查看日志,无需命令行。 **启动(二选一):** ```bash # 方式一:双击桌面目录下的「启动网页.cmd」 # 方式二:手动启动 cd h3c_web python manage.py runserver 0.0.0.0:8000 # 浏览器打开 http://127.0.0.1:8000 ``` **登录验证:** 所有页面必须先登录才能访问(浏览器打开后会自动跳到登录页)。 默认账号 `admin` / `admin`,登录后建议立即修改: ```bash # 改密码(控制台) python manage.py changepassword admin # 或登录后访问 http://127.0.0.1:8000/admin/ 管理账号/数据 ``` 登录状态与 Django 管理后台共用,登录一次后 `/admin/` 也可直接进入;右上角可退出登录。 登录后默认是**运维**角色(可采集、可改动),右上角显示当前角色徽章;要给同事开只读账号 或限定可见地区,见下方「用户与权限(RBAC)」。 停止:关闭服务器窗口,或双击「停止网页.cmd」。 **导航与页面结构:** 登录后导航为**左侧分组侧栏**(设备管理 / 网络与备份 / 巡检与合规 / 任务与日志 / 可视化 / 机房管理 / 多地区与IPAM / 系统设置),当前页面在侧栏高亮。**巡检中心**(设备巡检 + AI 巡检)与 **日志中心**(指令日志 + 交换机 syslog 日志)是合并后的单入口:进入后页面顶部有统一的二级 「中心」标签条,点击即可在子页之间切换(各自保留独立地址与操作流程)。每个页面内部 再用**页内二级标签**把内容拆开显示(如设备列表 = 分组管理 / 设备列表 / 操作结果, 设备巡检 = 巡检配置 / 巡检报告 / 历史巡检);各类操作结果出现后自动切到对应标签, 标签切换即时生效、无需刷新。 **侧栏的折叠与滚动位置:** 侧栏入口有三十多个,点一次就是整页跳转,所以两处状态都做了记忆: 点分组标题可**折叠/展开**该组(偏好存在 `localStorage`,长期有效;当前页所在分组始终自动展开, 不会出现"收起后找不到自己在哪");侧栏自身的**滚动位置**存在 `sessionStorage`,跳转后停在原地, 不必每次重新往下找靠下的入口(用 `sessionStorage` 而非 `localStorage`:滚动位置属于"这个标签页 看到哪"的临时状态,多开标签页时不该互相串)。守护见 `test_ui_sidebar.py`。 **页面功能:** | 页面 | 地址 | 功能 | | --- | --- | --- | | 设备列表 | `/` | 查看/编辑/删除已录入的设备,型号/序列号/厂商(H3C/华为/Cisco/锐捷/其他)一列展示,支持「采集信息」「执行命令」;按分组分组显示,顶部可管理分组(创建/删除/筛选);页内「新增设备」主按钮可直接进入录入表单。设备按**大类 → 类型**分层:网络设备(交换机 / 路由器 / 防火墙 / 无线控制器 / 其他网络设备)与服务器(物理服务器 / 虚拟化服务器)两个标签页,另有「机柜其他设备」标签页登记配线架、理线槽、PDU、KVM 等**机柜配件**(无 IP 与账号,可跨多个 U 位上架),页内「配件型号库」让同款属性一处定义、多件配件重复引用上架(见下方「设备分类层级」) | | 资产台账 | `/assets/` | **设备列表数据 + 资产档案**:资产侧独立维护**资产编码(填了全平台唯一)**、生产日期、投用日期、资产归属(单位字典可自定义增删)、预计使用寿命(到期日与剩余天数自动算,超期 / 90 天内到期 / 正常三档着色,默认按寿命紧的排前)、维保供应商、保管人;**虚拟化服务器可指定宿主机**(仅物理服务器;虚拟机不占机柜物理 U 位,与宿主机同柜同 U 直接放行,机房页与 3D 机房把它列在宿主行的「名下虚拟机」里、不占 U 格);**CSV 导入导出**:导出跟随当前筛选(列名与导入模板相同,可直接回灌),导入按「设备IP」定位设备、**已有档案以更新方式覆盖**(空=不动 / `-` =清空;机柜/U位/宿主机同批更新,资产编码撞车该行失败);机柜位置与「机房管理」同一份数据——选定机柜/U 位即写回设备,**机房 U 位视图与 3D 机房立即可见**,列表与编辑页都有「🧊 3D」跳转,3D 的 U 位详情反过来显示每台设备的「保管人 · 归属 · 寿命」并给资产档案跳转;没建档的设备也出现在台账里(显示「未建档」+ 建档入口),改动全部进审计(object_type=asset)(见下方「资产台账」) | | 新增设备 | `/device/add/`(从设备列表页按钮进入) | 录入交换机/服务器 IP、账号、**认证方式(口令 / 私钥证书登录)**与密码或私钥(都 Fernet 加密后存入 SQLite),可设置角色(网关/接入)、厂商(H3C/华为/Cisco/锐捷/其他,留空则 SSH/SNMP 采集时自动识别)、SNMP 社区字(留空继承分组)与端口、所属分组 | | 批量编辑 | `/device/batch-edit/`(从设备列表勾选进入) | 对多台设备批量修改账号/端口/密码/角色/厂商/分组/SNMP 社区字;留空或“保持原样”的字段不动,不影响设备的名称/IP/型号等独有配置 | | 指令执行 | `/device//exec/` | 输入指令立即执行,回显直接显示在页面上,可调超时时间 | | 批量执行 | `/batch/` | 勾选多台设备、输入多条指令,多台并行执行并展示结果;可先按分组筛选,每组可整组全选;自动识别回显中的命令级报错(不认识的命令/参数错误/无权限,Comware/VRP/Cisco 各自特征)并计为失败,成功数如实统计;等满超时没等到提示符的记为**超时**(不误报成功)。指令框上方还有「**AI 生成配置**」(自然语言→回填指令框)。**下发后指令框与勾选原样保留**,页面仍停在「批量执行」标签页(结果在「执行结果」标签页),可改完再下发一次 | | 一键采集设备(身份+LLDP) | `/`(工具栏按钮) | 一次并行采集**身份信息**(名称/型号/序列号,连接时自动识别真实厂商并写回,即“自动矫正”)与 **LLDP 邻居/接口**(自动回填上联口到「连接接口」并在拓扑上呈现),可选 SSH 或 SNMP;**采集范围三选一**:全部设备 / 按分组(只采所选分组,未分组也可选)/ 按勾选(只采列表勾中的设备,可跨分组,服务器自动跳过);范围之外的设备名称、LLDP 记录与「连接接口」一概不动,回填只按**同分组**设备名推导 | | 一键备份 | `/`(勾选设备后点按钮) | 基于列表勾选,可一键对选中设备并行做配置备份 | | 定时任务 | `/schedule/` | 定时任务:按计划自动执行 采集 / 拓扑采集(LLDP) / 备份 / 批量指令 / 设备巡检 / SNMP 监控采集 / 终端信息采集 / 无线采集 / 主机信息采集 / 合规检查 / AI 巡检 / IPAM 对账与告警 / 数据保留清理 / 运维报表,执行范围支持「全部设备」或「指定分组」(类型下拉直接读模型 choices,新增类型自动出现) | | 自动化中心 | `/automation/` | **事件驱动的多步骤 Runbook**:告警命中、定时到期、手动、Webhook 或**飞书群消息**触发后,按顺序执行只读排查(巡检/采集/SNMP/备份/合规/服务器巡检)、AI 根因分析、通知,必要时只生成**变更工单草稿**(支持 AI 起草);支持步骤条件、失败重试、运行取消、维护窗口、设备范围、冷却/每日上限、同策略单飞、试运行与逐步时间线。自动执行不含任何直接写设备动作,工单仍需人工提交审批(见下方「自动化策略中心」) | | 巡检中心 · 设备巡检 | `/inspect/` | 只读巡检交换机健康:CPU、内存、STP(生成树)状态与端口统计、接口错误包;生成健康报表,支持 CSV 导出与历史回看(见下方「设备巡检」) | | 巡检中心 · AI 巡检 | `/inspect/ai/` | 用自然语言描述巡检内容,AI 生成只读巡检命令,人工确认后一键并行下发采集回显并自动 AI 结构化解析为指标/表格/问题,先汇总后明细展示;长回显完整落库、按行分页浏览并支持「下载完整回显(.txt)」(`/inspect/ai/echo/<结果id>/`),超预算时按行分段送 AI 解析后合并;可保留历史趋势生成折线图(见下方「AI 巡检」) | | 合规检查 | `/inspect/compliance/` | 内置安全策略逐项合规判定(禁止 Telnet / SSH / SNMP / DHCP Snooping / NTP / 日志中心 / 登录锁定 / 密码强度 / 空闲超时 / 接口安全 / 风暴抑制);一次连接采齐配置回显自动判定,每项违规提供可编辑修复指令,可选 AI 按设备实际违规生成,人工核对后可单条或按设备批量下发(见下方「合规检查」) | | SNMP 监控 | `/monitor/` | 基于 SNMP v2c 采集设备身份与性能:厂商自动矫正、名称/序列号/系统版本写回,CPU/内存进入监控历史并展示每设备迷你趋势图;支持一键对全部或指定分组采集,可接入定时任务周期采集(见下方「SNMP 监控」) | | 网络拓扑 | `/topology/` | **按分组分区**的总线布局拓扑图:每个分组一张独立总线图(网关置顶接入本组总线,接入交换机沿本组总线挂接),分组之间绝不连线;顶部分组筛选(`?g=`,`0`=未分组)可只看一个分组,「分组总览」表 + 「分组详情」标签页给出每组的设备/链路/跨分组/未识别明细;跨分组链路与跨分组重名单独提醒;页内「收集拓扑信息」按钮可**选择 SSH 或 SNMP 采集** LLDP 邻居/接口,只采当前筛选的分组 | | 全链路总览 | `/fulllink/` | **访问来源(业务流)→ 业务 → 服务器 → 网络设备 → 终端**画在一张图上:应用(web/api/file → 中间件 → 数据库,含人工声明的调用/消息/数据访问依赖边)→ 服务器 → 核心/接入交换机 → 接入交换机下挂的终端(按「交换机 × VLAN」聚合,防撑爆;终端不参与健康着色,汇总卡单列);最顶一层是**动态业务流**——服务器 Agent 的连接观测 + 交换机 sFlow/NetStream 两路「谁在访问应用」按来源 IP 合并,画成青色流动虚线(走向=流向,条数=强度分档,近 24h 窗口,只在应用服务端口,没观测就不画、也不拿声明顶替;对端是交换机/防火墙时在来源层单独建节点直连应用,不并进网络设备层;右下角可一键关掉动画);全部来自库里事实(关联服务器 / 端口绑定 / LLDP / 终端表 / 端口连接观测 / 网络设备流记录);节点与连线按 正常/警告/故障/离线/未采集 五态着色,点节点出详情面板(状态依据/关键指标/最近告警/下钻),滚轮缩放拖拽平移,每 60 秒自动刷新,支持分组筛选;**空图与构建失败分开显示**——真没有对象给「上手顺序」,服务端出图报错则显示「图形构建失败 + 原因 + 重新加载」(不再把异常吞成空图误导成「没加上应用」),轮询失败也会在图上提示(见「[全链路拓扑总览](docs/05-监控/11-全链路拓扑总览.md)」) | | 堡垒机 | `/bastion/` | **参考 JumpServer 的一期**:资产账号(一机多账号,口令 Fernet 加密只写不读,Windows 域可填)× 授权规则(用户×资产/组×账号×生效时段×来源 IP,enforce 灰度开关)× 命令过滤(**回车前**判定:拦截/警告放行/人工复核,试运行解释器)× 会话审计(SSH+RDP 双协议在线表、管理员强制断开、历史台账含授权拒绝与连接失败、asciicast 录像回放+命令时间线跳转);**RDP 图形桌面**桥接 guacd:服务器侧握手(口令不进浏览器)、SSE/POST 透传、guacd 指令流录像取回回放、命令过滤不适用如实标注(见 docs/12-堡垒机/02) | | 拓扑分析 | `/topology/analysis/` | 把上一次 LLDP 采集结果当成一张图做**结构体检**(支持按分组筛选 `?g=`):设备数/链路数/连通分量/环、孤立设备、汇聚点与度数排行、单向链路、未识别邻居、跨分组链路、设备名重复、角色未设置、离线网关、LLDP 数据过期,按高→低给一份可照做的风险清单,可导出 JSON / CSV / Markdown(见下方「拓扑分析」) | | 终端信息 | `/terminals/` | **SNMP 采集**与 **SSH 采集**两份独立数据(同一 MAC 各一行、互不覆盖,页面可切换对照、提示定位不一致):SNMP 读**网关 ARP 表**(IP↔MAC)+ **交换机 MAC 地址表**(MAC↔端口/VLAN),SSH 登录读 `display/show arp` 与 `mac-address` 回显解析;自动剔除上联口/聚合口去重定位接入端口,支持筛选、CSV 按数据集导出与定时采集(见下方「终端信息」) | | 无线管理 | `/wireless/` | 无线控制器(AC)→ AP → 无线终端三层台账:SSH 采集 AP 与在线终端(H3C / 华为 / 思科 / 锐捷命令各自适配),四个标签页分别看 AP、无线终端、「AP ↔ 接入交换机」对应关系与采集登记;支持关键字 / 在线 / 按 AC 筛选、CSV 导入导出、人工登记与绑定接入交换机、清理超期离线终端、重新推断对应关系,可接入定时任务(见下方「无线管理」) | | 遥测数据 | `/telemetry/` | 接收交换机 **telemetry 遥测推送**:gRPC dial-out 采集口(任意服务/方法名,JSON/GPB 编码均解析)+ HTTP JSON 推送 API,自动识别设备标识并关联设备(关联不上可一键「重新匹配设备」),推送入库时自动抽成**结构化指标**(「结构化指标与图形化分析」区块给健康环形图、每台设备健康档与最新值、CPU / 内存 / 温度趋势、接口流量与错包增长排行、推送节奏与数据构成,可按**时间范围**切换、按**设备**钻取,老数据可「补抽指标」,真机还没接上可一键「生成演示数据」预览),支持筛选 / 按「设备+传感器」看最新值 / CSV 导出 / 清理 / 测试数据(见下方「交换机遥测数据」) | | 端口面板 | `/sflow/panel/` | **交换机前面板图**(原是 sFlow 页的「端口面板」标签,2026-10-12 提级成独立页,挂在左侧「监控与可观测」分组下,功能开关 key `port_panel`):全部物理口按类型分块(GE / 10GE / 40GE / 管理口,逻辑接口单独一行),每口 LED 表示链路状态(UP 绿灯按利用率三档加亮 / DOWN 熄灯 / 管理关闭琥珀 / 仅 sFlow 采样虚线框),**鼠标悬停或键盘聚焦**看单口的进出速率、利用率、累计字节、错包丢包增长与近端走势迷你图,可钻进「接口流量」看趋势;端口状态走设备 SNMP 的 IF-MIB(覆盖全部端口),流量走 sFlow Counter 相邻采样差值(按 ifIndex 对齐);SNMP 不可达时降级只画采样口并说明原因,快照缓存成功 30s / 失败 300s,可「重采端口状态」强制刷新(详见 docs/05-监控/08) | | NetStream 流量 | `/netstream/` | **NetFlow v5/v9/IPFIX 流记录**接收与流量统计(与 sFlow 并列在「流量分析」中心):概览(独立流/流量/平均速率 + 口径说明 + Top Talkers 按源/目的/会话/端口/上报设备 × 字节/包数/流条数 + 协议与端口分布 + 上报点表 + 模板缓存字段清单)、流量明细(累计与增量双列、筛选、分页、CSV)、接口流量(每接口入/出方向 Top + 速率曲线)、趋势分析(分桶速率曲线,可按协议拆分)、设备开启(生成含回滚的变更工单草稿 + 链路自检 + 演示数据)。**计数口径**:NetStream 报的是按流累计量,同一条长流被活跃超时拆成多次导出——平台按流标识取增量入库,统计不会重复计入(详见下方「NetStream 流量统计」) | | 服务器监控 | `/hosts/` | 物理机 / 虚拟化服务器的健康总览:CPU / 内存 / 磁盘进度条 + 健康档(正常 / 警告 / 严重 / 离线 / 未采集)+ 统计卡,支持关键字 / 健康 / 操作系统筛选;可勾选主机「SSH 一键采集」(只读探测),签发 / 停用 / 吊销 Agent 令牌,页面直接给出 Linux 与 Windows 的安装命令与接口自测命令(见下方「服务器监控与主机 Agent」) | | 主机详情 | `/hosts//` | 单台服务器:最新指标与健康判定依据、CPU / 内存 / 磁盘 / 负载趋势图(可选最近 30~288 个点)、硬件与系统信息(DMI / CIM)、历史明细表、「系统指标」页签(网卡 / 磁盘 / TCP / 进程 / **MySQL 数据库**——对配了 MySQL 登录检查的目标采集 QPS、连接数、慢查询、缓冲池命中率等,Categraf 同口径)、**「⚡ 主动采集」**(让 Agent 立即上报一次,Agent 10 秒内领取并强制刷新检查清单)、Agent 令牌与安装命令、网页 SSH 登录入口、清空历史 | | 防火墙运维 | `/firewall/` | 华三 SecPath 系列防火墙的**安全策略只读总览**:台数与健康分布(正常 / 数据过期 / 采集失败 / 未采集)、规则与安全域总数,每台给出型号、软件版本、规则数、安全域数、最近采集时间与耗时;可勾选或全选后一键采集(走设备 HTTPS REST API,**只读,不下发配置**);支持**策略调序**(上移/下移)与**对象组编辑**(成员增删改 / 描述)(见下方「防火墙安全策略」)(上移/下移)与**对象组编辑**(成员增删改 / 描述) | 防火墙策略详情 | `/firewall//` | 单台防火墙:设备身份与本次采集(主机名 / 型号 / 版本 / 运行时长 / 桥 MAC / 耗时)、**安全域**(成员接口与 down 提示)、**安全策略规则表**(顺序即设备匹配顺序:动作、启用与有效期、源域→目的域、源/目的地址、服务与应用、命中次数与流量、最近命中时间、描述,可展开看全部匹配维度)、采集历史与失败原因 | | 防火墙编辑 | `/firewall//edit/` | 安全策略规则与对象组的编辑(新增/启停/删除/**调序**规则、新建/删除/改描述组、成员增删**改**):对着采集快照校验 + 载荷与回滚预览,**改动一律生成变更工单**(提交 → 另一位管理员批准 → 执行 → 可回滚),页面不直接下发设备;执行与回滚成功后都会 `save force` 落盘(见下方「防火墙安全策略」) | | Agent 上报 | `/agent/push/` | 主机 Agent 的免登录上报接口:POST JSON,凭请求头 `X-Agent-Token` 认主机,支持数组批量补传,响应回健康判定与阈值;令牌停用 / 过期 / 不存在一律 403(见下方「服务器监控与主机 Agent」) | | 应用管理 | `/apps/` | 业务视角的应用台账与**全链路健康**:应用名 / 服务类型 / IP:端口 / 有无 nginx / 是否前后端分离 / 关联服务器 / 手动绑定的交换机端口 / **启用 ICMP 实时监测**(按间隔 ping 关联服务器与绑定的交换机,不可达即告警并在链路里多一段「设备连通」);列表按健康档排序并可筛选,详情页把「服务检查 → 服务器指标 → 交换机端口 → 系统告警 → Syslog」五段并排展示,可一键生成检查项(按「监控方式」配 HTTP/HTTPS/TCP/MySQL 探活与探活路径,HTTPS 顺带采集证书剩余天数)、增删端口绑定与依赖声明;数据库类应用可在详情卡片**就地修改连接账号/口令**(留空不改),并勾选**使用外部数据库监控数据**读取 `/db/` 的直连采集(见下方「应用管理」) | | 应用架构 | `/apps/arch/` | **用 Agent 在服务器上看到的真实连接核对应用登记链路**:Agent 按平台下发的 `conn_ports` 观测每个应用服务端口的监听地址、各状态连接数与远端 IP 分布,平台按**IPAM 网段用途**(服务器/终端/办公/无线/物联网/管理)给对端分类,判链路是否合理(四态:合理 / 存疑 / 异常 / **无法判断**——未知不算故障)并服务端渲染「应用 → 服务器 → 交换机 → 访问来源网段」拓扑;可导出 CSV(见下方「应用架构」) | | 检查清单下发 | `/agent/checks/` | 进程 / 端口 / HTTP 检查清单的免登录接口:GET + 请求头 `X-Agent-Token`,Agent 每 5 分钟拉一次,清单在主机详情页「进程与服务」维护(见下方「服务器监控与主机 Agent」) | | 主动采集轮询 | `/agent/collect/` | Agent 每 10 秒用同一把令牌 POST 一次,问有没有「立即采集」请求;有就领取(平台删除请求)并立即采集上报,不计入令牌上报次数;Agent 仍然只外连、不开监听端口(Agent v1.17.0+) | | 监控大屏 | `/bigscreen/` | 分五块展示:**网络设备**(总数/在线/离线/网关/接入/未设置角色 + Ping 在线状态 + SNMP CPU/内存与历史曲线)与**服务器健康**(健康分档统计、CPU/内存/磁盘进度条、来源与采集时间、每台走势与服务器平均曲线)、**交换机遥测健康**(健康分档统计、平均 CPU / 内存、最高温度、最需要关注排行)、**应用监控**(应用全链路五段并排 + 分档统计)与**镜像流量(APM)**(引擎状态 + 应用分数排行 + 定界结论),每 60 秒自动刷新,可「立即刷新检测」(Ping + SNMP + 主机体检 + 遥测体检 + 应用体检)(见下方「监控大屏」) | | 大屏设置 | `/bigscreen/settings/` | 统一配置五项监测(Ping / SNMP / 主机体检 / 遥测体检 / 应用体检)的开/关与间隔(分钟)+ **镜像流量接入**(APM 指标地址、控制台地址、采集间隔、是否拉定界结论),展示上次执行时间与采集错误;可「立即执行一次监测(Ping + SNMP + 主机体检 + 遥测体检 + 应用体检 + 镜像流量)」(见下方「监控大屏」) | | 运维驾驶舱 | `/dashboards/` | **多看板 + 组件化**的深色值班看板:四张内置看板(总览驾驶舱 / 网络运行 / 服务器与应用 / 安全与合规)开箱即用,每张看板由 31 个组件自由拼装(设备·告警·任务·服务器·应用·APM·遥测·合规·漏洞·IPAM·备份·终端·无线的指标卡,折线/柱状/环形图,最新告警·最近任务·最近操作·最新日志·离线设备·最近巡检明细),支持增删/调序/调宽度/改标题/配参数(时间窗·条数·分组·指标),按看板设自动刷新秒数、全屏值班、`F` 快捷键;只读展示不采集数据,登录可看、operator 及以上可编辑(见下方「运维驾驶舱」) | | 看板设置 | `/dashboards/settings/` | 看板增删改名、排序、设默认、刷新秒数;当前看板的组件增删/上下移/宽度/标题/参数;看板删光后可一键恢复四张内置看板(见下方「运维驾驶舱」) | | 日志中心 · 指令日志 | `/logs/` | 指令执行历史(含状态/耗时)+ 完整文本日志 `log.txt` 内容 | | 日志中心 · 交换机 syslog 日志 | `/syslog/` | 接收交换机上送的 syslog 告警(UDP 监听),结构化解析后分页展示,支持按设备/级别/关键字/时间筛选与 AI 分析(见下方「交换机 syslog 日志」) | | 告警中心 | `/alerts/` | 平台各处检出的异常汇成一条时间线:按来源 / 级别 / 状态 / 天数 / 关键字筛选,统计卡给出 今日·未处理·推送失败·启用规则数;单条可确认、重试推送、删除,也可清理只保留最近 100 条(见下方「告警中心」);每行「AI 根因」进入 `/alerts//ai/`,先看排障上下文再出根因与排查步骤(见下方「AI 助手」) | | 安全事件 | `/security/` | **安全联动监测**:sFlow 流量特征(触达目的数、SYN/ACK、包长、外联首见、心跳规律)× 交换机 syslog 信号(登录失败/端口安全/ARP 冲突/风暴抑制)按源 IP 联动判定,六条规则(横向移动/端口扫描/暴力破解/ARP 欺骗/新增·心跳外联/流量洪水)产出**带证据链**的安全事件(流样本+日志行+终端台账接入位置);同源同类合并不刷屏,新建/升级按 source=安全联动监测 的告警规则推送;内网范围取自 IPAM,白名单(IP/CIDR)豁免;详情页确认/忽略,处置走命令模板+变更工单(见下方「安全联动监测」) | | 监测设置 | `/security/settings/` | 安全联动监测的开关与节奏(检测间隔/流量滑窗)、六条规则阈值、白名单(IP/CIDR)增删、手动「立即检测一轮」(见下方「安全联动监测」) | | 安全基线 | `/baseline/` | **主机安全基线检查**:内置 16 条基线规则(Linux 10 条 + Windows 6 条:SSH 配置 / 口令策略 / 文件权限 / 内核参数 / UAC / RDP NLA / SMBv1 / 防火墙服务…),可人工编写或 **AI 生成草案**(回填表单人工确认后入库);规则随检查清单下发,Agent v1.9.0 起只做**声明式只读检查**(读文件 / /proc/sys / 注册表 / 服务状态,永不执行平台下发的命令),结果随上报对账为 通过 / 违规 / 无法检查 三态;按主机聚合的违规数告警(来源 `baseline`,指标 `baseline_fail` / `baseline_high`)(见下方「主机安全基线检查」) | | 平台自检 | `/selfcheck/` | 平台自己把 **40+ 个关键页面 GET 一遍**(只读,不改任何数据):每条断言 HTTP 状态 + 必须出现的区块文本 + 绝不该出现的错误文本(`Traceback`/未渲染的模板标签),超时判警告不判失败;可点「立即自检」或挂成**定时任务**(类型「页面冒烟自检」,批量指令栏填路径可只查指定页),失败按 `source=平台自检` 的告警规则**一轮聚合成一条**推送(见下方「平台自检」) | | 告警规则 | `/alerts/rules/` | 按来源配置判定口径(syslog 级别上限与关键字 / SNMP、主机与遥测指标阈值 / 主机「数据过期」与遥测「推送中断」分钟数 / 接口错包增长条数)、去重间隔与绑定通道,可启用停用、编辑、测试推送 | | 推送通道 | `/alerts/channels/` | 企业微信 / 钉钉 / 飞书机器人 webhook(钉钉、飞书支持加签密钥)与 SMTP 邮件;密钥加密存储、编辑留空即不改,支持测试推送 | | AI 配置 | `/ai/config/` | 保存/切换多家大模型调用配置(DeepSeek、GLM、MiniMax、MiMo、Ollama、New API 网关、自定义),全局唯一“当前”配置,可测试连接;New API 网关支持「填一次 Key → 拉取模型清单 → 勾选导入」,其余参数自动带入;API Key 加密存储 | | AI 助手 | `/assistant/` | 用自然语言问平台里的数据(离线设备、告警集中在哪、IPAM 有没有冲突…),回答只依据库内快照并附「本次参考的数据」,页面给 6 个快捷问题(见下方「AI 助手」) | | 操作审计 | `/audit/` | 平台数据的增删改与高危动作留痕(谁 / 从哪个 IP / 对什么 / 改了什么),按动作·类型·关键字·时间筛选,分页与 CSV 导出,管理员可清理(保留最近 500 条)(见下方「操作审计」) | | 用户与权限 | `/users/` | **仅管理员**:建号、改角色(只读 / 运维 / 管理员)、按地区划数据范围、停用启用、重置密码、删除;带「不能动自己」与「最后一个管理员」保护(见下方「用户与权限(RBAC)」) | | 账号安全 | `/account/mfa/` | **给账号加第二道门(可选)**:顶栏「🔐 账号安全」自助开/关双因子(TOTP):扫码 → 填一个动态码确认才生效 → 一次性给出 10 条备用码;关闭/重置备用码要「当前口令 + 一个验证码」双证。管理员在「用户与权限」页可按账号**重置**(手机丢了时的唯一出口)(见下方「账号双因子(TOTP)」) | | 机房管理 | `/dc/` | 楼栋 → 楼层 → 机房 → 机柜四层位置体系,各层级列表、新增与删除(删上级级联清空下级;删机柜自动解除设备绑定);顶部**统计卡**(楼栋/楼层/机房/机柜/已摆放/已上架设备/**U 位占用率**)+ **关键词/楼栋筛选**;**⚡ 一次新增**把楼栋→楼层→机房一次建到位(可顺带按命名模板批量建机柜);「机柜」页签**批量新增**按 `行×列` + 模板(`A{N}`→A01…A08、`{label}{N}`→A01/A02/B01/B02)建柜、重名自动跳过(见下方「机房管理」) | | 机房导入导出 | `/dc/export/`、`/dc/import/` | **一行 = 一个机柜位**:导出当前结构(列名与导入模板相同,可直接回灌);导入按「楼栋/楼层/机房/机柜」四列定位,**缺失层级自动创建**(新机房网格用导入页默认行列,`机柜`列留空 = 只建到机房层),设备按 IP 上架;单元格语义 **留空=不动 / `-`=清空 / 有值=覆盖**;一次 ≤2000 行,逐行给出新建/更新/跳过/失败原因并列出自动创建的层级(需运维及以上,导出只读可用) | | 机柜表单 | `/dc/form//`、`/dc/form///` | 新增/编辑楼栋、楼层、机房(含布局行列数)、机柜(型号/U 数)的共用表单页,同名重复会被拒绝 | | 机房详情 | `/dc/room//` | 顶部**U 位容量统计卡**(总容量/已占用/空闲/占用率)+ **机柜过滤框**(按机柜名/型号/设备名/IP);机柜列表与每柜的 U 位视图(CSS 网格按 U 数展示绑定设备**与机柜配件**,配件按占用 U 数跨格),每柜标注「占用 x/y U、空闲几 U、下一个空位」;设备↔机柜绑定/解绑(**U 位留空即自动选第一个空位**,手填则校验 1≤u≤U 数且同柜同 U 不重复)、**批量上架**(一次勾多台放进同一机柜并按序排位,放不下的留在外面)、只读列出本机房已上架的配件 | | 机柜屏幕布局 | `/dc/room//layout/` | 把机柜摆放到机房的 rows×cols 网格:点击侧栏机柜→空格放置、拖拽换位、转向(0°/90°)、移除,保存时校验越界与同格冲突;网格外圈是**走廊**,UPS / 精密空调 / 配电柜 / 机房大门 / 玻璃门等**基础设施**也在同一页摆放(可旋转 0°/90°/180°/270°、删除、一键生成默认布局),3D 机房按这份数据渲染(见下方「机房管理」) | | 3D 机房 | `/dc/room//3d/` | 按布局用 Three.js 渲染整间机房:机柜 + UPS / 精密空调 / 配电柜 / 墙体 / 玻璃门 / 大门等基础设施;健康状态与「监控大屏」同口径着色(正常 / 偏高 / 严重 / 离线 / 无数据 / 空柜),机柜里的**服务器**改按主机体检口径(CPU / 内存 / 磁盘 + 数据新鲜度),SNMP 与主机指标都没有的网络设备回落到**遥测指标**着色;支持全屏、自动巡检轮播、顶部健康滚动条、点击机柜看全部 U 位详情与设备图标,每 60 秒自动刷新(见下方「机房管理」) | | 3D 机房数据 | `/dc/room//3d/data/` | 3D 页轮询的 JSON 接口:机柜坐标 / 设备与 U 位 / 健康档 / CPU 内存(服务器另带磁盘、主机标记与指标来源时间)/ 图标地址 / 汇总计数(含服务器台数),与页面首次渲染同源 | | 设备图标库 | `/dc/icons/` | 上传/删除自己的设备图标(png / jpg / jpeg / gif / svg / webp,单个 ≤2MB,名称唯一),统计被引用设备数;文件不裸奔在 `/media/`,由登录态视图 `/dc/icons//file/` 输出(见下方「机房管理」) | **设计要点:** - 设备表放在 Django 自带的 SQLite(`h3c_web/db.sqlite3`),密码用项目 `SECRET_KEY` 签名加密存储,数据库里看不到明文。 - syslog 接收服务随 `runserver` 一起自动启动,监听 UDP 端口收交换机日志(默认 `514`,可用环境变量 `H3C_SYSLOG_PORT` 修改,Windows 无管理员权限绑定 514 会失败、 可改用 `1514` 等高端口;`H3C_SYSLOG_DISABLED=1` 可禁用以调试)。识别不了的报文 也整条落入 `raw` 字段,不丢告警。 - AI 的 API Key 保存在 `AIProvider` 表,用 `SECRET_KEY` 派生的密钥 XOR 加密后以 `enc:` 前缀入库(与设备密码同一安全级别:数据库里不是明文,但强度取决于 `SECRET_KEY`,不属于互联网级加密)。 - 执行历史记录(`CommandLog`)只存指令、状态、耗时、错误信息,**不保存回显**, 符合“SQLite 不存回显”的要求;完整回显仅通过网页即时展示并追加写入 `log.txt`。 - 页面复用命令行的核心模块 `h3c_console.py`,登录自动关闭分屏、自动翻页、自动应答 等能力与命令行完全一致。 - 命令行的日志继续写入 `h3c_logs.db`;网页执行时也会把回显追加到页面显示的 `log.txt`(与命令行共用同一份日志文件)。 - 网页执行失败(如设备不可达、超时)不会报 500,会正常渲染并显示错误信息, 同时在历史里记录为 `error`/`timeout`。 - 同一 IP 的设备只能录一条;编辑时密码留空表示不修改。 **设备角色与分组:** - **角色(角色列)**:每台设备可设置「网关交换机」或「接入交换机」,用于网络拓扑 的自动摆放。角色未设置的设备不会出现在拓扑图中,会在拓扑页下方单独列出提示。 - **分组(按大类分开管)**:把设备按机房/楼层/业务等归类。分组分 **网络设备分组**与**服务器分组**两类,一个分组只装同一大类的设备:设备表单的分组 下拉跟着大类联动,跨大类保存会被拒并说清原因;分组管理页也是左右两栏分开列。 分组在设备列表页顶部的「分组管理」中创建和删除(删除分组不影响其中设备, 自动回到“未分组”);**网络设备分组可填 SNMP 社区字,随时可改**(分组胶囊里的 编辑框),服务器分组不用社区字(指标走 SSH 只读探测与 Agent 上报)。胶囊上的 ⇄ 可切换 分组类型,但组里还挂着另一大类的设备时要先把它们挪走;历史混装分组会在胶囊上 如实标出「混入 N 台…」。升级时旧分组自动归类:组内全是服务器的归为服务器分组, 其余(含空组)保持网络设备分组,旧行为不变。新增设备、网段扫描导入、CSV 导入时 都可选择分组。设备列表、批量执行页都按分组分组显示:每组一个表头行(分组名 + 设备数),顶部下拉可按分组筛选(只列当前大类的分组),每组表头带「全选本组」。 > 分组管理、配件/型号这几批小表单都**显式提交到列表页自身**:列表页也会在 > 「一键采集 / 一键备份 / LLDP 采集」的回显结果下渲染(那时地址是 `/device/info-all/` > 这类 URL),表单不写 `action` 就会被浏览器按当前 URL 发给采集视图,点了等于白点 > (2026-10-11 修,`test_template_form_action.py` 门禁盯着)。 - **服务器行只留两个入口**:设备列表里的服务器(物理/虚拟化)不再出现「采集信息 / 执行命令 / 备份 / LLDP 采集」——那是交换机那套流程,对服务器没意义;只保留 **SSH 终端**(打开网页 SSH 终端并自动选中这台)与**服务器监控**(跳到 `/hosts//` 看趋势、硬件与 Agent 令牌),加上通用的编辑/删除。选到「服务器」大类时顶部也不再显示 一键采集与一键备份表单。一键采集、一键 LLDP、一键备份、巡检、AI 巡检、合规检查、 批量执行、变更工单、终端信息采集以及对应的定时任务都会自动跳过服务器(备份会 如实提示跳过了哪几台);直接访问这些单台入口会被拦下并跳到该去的地方。 - **批量编辑**:在设备列表勾选多台设备后点「批量编辑已选设备」,进入批量编辑页, 可只修改**共享字段**——账号、SSH 端口、密码、SNMP 社区字、角色、分组。账号/端口/密码/ SNMP 社区字留空、角色/分组选“保持原样”的设备不修改;设备的名称、IP、型号、序列号、 连接接口等每台设备独有信息一律不动,避免影响各自的其他配置。接口信息以“新增/编辑设备”的 单个录入为准,批量编辑不会触碰。 - **拓扑按分组隔离(硬边界)**:拓扑图**一个分组一张**——网关/接入只在**本分组内** 按 LLDP 认对端连线,别的分组的设备既不会被画进来,也不会被连到本组的总线上; 未分组设备单独成一张图。页面顶部可按分组筛选(`?g=<分组主键>`,`?g=0` 只看未分组), 「分组总览」表逐组给出设备数、网关/接入/未设角色台数、组内链路数、跨分组与未识别 邻居数、已采集 LLDP 台数与最后采集时间;「分组详情」标签页给出每组的设备明细 (角色 / 厂商 / 型号 / 在线 / 连接接口 / 邻居构成「组内/跨组/未识别」/ 最后采集)、 组内链路表、跨分组邻居表与未识别邻居表。**跨分组链路**(对端设备在别的分组)与 **设备名跨分组重复**会在页面顶部单独提醒:前者说明分组划分可能要调整,后者会导致 按名字认对端时误连或漏连。底层数据同样分开:LLDP 邻居记录挂在各自设备下, 拓扑页「收集拓扑信息」、设备列表页「一键采集设备(身份+LLDP)」与定时任务 「拓扑采集(LLDP)」三个采集入口都只作用于**当前分组/任务范围**内的设备, 且「连接接口」回写**只用同一分组内的设备名**推导上联口——跨组同名设备不参与, 不会把 A 组设备的连接接口写成连向 B 组设备的口。 同一套匹配规则(`device_console/topology_groups.py`)被拓扑页、只读 API、拓扑分析、 设备详情与 AI 上下文共用,不会出现「页面一张图、接口另一张图」。 - **网络拓扑(/topology/,总线布局)**:服务端按角色为**每个分组**自动生成 SVG 拓扑图—— **网关交换机排在最上方**,各自垂直连到一条**水平总线**;**接入交换机沿总线下方 垂直挂接**。总线标注所属分组名,盒子内显示设备名/IP/型号/分组名,网关蓝色、接入 绿色,宽度随设备数量 自适应(页面可横向滚动)。**鼠标悬停任意连接线**会浮出提示框,显示该线两端的设备 名称与接口(未采集 LLDP 时接口取“新增/编辑设备”的「连接接口」,如 `GE1/0/2`; 都没有时提示“接口未设置”)。接入线缆的总线侧会显示其**真实上联的网关**及对应接口 (如 `hexin(192.168.56.11)接口 GE1/0/2`,从网关自身的 LLDP 记录反查),网关线缆 的总线侧则列出其下挂的同组接入设备;解析不到已知对端时才回退为“总线/上联 N 台 网关”。悬停总线本身显示其连接了多少台网关/接入。页内 「收集拓扑信息」按钮对**当前筛选范围**(全部分组或所选分组)执行一次 LLDP 采集, 完成后自动刷新拓扑与接口。 按钮旁可**选择采集方式**(默认 SSH): - **SSH 采集**:登录设备解析 LLDP 回显(`display lldp neighbor-information list`, 思科为 `show lldp neighbors detail`),含对端管理地址; - **SNMP 采集**:走标准 **LLDP-MIB(`1.0.8802.1.1.2`,IEEE 802.1AB)** 只读 GET/WALK 远端邻居表(`lldpRemTable`)与本地端口表(`lldpLocPortTable`), 社区字复用「设备 > 分组 > public」解析与各设备的 SNMP 端口(默认 161), 无需 SSH 凭据即可采集;对端名从 `lldpRemSysName` 取、为空回退 `lldpRemChassisId`(MAC 等二进制按十六进制展示),本地接口从 `lldpLocPortId` 映射。SNMP 采集**不提供对端管理地址**(`neighbor_ip` 留空), 拓扑连线只需本地接口与对端名,需管理地址请用 SSH 采集。 - **LLDP 邻居采集(自动回填接口)**:设备列表页有「LLDP采集」单台按钮(走 SSH), 工具栏的「一键采集设备(身份+LLDP)」可按**三种范围**采集邻居与接口 (SSH 或 SNMP 二选一):**全部设备**(当前数据范围内的所有网络设备)、 **按分组**(只采所选分组,`未分组` 也可选;别的分组的名称/型号/序列号、 LLDP 记录与「连接接口」一概不动)、**按勾选**(只采列表里勾中的那几台, 可跨分组勾选,服务器会被自动跳过并提示)。选「按分组」时下拉只列网络设备分组。 拓扑页的「收集拓扑信息」同样可选 SSH 或 SNMP 两种方式, 如上节所述 (SSH 兼容列表表格与 `Port name:` 块两种回显格式;SNMP 兼容上述标准 MIB): 解析邻居关系后写入数据库,每条记录带「采集方式」(`source`:`ssh`/`snmp`, SNMP 采集会整体替换该设备上一次采集(含 SSH)写入的邻居行):设备列表新增 「接口」与「LLDP 邻居」两列展示采集结果;其中**对端是库中已登记设备**的本地 接口会自动写入该设备的「连接接口」(只在**同一分组**内认对端,优先选对端为网关的 那个,作为上联口), 网络拓扑悬停提示随之显示真实接口(多口情况如 `接口 GE1/0/2、GE1/0/3` 顿号连列)。 手填的「连接接口」不会被自动覆盖;设备未启用 LLDP 时解析为空,悬停将回退到 手填值或“接口未设置”。 - **拓扑分析入口**:拓扑页顶部标签条上有「🔍 拓扑分析」,进入 `/topology/analysis/` 对同一批 LLDP 数据做结构体检(见下方「拓扑分析」)。 **多厂商支持(H3C / 华为 / 思科 / 锐捷):** - **厂商字段**:每台设备可设置厂商(H3C/华为/Cisco/锐捷/其他,未设置为空)。厂商决定 SSH 命令集与解析方式,**分两派**:**华为 VRP 与 H3C 命令天然兼容**(沿用全部 `display` 系列);**思科 IOS 与锐捷 RGOS 同属 Cisco 家族**(`show` 系列命令 + `#` 提示符 + 登录 `enable` 升权 + `terminal length 0` 关分屏 + 惯用回显解析)。 锐捷归 Cisco 家族的依据是 netmiko 的 `RuijieOSBase(CiscoBaseConnection)` (会话准备就是 enable + `terminal length 0`、保存用 `write`),所以它**复用思科的 命令与判定层**而不是另起一套(只有 MAC 表关键字写法不同:`show mac-address-table`)。 各家的采集/巡检/合规/备份/LLDP/无线/批量执行/AI 生成都按厂商选命令,互不干扰。 - **自动识别与矫正**:连接设备时会先探测一次真实厂商(先 `display version`,认不出 再 `show version`),**识别成功即覆写数据库里的厂商值**(SNMP 侧另按 sysObjectID 企业号判定:思科 `.9`、华为 `.2011`、H3C `.25506/.43`、**锐捷 `.4881`**)——录错厂商也会被自动纠正, 列表里会提示「厂商 旧→新」。对应地,新增/编辑页、批量编辑页的厂商都提供 「保持原样」语义;解析不出个别指标时如实标「未解析/无法检查」,不会误报。 - **导入区分厂商**: - **网段扫描**:保存扫描结果时可选「自动识别厂商」——入库时对每台设备 SSH 逐台探测后写回(较慢),识别失败回退表单里手动选的厂商;不勾选则统一用 表单选的厂商(或留空)。 - **CSV 导入**:CSV 末尾新增可选 `vendor` 列(老文件不带该列依旧兼容), 支持中文别名(H3C/华三、华为、思科/Cisco、锐捷/RGOS/星网锐捷 → 统一归一);导出时厂商列导出中文。 - **合规检查同样适配思科**:判定命令换为 `show` 系列等价命令(`show running-config` + `include`、`show ntp status`、`show spanning-tree` 等),判定规则为思科惯用配置 的独立实现,拿不准的项标「无法检查」;修复指令预填思科写法。H3C/华为设备完全 走原有 H3C 逻辑,零改动。 - **AI 生成/解析带厂商上下文**:对思科设备,AI 生成的巡检/修复命令会被提示用 `show` 系列、不要用 `display/screen-length`;对华为设备提示用 `display` 系列。 **调试用的管理员后台:** 用 `python manage.py createsuperuser` 创建账号后, 登录 `http://127.0.0.1:8000/admin/` 可查看/维护设备与指令历史。 ## 命令模板(配置模板库) 「命令模板」页(`/templates/`)把「初始化配置、接口 VLAN、接口安全策略、RADIUS、ACL」 这类成型的配置做成**带占位符的模板**,选一批设备、逐台填参数,一次生成每台设备各自的 配置命令,导出 TXT / ZIP,或(各台一致时)带入「批量执行」/生成「变更工单」草稿。 - **占位符语法**:`{key}`(主)与 `$key`(兼容外侧 MCP 的 `*.init.tmpl`),`{{`/`}}` 转义; `#!` 开头是模板说明行(渲染、导出、下发都不输出);`#` 开头是普通注释(保留)。 **内置设备变量**免填、按设备自动代入:`device_name` `device_ip` `device_group` `device_vendor` `device_model` `device_serial` `ip_last` `ip_prefix` `today` (后两个按 /24 取)。 - **参数定义**每行一个 `名称=默认值 # 说明`;默认值可再写占位符、按设备逐台展开, 例如 `hostname=SW-{ip_last}` → 三台自动带出 `SW-11/12/13`;没写默认值的算必填。 - **内置模板五条(H3C/Comware,只读,可一键复制后改)**:交换机初始化(命名 + 管理 VLAN/IP + 默认路由 + SSH(关 Telnet)+ SNMP + NTP + 日志中心)、接入端口 VLAN、接入端口安全加固 (边缘端口 + BPDU 保护 + 端口隔离 + 风暴抑制 + 端口安全)、RADIUS 认证、ACL 策略。 模板只写配置类命令,不含 `save` / `write memory`。 - **批量生成**:生成页先按 **IP 关键字 / 厂商 / 分组**筛选设备(可叠加、可一键清除,筛选只影响候选列表),再 行 = 设备、列 = 参数,默认值已按设备展开,逐格改;某列各台相同时用 表头输入框一次覆盖全列;结果区每台一段命令,可导出 **TXT**(合并,每台带 `# 设备名 (IP)` 注释)或 **ZIP**(每台一个 `.cfg`)。还有没填的参数时结果里保留占位符、 标出缺哪些键,并**拦住导出与下发**。 - **与下发路径的衔接**:各台命令**完全一致**时才提供「带入批量执行」(跳批量执行页, 命令与勾选设备已预填,仍需人工确认后执行)与「转变更工单草稿」(按平台审批流程走); 各台不同(含 `{device_name}` 这类设备变量)只能导出——批量执行与工单都是"同一批命令 发给所有设备"的模型。 - **AI 生成模板**:描述需求(可选参考设备带出机型/厂商)→ AI 返回带占位符的草稿 → 回填编辑器人工核对 → 保存后来源标记「AI」。只生成文本、不自动下发; 未配置模型时按钮灰掉并提示先去「AI 配置」。 - **权限与留痕**:查看/生成/导出登录即可(数据范围同全站);新建/编辑/复制/删除/AI 生成 需要运维及以上;模板增删改走操作审计(`command_template`),导出与带入下发另记语义审计。 实现落点:模型 `CommandTemplate`(迁移 0079 + 0080 预置内置模板)、占位符引擎 `device_console/command_templates.py`(解析、内置设备变量、动态默认值、未解析检查、 TXT/ZIP 导出)、页面 `templates/device_console/command_templates.html` 与 `command_template_generate.html`、守护测试 `test_command_template.py`。 ## 配置备份与对比 对设备执行只读配置导出命令(H3C/华为 `display current-configuration`,思科设备 自动改用 `show running-config`),把完整配置保存为备份文件, 备份文件名自带交换机 IP 与时间戳,并支持任意两份备份的逐行对比(difflib)。 **配置漂移告警:** 每次备份成功后自动与**上一份**备份逐行比对(`config_drift`), 有增删就写一条告警(来源「配置变更」)并沿启用的通道推送,正文含新增/删除行数、 两份文件名与最多 30 行差异摘要;同一设备 `CONFIG_ALERT_HOURS`(默认 12 小时)内只告一次, 窗口过了仍有差异会再告一次(正好提醒“变更还没处理”)。首轮备份没有可比对象,不告警。 定时备份任务的结果摘要里也会带上「配置有变更 N 台」,网页「一键备份」的结果里同样带 `drift` 字段;比对失败一律静默,绝不影响备份本身。 **备份文件命名与目录:** ``` backups/backup_<交换机IP>__.cfg 例如: backups/backup_192.168.56.11_20260901_203650.cfg ``` **命令行:** ```bash # 备份设备配置(自动存为 backups/backup__<时间戳>.cfg) python h3c_backup.py backup 192.168.56.11 -u admin -p 12345678 # 列出所有备份(按时间倒序) python h3c_backup.py list # 只看某个 IP 的备份 python h3c_backup.py list --ip 192.168.56.11 # 查看某份备份内容 python h3c_backup.py show backup_192.168.56.11_20260901_203650.cfg # 对比两份备份 python h3c_backup.py diff backup_旧.cfg backup_新.cfg # 对比某个 IP 最近的两份备份(日常巡检最常用) python h3c_backup.py diff 192.168.56.11 # 自定义备份目录 python h3c_backup.py backup 192.168.56.11 -u admin -p 12345678 --dir D:\configs ``` 对比输出中 `-` 开头为删除行、`+` 开头为新增行、`@@` 为差异块,绿色/红色高亮可用 `--color` 开启(需现代终端支持 ANSI)。 **网页(推荐):** | 页面 | 地址 | 功能 | | --- | --- | --- | | 配置备份 | `/backups/` | 设备列表式界面:**备份范围可选「全部 / 按分组 / 按勾选」**,交换机一张表格展示,行内列出该机的**配置文件历史**(查看/下载/与上一版对比) | | 命令模板 | `/templates/` | **配置模板库**:内置 5 条 H3C 模板(初始化 / 接口 VLAN / 接口安全策略 / RADIUS / ACL),也可自建或让 **AI 按需求生成**;模板正文用占位符(`{vlan}` 与 `$community` 两种语法都认,`#!` 开头是说明行不下发),内置设备变量(设备名/IP/分组/厂商/型号/序列号/IP 末段与前三段/日期)按所选设备自动代入,参数默认值可写 `SW-{ip_last}` 这类动态表达式;**生成页**按设备逐台填参数(表头一键批量填充),导出 TXT(合并)或 ZIP(每台一个 .cfg);各台命令一致时可直接**带入批量执行**或**转变更工单草稿**,缺参数会拦住导出(见下方「命令模板」) | | 配置对比 | `/backups/diff/` | 任选两份备份逐行对比,绿=新增 红=删除 彩色显示 | 备份页顶部工具栏提供三选一的**备份范围**(与「一键采集」同一套交互): - **全部**:当前数据范围内的全部网络设备(默认); - **按分组**:只备份所选分组(含「未分组设备」),别的分组一概不动; - **按勾选**:只备份表格里勾选的那几台,**可以跨分组勾选**。 选定后点「开始备份」,对目标设备**并行**执行配置备份并即时展示结果(每台成功/失败、 备份文件、大小)。用 `?g=<分组>` 打开本页可把表格也收窄到该分组,备份完回跳时保留该 筛选,看到的表与刚备份的范围是同一批设备。设备列表里每台设备自身的「备份」按钮仍保留, 单击只备份那一台。 服务器没有 `display current-configuration` 这回事,无论哪种范围都会被自动跳过并提示 (指标请看「服务器监控」,要敲命令请用「网页 SSH 终端」)。范围与勾选**都经数据范围 校验**:勾选列表会与当前账号可见的设备取交集,越权主键即使被提交上来也不会被备份。 **备份历史(交换机表格展示):** `配置备份` 页是一张**统一表格,每台交换机一行**, 该交换机的**配置文件历史直接列在表格行内**(最新在前,**默认折叠只显示最新 2 份**, 超过时点「展开全部」查看所有版本):每份显示 文件名(点击查看)、备份时间、大小, 并带「下载」「与上一版对比」(最早一份显示"最早版本")。表格还含备份份数、最近备份 时间,未录入数据库但有备份的 IP 也会单独成行展示。 **设计要点:** - 备份命令是只读的 `display current-configuration`,不会改动交换机配置。 - 网页备份同样通过共享 SSH 核心 `h3c_console.py` 下发,登录自动关分屏、自动翻页。 - 备份文件在 `h3c_backup.py` 与 Django 网页间完全共用(回车后生成文件的 IP+时间戳 即写入文件名),列表页直接扫描目录解析、按 IP 分组,无需数据库。 - 对比同时支持“同版无差异”判断(输出提示)与真实增删行的彩色差异。 - 网页查看/下载对文件名做了白名单校验,无法通过 URL 读取备份目录以外的文件。 ## 设备批量导入 / 导出 通过 ping + SSH(22) 端口探测自动判定网络设备,支持网段扫描、CSV 导入、CSV 导出。 **判定规则:** ping 可达 且 22 端口开放 → 判定为网络设备。 **网页(推荐):** 导航「批量导入」→ `http://127.0.0.1:8000/import/` - **网段扫描**:输入 CIDR(如 `192.168.56.0/24`),自动并发探测每个 IP, 结果**只列出判定为网络设备的主机**(IP 不通或 22 端口未开放的一律隐藏, 无法勾选),默认勾选并显示 Ping / 22 端口 / 判定结果;**已在设备库中的主机 标注“已添加”**,不显示导入勾选框,避免重复入库, 其余填上账号密码后一键批量入库(密码加密)。最多支持 2048 台,/24 约半分钟; 若一个都没扫到会给出提示。 - **CSV 导入**:下载**导入模板**(⬇ 下载导入模板)后按格式填写再上传,模板为 UTF-8 带 BOM 的 CSV(Excel 可直接打开),带说明注释和示例行,可在开头放 `#` 注释; 导入时同 IP 已存在自动跳过、缺密码跳过、非法行逐行报错; 可选“导入前 ping + 22 端口校验”在结果里显示每台设备的探测情况。 CSV 格式(支持中英文表头,`#` 为注释;`role`/`group`/`vendor` 三列可留空, 行内留空时回落表单里选的“默认分组”): ```csv name,ip,username,password,port,role,group,vendor 核心交换机,192.168.56.11,admin,12345678,22,gateway,总部,H3C 2楼接入,192.168.56.21,admin,12345678,22,接入交换机,教学楼A,华为 ``` `role` 列填 `gateway`/`接入`/`网关` 等即识别为网关交换机,`access`/`接入交换机` 等为接入交换机,其他值视为未设置;`group` 列填分组名,不存在会自动创建; `vendor` 列填 `h3c`/`华三`、`huawei`/`华为`、`cisco`/`思科` 等即归一为对应厂商, 留空表示未设置(SSH 采集时自动识别矫正)。老 CSV(无 `vendor` 列)依旧兼容。 - **CSV 导出**:一键导出全部设备。⚠️ 导出的 CSV 含**明文密码**,请妥善保管, 不要外传。 **命令行 `python h3c_scan.py`:** ```bash # 探测单台主机 python h3c_scan.py probe 192.168.56.11 # 网段扫描(并发,输出在线主机与判定结果) python h3c_scan.py scan 192.168.56.0/24 # 扫描并把判定的网络设备导出为 CSV(供网页导入) python h3c_scan.py scan 192.168.56.0/24 --out found.csv # 校验设备 CSV 文件格式 python h3c_scan.py csvcheck devices.csv ``` 网页导入与命令行共用同一个探测/扫描/CSV 解析模块 `h3c_scan.py`。 ## 设备批量执行(命令) 对多台设备批量下发指令,适合巡检(`display` 类只读指令)、批量查询状态等场景。 **网页:** 导航「批量执行」→ `http://127.0.0.1:8000/batch/` - **勾选设备**:设备按分组分组显示(每组表头带「全选本组」复选,也可全表全选), 顶部下拉可按分组筛选(只列出一个分组的设备),角色列一并展示。 - **输入指令**:多条指令用换行或 `;` 分隔,将按顺序逐条下发。 - **执行方式**:勾选的设备**并行执行**(默认并发 10 台,可在页面上调整“并发设备数”); 每台设备连接一次、内部指令仍按顺序逐条下发;单条超时可调(默认 20 秒)。 设备越多提速越明显:例如 30 台设备各跑 3 条指令,串行约需 30 倍单机耗时, 并行后接近 3~4 批的耗时。 - **结果展示**:按勾选顺序分组展示每条指令的状态(成功/失败/超时)与耗时;成功回显 直接显示在页面下方,同时追加写入 `log.txt`(带设备 IP 前缀,便于区分多台设备)。 **超时**指等满命令超时都没等到新的命令行提示符——命令可能还在设备上跑,也可能在等 Y/N 确认(平台不自动应答,这类要确认的指令请到「SSH 终端」手工执行);这类结果不再 因回显里没有报错文本就被算成成功(`save` 就是这样:看起来成功、其实没落盘,2026-10-12 修)。 - **下发后内容不丢**:点「批量执行」后页面**仍停在「批量执行」标签页**,指令框里的命令与 勾选**原样保留**,可在原内容上改完直接再下发一次;逐台回显在「执行结果(N 台)」标签页, 顶部另有一条提示可直接跳过去。(早期版本提交后会自动切到结果标签页,指令框所在的执行 面板被隐藏,看起来像"刷新一下输入就没了"。) - **入库记录**:每条指令写入执行历史(不含回显),状态为 `ok` / `error` / `timeout`, 失败的指令附带原因;设备连接失败时,本批指令全部记为失败并显示原因,不会误报“已下发”。 - ⚠️ 指令对所有勾选的设备生效,请谨慎输入 `reset`、`save`、`delete`、`reboot` 等破坏性指令。设备确认类提问(Y/N)**不会自动应答**,需要确认的指令会等待直到超时 (结果里标成「超时」),建议只执行 `display` 等只读指令;确需保存配置用 `save force` (Comware 的 `save force` 不提问,见厂商命令参考)。 **AI 生成配置:** 批量执行页指令框上方有「AI 生成配置」区块。用自然语言描述想要的 配置(如「创建 vlan 100、101,把端口 GigabitEthernet1/0/1 加入 vlan 100 并配置为 access」),选中目标设备后点击生成,AI 会返回可直接下发的 H3C 命令并**预填回指令框**, 确认无误后再点「批量执行」。生成结果不会自动执行,只做辅助填表;AI 追加的 「【注意】/【说明】」说明行会留在生成结果预览里,**不进指令框**(那几行不是命令, 发到设备上只会得到 `% Unrecognized command`)。生成后页面地址停在 `/batch/ai-generate/`, 页内「批量执行」按钮仍指向 `/batch/`——2026-10-12 修过一次「在这一页点下发毫无反应」: 当时执行表单没写 `action`,浏览器按当前 URL 提交,命令被 POST 回 AI 接口后清空。 ## 变更工单(提交 → 审批 → 执行 → 回滚) 「变更工单」页(`/work-orders/`)把「改设备配置」变成一条可追溯的流程: **谁提的、谁批的、改了什么、怎么回滚、结果如何**都存进工单。与「批量执行」页的 分工是:批量执行适合当场敲只读命令,工单适合有审批要求的正式变更。 **状态流转:** ```text 草稿 ──提交──> 待审批 ──批准──> 已批准 ──执行──> 已执行 / 执行失败 ↑ │ │ └────撤回───────┴──驳回──> 已驳回 ─改完再提交─┘ └──回滚──> 已回滚 ``` - **提交 / 撤回**:申请人本人或管理员;被驳回的工单改完可以重新提交。 - **批准 / 驳回**:仅管理员,且**不能审批自己提交的工单**(超级用户例外,提示与审计里 会标注「自批」);**驳回必须写明原因**,申请人好知道改哪儿。 - **执行**:运维及以上;**高风险工单需要管理员执行**。 - **回滚**:只有「已执行 / 执行失败」且填了回滚命令的工单能一键回滚。 **新建 / 编辑**(`/work-orders/add/`、`/work-orders//edit/`):变更标题、变更原因 (为什么改 / 影响面 / 怎么验证)、风险级别(低 / 中 / 高)、计划变更时间、单条命令超时、 是否执行前自动备份;目标设备按分组勾选(**只能选自己数据范围内的设备**,越权的 id 直接 忽略);变更命令与回滚命令都用换行或 `;` 分隔,按顺序逐条下发。只有**草稿与被驳回**的 工单能改,已提交 / 已批准的要先撤回或驳回。 **执行前体检**(详情页实时给出): - **硬错误(不能执行)**:状态不是「已批准」、没有目标设备、变更命令为空、 有设备不在当前账号的数据范围内。 - **警告(可执行,但要人确认)**:没填回滚命令;命中高危命令特征(`reboot`、`save`、 `delete /force`、`format`、`shutdown`、`undo vlan`、改账号密码、删路由或接口 IP、 关 STP、升级镜像…);命令会向设备提 Y/N 确认(平台**不会自动应答**,可能等到超时); 有设备最近监测为离线;提前于计划时间变更;命令超过 50 条或设备超过 50 台 (建议拆单 / 分批)。表单页输入命令时也会即时提示同类风险。 **执行与回滚:** - 开了「执行前自动备份配置」就先并行备份目标设备(复用配置备份那套逻辑,顺带做漂移 检测),备份文件名与成功 / 失败记进工单;**备份失败不阻断变更**,但页面会明确标出 这台没有「变更前」还原点。 - 下发复用「批量执行」的并行 SSH 实现:多台设备并行,单台内部命令按顺序。 - **全部设备成功**才记「已执行」;只要有一台失败就记「执行失败」——部分成功比全失败 更危险,得让人看逐台结果决定继续还是回滚。 - 回滚全部成功 → 「已回滚」;有失败则**保留原状态**并留下回滚结果,提醒人工上设备处理。 - 工单里只存命令文本与状态 / 错误 / 耗时,**不存回显**(回显在「日志中心」与 `log.txt`); 每次执行与回滚都写一条「任务监控」记录(名称形如 `变更工单 #12 …`、 `工单回滚 #12 …`),失败原因可在任务详情里逐台查看。 **列表与筛选**:按状态、关键字(标题 / 变更原因)筛选,可勾「只看我提交的」,每页 20 条; 统计卡给出 总数 / 待审批 / 已批准待执行 / 已执行 / 执行失败 / 我提交的;详情页底部 汇总这张工单的操作审计。 **权限与删除**:只读角色只能查看(写请求由中间件统一拦下);数据范围限定地区的账号只看 得到自己提交的、或目标设备在本地区的工单。删除只允许管理员,或申请人删自己的草稿 / 被驳回工单——已进入执行环节的工单是变更记录,不允许悄悄删掉。所有写操作都记 「操作审计」(对象类型 `change_order`)。 **代码入口**:状态机与执行封装在 `device_console/change_order.py`(`preflight()` 体检、 `transition()` 流转、`execute()` / `rollback()` 下发,命令下发器可注入,单元测试不触网); 工单模型是 `models.ChangeOrder`。 ## 交换机 syslog 日志(syslog 告警接收) 导航「日志中心 · 交换机 syslog 日志」→ `http://127.0.0.1:8000/syslog/`(指令日志与交换机 syslog 日志 共用「日志中心」入口,顶部中心标签条切换)。平台随网页服务启动一个 **UDP syslog 服务**,接收交换机上送的日志并按 RFC3164 / H3C 扩展格式**结构化解析**后入库: 拆出优先级(facility/severity,0-7 对应紧急/严重/危急/错误/警告/通知/信息/调试)、 时间、模块(tag)、H3C 事件名(如 `PROC_CPU`、`IFNET_STATE`)与正文;来源 IP 命中 设备库的报文自动关联到对应设备。 **交换机侧只需要配置 loghost:** ``` info-center enable info-center loghost <平台IP> 514 facility local7 info-center source default channel loghost log level informational ``` (页面底部有完整示例与说明;端口按平台实际监听端口填写。) **页面功能:** - 按设备 / 级别 / 时间范围(近 1/3/7/30 天)/ 关键字筛选,每页 50 条分页展示。 - **展示前先过一道加工(`syslog_format.py`;只作用于页面渲染,原文不动)**: - **级别定色**:行左侧色条 + 级别气泡 + 圆点,8 个级别按 5 档配色——0-2 紧急/严重/危急 红底红线、3 错误红、4 警告琥珀、5 通知天蓝、6-7 信息/调试灰蓝,一眼扫出该先看哪条; - **模块/事件拆芯片**:`%%10IFNET/3/PHY_UPDOWN(l): …`、`%LINK-3-UPDOWN: …` 这类前缀从 正文里剥出来单独成芯片(正文不再重复一遍前缀); - **关键字标色**:接口名青、IP 绿、MAC 紫、VLAN 蓝绿、数值+单位(`95%` / `68℃`)琥珀、 `UP/成功/恢复` 绿、`DOWN/失败/拒绝/超时/异常` 红、登录用户名粉; - **关键字段芯片**:从正文抽出接口 / IP / MAC / VLAN / 用户 / 端口,点一下即按该值筛选; - **安全边界**:分词只产出「片段 + CSS 类」,模板逐段转义输出——设备发来的正文里带 `