# srv6-link-status-platform **Repository Path**: ngcb/srv6-link-status-platform ## Basic Information - **Project Name**: srv6-link-status-platform - **Description**: No description available - **Primary Language**: Rust - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-11 - **Last Updated**: 2026-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SRv6 链路状态监控平台 面向运营商/企业网络的 SRv6(Segment Routing over IPv6)链路可达性监控系统。通过分布式 Agent 构造 SRv6 探测报文,对目标网元进行主动连通性探测,结果汇聚到中心平台统一展示。 ## 架构概览 ``` ┌──────────────────────────────────────┐ │ Nginx Gateway :443 │ │ (HTTPS 自签名 / 反向代理) │ └───────┬──────────────────┬───────────┘ │ │ /api/ ▼ / ▼ ┌──────────────┐ ┌──────────────┐ │ Backend:3001 │ │ Frontend:80 │ │ (Rust API) │ │ (React 静态) │ └──┬───────┬──┘ └──────────────┘ │ │ ┌────────▼┐ ┌────▼─────┐ ┌─────────┐ │PostgreSQL│ │ Redis │ │ Agent 1 │ │ :5432 │ │ :6379 │◄────│ f1:: │ └─────────┘ └──────────┘ └─────────┘ ... ``` ## 技术栈 | 层级 | 技术 | |------|------| | 前端 | React 18 + TypeScript + Ant Design 5 + ECharts | | 后端 | Rust + Axum + SQLx | | 数据库 | PostgreSQL 16 | | 缓存 | Redis 7 (Dashboard Cache-Aside) | | 部署 | Docker Compose(5 容器) | | 反向代理 | Nginx (HTTPS 自签名证书) | | Agent | Rust 独立二进制 (x86_64 Linux) | ## 快速开始 ### 前置要求 - [Docker](https://docs.docker.com/get-docker/) 20.10+ - [Docker Compose](https://docs.docker.com/compose/install/) 2.0+ ### 一键部署 ```bash git clone https://gitee.com/ngcb/srv6-link-status-platform.git cd srv6-link-status-platform # 1. 生成自签名 HTTPS 证书 cd nginx && bash generate-cert.sh && cd .. # 2. 配置环境变量(可选,使用默认值即可开发测试) cp .env.example .env # 3. 构建并启动所有服务 docker compose up -d --build ``` 访问 **https://localhost** 即可打开管理界面(浏览器会提示证书不受信任,点击"继续访问"即可)。 ### 服务说明 | 服务 | 容器名 | 端口 | 说明 | |------|--------|------|------| | Nginx Gateway | srv6-nginx | 443 (对外) | HTTPS 反向代理,分发前端和 API 请求 | | Frontend | srv6-frontend | 80 (内部) | React 静态资源服务 | | Backend | srv6-backend | 3001 (内部) | REST API 服务 | | PostgreSQL | srv6-postgres | 5432 (内部) | 持久化存储 | | Redis | srv6-redis | 6379 (内部) | Dashboard 数据缓存 | ### 环境变量 | 变量 | 默认值 | 说明 | |------|--------|------| | `PG_USER` | `srv6` | PostgreSQL 用户名 | | `PG_PASSWORD` | `srv6pass` | PostgreSQL 密码 | | `PG_DB` | `srv6_monitor` | PostgreSQL 数据库名 | | `JWT_SECRET` | `srv6-jwt-secret-change-me` | JWT 签名密钥(**生产环境务必修改**) | | `HTTP_PORT` | `80` | Nginx HTTP 端口(自动重定向到 HTTPS) | | `HTTPS_PORT` | `443` | Nginx HTTPS 端口 | ### 常用命令 ```bash docker compose up -d --build # 构建并启动 docker compose logs -f backend # 查看后端日志 docker compose down # 停止容器 docker compose down -v # 停止并删除数据卷(⚠️ 清库) ``` ### 替换为正式 HTTPS 证书 将正式证书文件放入 `nginx/ssl/` 目录: ```bash # 替换自签名证书 cp your-fullchain.pem nginx/ssl/server.crt cp your-private.key nginx/ssl/server.key # 重启 nginx 容器 docker compose restart nginx ``` ## 探测机制 ``` Agent (f1::) ──SRv6报文 Segment:──► 目标网元 (a1::) ▲ │ └──────────── 报文经SRv6转发回源 ──────────────────┘ ``` 每个 Agent 部署在 Linux 设备上,持有公网 IPv6 地址。探测时构造 SRv6 报文,Segment List 为 `<目标SID, Agent回程地址>`,报文经目标网元转发后回到 Agent。 ## 数据层级 ``` 省份 (Region) → 集群 (Cluster) → 网元 (Node) │ SID 地址 (探测目标) ``` ## Agent 部署 Agent 是独立的 Rust 二进制文件,部署在 x86_64 Linux 设备上。 ### 编译 ```bash cd agent rustup target add x86_64-unknown-linux-gnu cargo build --release --target x86_64-unknown-linux-gnu # 产物: target/x86_64-unknown-linux-gnu/release/srv6-agent ``` ### 运行 ```bash ./srv6-agent \ --backend-url https://<平台IP>/api \ --agent-name my-agent-01 \ --agent-ipv6 f1:: ``` > 注意:Docker 部署模式下,Agent 通过 Nginx 的 HTTPS 端口访问平台 API。 ### 参数 | 参数 | 默认值 | 说明 | |------|--------|------| | `--backend-url` | `https://127.0.0.1/api` | 后端平台地址 | | `--agent-name` | `srv6-agent-01` | Agent 名称 | | `--agent-ipv6` | `f1::` | Agent IPv6 地址(SRv6 回程地址) | | `--interval` | `30` | 探测间隔(秒) | ## 开发指南 ### 本地开发(不使用 Docker) **后端:** ```bash cd backend export DATABASE_URL=postgres://srv6:srv6pass@localhost:5432/srv6_monitor export REDIS_URL=redis://localhost:6379 cargo run ``` **前端:** ```bash cd frontend npm install npm run dev # 开发模式,Vite 代理 /api → localhost:3001 ``` ## 项目结构 ``` ├── docker-compose.yml # 容器编排 ├── .env.example # 环境变量模板 │ ├── nginx/ # Nginx 网关 │ ├── nginx.conf # 反向代理配置 │ ├── generate-cert.sh # 自签名证书生成脚本 │ └── ssl/ # 证书目录(git忽略) │ ├── backend/ # Rust 后端 │ ├── Dockerfile │ ├── .dockerignore │ ├── Cargo.toml │ └── src/ │ ├── main.rs # 入口 + 路由 + 后台任务 │ ├── db.rs # PG 连接池 + 建表 │ ├── cache.rs # Redis 缓存层 │ ├── models/mod.rs # 数据模型 │ └── handlers/ # API handler │ ├── frontend/ # React 前端 │ ├── Dockerfile │ ├── .dockerignore │ ├── nginx-frontend.conf # 容器内 nginx 配置 │ ├── package.json │ ├── vite.config.ts │ └── src/ │ ├── types/ # TS 类型 │ ├── services/ # API 封装 │ ├── components/ # 公共组件 │ └── pages/ # 页面 │ ├── agent/ # 探测 Agent │ ├── Cargo.toml │ └── src/main.rs │ └── docs/ # 文档 ├── PRD.md # 产品需求文档 └── DEVELOPMENT.md # 开发进展文档 ``` ## 页面功能 | 页面 | 路由 | 功能 | |------|------|------| | Dashboard | `/` | 统计卡片 + 趋势图 + 省份状态 | | 省份管理 | `/regions` | 省份 CRUD + 级联删除 | | 集群管理 | `/clusters` | 集群 CRUD + 省份筛选 | | 网元管理 | `/nodes` | 网元 CRUD + 级联筛选 + 一键探测 | | Agent 管理 | `/agents` | Agent 列表 + 在线状态 + 任务查看 | | 探测目标 | `/probe-targets` | 探测目标管理 | | 探测结果 | `/results` | 探测结果查看 | | 系统监控 | `/monitor` | Agent CPU/内存监控 | | 告警规则 | `/alert-rules` | 告警规则管理 | | 告警事件 | `/alert-events` | 告警事件查看 | ## License Apache-2.0