# web-main **Repository Path**: zxfLoveWd/web-main ## Basic Information - **Project Name**: web-main - **Description**: 集成多个子模块的web服务 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-27 - **Last Updated**: 2026-03-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Web-Main 微服务网关平台 Web-Main 是一个基于 Flask 的微服务网关平台,用于统一管理和部署多个 Web 服务,提供网络监控和内存分析等功能。 ## 项目概览 本项目采用微服务架构,通过统一的网关管理多个独立服务,实现了网络监控、内存泄漏分析等功能,为系统运维和故障排查提供了有力工具。 ## 架构说明 项目采用**微服务网关架构**,由网关层和多个独立微服务组成: - **Gateway(网关层)**: 统一入口,负责路由转发、服务管理、状态监控 - **Services(微服务)**: 各个独立的服务模块,可单独部署和运行 ## 可用的服务 - **ecn-monit**: ECN 网络监控服务,实时监控网络接口的 ECN 标记率 - **roce-monit**: RoCE 网络监控服务,监控 RoCE/RDMA/NVMe-oF 故障 - **memleak-parse**: 内存泄漏分析服务,分析内存对比数据,检测内存泄漏情况 ## 核心功能 ### 网关功能 - 统一服务入口和路由转发 - 服务状态管理(启用/禁用) - 统一的错误处理 - 服务健康检查 ### ECN 监控服务 - 实时采集 ECN 数据 - 可视化折线图展示 - 多服务器、多接口支持 - 自动数据清理 - 响应式 Web 界面 - CSV 数据导出 ### RoCE 监控服务 - 支持两种网卡类型采集(Infiniband 和 IRDMA) - 自动计算 delta(增长量) - Counter 语义分类(拥塞/重传/drop 等) - 异常事件自动识别 - Web 可视化界面 - 多服务器对比、历史回溯 - 同服务器多接口支持 - 按服务器类型继承选择配置 - Excel 数据导出 - 优化数据库架构(按服务器类型分表) ### 内存泄漏分析服务 - 多种数据输入方式(粘贴数据、上传文件、使用示例数据) - 自动数据验证 - 内存泄漏分析 - 详细报告生成 - 用户友好界面 - 并发支持 ## 使用方法 ### 启动网关(推荐方式 - 统一入口) 网关是所有服务的统一入口,启动后可访问所有服务: ```bash python app.py ``` 启动后访问 `http://localhost:5000`,即可通过网关访问所有服务: - ECN 监控: `http://localhost:5000/ecn-monit` - RoCE 监控: `http://localhost:5000/roce-monit` - 内存泄漏分析: `http://localhost:5000/memleak-parse` ## 项目结构 ``` web-main/ ├── app.py # 网关应用(统一入口) ├── config/ # 配置目录 │ ├── app_config.json # 应用配置 │ └── deploy_config.json # 服务配置 ├── services/ # 微服务目录 │ ├── ecn_monit/ # ECN 监控服务 │ │ ├── core/ # 核心功能 │ │ ├── static/ # 静态资源 │ │ ├── templates/ # 模板文件 │ │ ├── web.py # 服务蓝图 │ │ ├── service.py # 服务脚本 │ │ └── config.json # 服务配置 │ ├── roce_monit/ # RoCE 监控服务 │ │ ├── core/ # 核心功能 │ │ ├── static/ # 静态资源 │ │ ├── templates/ # 模板文件 │ │ ├── web.py # 服务蓝图 │ │ ├── service.py # 服务脚本 │ │ ├── servers.json # 服务器配置 │ │ ├── rules.py # 规则配置 │ │ └── known_counters.json # 已知计数器 │ └── memleak_parse/ # 内存泄漏分析服务 │ ├── core/ # 核心功能 │ │ ├── examples/ # 示例数据 │ │ └── script/ # 分析脚本 │ ├── templates/ # 模板文件 │ ├── web.py # 服务蓝图 │ └── service.py # 服务脚本 ├── common/ # 公共组件 │ ├── __init__.py # 模块初始化 │ └── services_manager.py # 服务管理器 ├── db/ # 数据库目录 ├── log/ # 日志目录 ├── templates/ # 网关模板 │ ├── base.html # 基础模板 │ ├── dashboard.html # 仪表板 │ ├── error.html # 错误页 │ └── home.html # 主页 ├── static/ # 公共静态资源 │ ├── css/ # 样式文件 │ └── js/ # JavaScript 文件 ├── LICENSE # 许可证 ├── README.md # 项目说明 └── requirements.txt # Python 依赖 ``` ## 服务详细说明 ### Gateway(网关) - **功能**: 统一入口、路由转发、服务管理 - **端口**: 5000 - **启动方式**: `python app.py` - **特性**: - 服务状态管理(启用/禁用) - 统一的错误处理 - 服务健康检查 - 自动启动已启用的服务采集器 ### ecn-monit - **功能**: ECN 网络监控,实时监控网络接口的 ECN 标记率 - **路由前缀**: `/ecn-monit` - **特性**: 实时数据展示、图表分析、导出功能 - **API 端点**: - `/ecn-monit/servers` - 服务器列表 - `/ecn-monit/interfaces` - 接口列表 - `/ecn-monit/ecn_data` - ECN 数据 - `/ecn-monit/api/ecn/pause` - 暂停/恢复 - `/ecn-monit/api/ecn/export/csv` - CSV 导出 ### roce-monit - **功能**: RoCE 网络监控,监控 RoCE/RDMA/NVMe-oF 故障 - **路由前缀**: `/roce-monit` - **特性**: 计数器监控、数据可视化、异常事件识别 - **API 端点**: - `/roce-monit/servers` - 服务器列表 - `/roce-monit/counters` - 计数器列表 - `/roce-monit/api/counter_data` - 计数器数据 - `/roce-monit/export_xlsx` - Excel 导出 ### memleak-parse - **功能**: 内存泄漏分析,分析内存对比数据,检测内存泄漏情况 - **路由前缀**: `/memleak-parse` - **特性**: mem_cmp 结果分析、报告生成 - **API 端点**: - `/memleak-parse/analyze` (POST) - 分析接口 ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 服务需求差异 ### 全局依赖 - Flask==3.0.0: 所有服务的基础框架 - paramiko==3.4.0: SSH连接工具,用于远程采集数据 - psutil==5.9.6: 系统资源监控 - python-dotenv==1.0.0: 环境变量管理 - prometheus-flask-exporter==0.22.4: 监控指标导出 - gunicorn==20.1.0: WSGI服务器 ### 服务特定依赖 - **ecn-monit**: - 基础依赖:Flask, paramiko, psutil - 用途:实时采集ECN数据,监控网络接口的ECN标记率 - **roce-monit**: - 额外依赖:flask-compress, openpyxl, waitress - 用途:监控RoCE/RDMA/NVMe-oF故障,支持Excel导出 - **memleak-parse**: - 基础依赖:Flask - 用途:分析内存对比数据,检测内存泄漏情况 ## 配置说明 ### 1. 服务配置 (deploy_config.json) ```json { "services": { "ecn-monit": { "enabled": true, "path": "services/ecn_monit", "name": "ECN 监控", "description": "ECN 网络监控服务" }, "roce-monit": { "enabled": true, "path": "services/roce_monit", "name": "RoCE 监控", "description": "RoCE 网络监控服务" }, "memleak-parse": { "enabled": true, "path": "services/memleak_parse", "name": "内存泄漏分析", "description": "内存泄漏分析服务" } } } ``` - `enabled`: 是否启用该服务 - `path`: 服务目录路径 - `name`: 显示名称 - `description`: 服务描述 ### 2. 各服务配置 #### ECN 监控服务配置 (services/ecn_monit/config.json) ```json { "interval": 10, "retention_days": 7, "servers": { "server1": { "host": "服务器IP", "port": 22, "user": "root", "password": "密码", "command_path": "/log/watch_ecn", "interfaces": ["twenty-fivegige0_54"] } } } ``` #### RoCE 监控服务配置 (services/roce_monit/servers.json) ```json { "interval": 10, "retention_days": 7, "defaults": { "port": 22, "user": "root" }, "type_defaults": { "type1": { "type": 1, "counter_path": "/sys/class/infiniband/{}/ports/1/hw_counters" }, "type2": { "type": 2, "counter_path": "/sys/kernel/debug/irdma/{}" } }, "servers": { "srv137": { "host": "10.125.220.137", "password": "your_password", "server_type": "type1", "interfaces": [ { "name": "129", "ifname": "rocep129s0f0" }, { "name": "130", "ifname": "rocep130s0f0" } ] } } } ``` ## 生产部署建议 1. **配置反向代理** (Nginx): - 配置 `/ecn-monit` 路由到网关 - 配置 `/roce-monit` 路由到网关 - 配置 `/memleak-parse` 路由到网关 ## 注意事项 1. 确保每个服务目录都存在对应的 `service.py` 和 `web.py` 脚本 2. 网关端口 5000 需要未被占用 3. 使用网关方式启动时,所有服务通过网关访问,无需单独启动各服务 4. 使用 Ctrl+C 可以停止正在运行的服务 5. 首次启动 RoCE 监控服务时,会自动采集计数器名称并生成数据库表结构 6. 内存泄漏分析服务支持多种数据输入方式,确保输入数据格式正确 7. 日志文件会生成在 `log` 目录中 8. 数据库文件会生成在 `db` 目录中 ## 快速开始 ```bash # 1. 安装依赖 pip install -r requirements.txt # 2. 启动网关 python app.py ``` 启动后访问 `http://localhost:5000` 即可使用所有服务: - ECN 监控: `http://localhost:5000/ecn-monit` - RoCE 监控: `http://localhost:5000/roce-monit` - 内存泄漏分析: `http://localhost:5000/memleak-parse` 按 `Ctrl+C` 停止服务。 ## 技术栈 - **后端**: Python 3.8+, Flask - **前端**: HTML5, CSS3, JavaScript, jQuery, Plotly - **数据库**: SQLite - **部署工具**: Gunicorn, Supervisor ## 许可证 本项目采用 MIT 许可证。