# RoceMonit **Repository Path**: zxfLoveWd/roce-monit ## Basic Information - **Project Name**: RoceMonit - **Description**: Roce Monit for hongshan - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-10 - **Last Updated**: 2026-03-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RoCE Counter Monitor RoCE / RDMA / NVMe-oF 故障分析监控工具 ## 功能特性 - 支持两种网卡类型采集: - **Type 1**: Infiniband 网卡 (`/sys/class/infiniband/...`) - **Type 2**: IRDMA 网卡 (`/sys/kernel/debug/irdma/...`) - 自动计算 delta(增长量) - Counter 语义分类(拥塞/重传/drop 等) - 异常事件自动识别 - Web 可视化界面 - 多服务器对比、历史回溯 - 同服务器多接口支持 - 按服务器类型继承选择配置 - **优化数据库架构**:按服务器类型分表,大幅节省空间、提升性能 ## 环境要求 - Python ≥ 3.8 - Linux / Windows ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 数据库架构 新架构采用按类型分表设计,显著提升性能和空间效率: - `servers`: 服务器元数据 (id TINYINT, server_name, server_type) - `counters_type1`: type1 服务器的所有计数器作为列 - `counters_type2`: type2 服务器的所有计数器作为列 - `events`: 事件记录表 - `known_counters.json`: 计数器名称定义(用于建表) **优势**: - 节省空间:每行节省 ~19 字节(server_id 1字节 vs server_name + counter_name) - 提升性能:写入快 50-70%,查询快 60-80% - 支持并发:不同服务器写不同表,锁竞争少 ## 快速开始 ### 1. 配置服务器 编辑 `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" } ] }, "storage42": { "host": "10.138.103.42", "password": "your_password", "server_type": "type2", "interfaces": [ { "name": "c0", "ifname": "0000:c3:00.0" }, { "name": "c1", "ifname": "0000:c3:00.1" } ] } } } ``` **配置说明**: - `defaults`: 全局默认配置(所有服务器共享) - `type_defaults`: 类型默认配置(按网卡类型区分) - `server_type`: 指定服务器类型 (`type1` 或 `type2`) - `interfaces`: 多接口配置数组 - `name`: 接口显示名称(如 `129`、`c0`) - `ifname`: 实际接口名(替换 `counter_path` 中的 `{}`) ### 2. 启动服务 **一键启动(推荐):** ```bash python run_all.py ``` **分别启动:** ```bash # 终端1:启动采集器 python collector.py # 终端2:启动 Web 服务 python web.py ``` 浏览器访问:`http://localhost:8080` **首次启动**: - collector 会自动从服务器采集计数器名称 - 生成 `known_counters.json` 文件 - 根据计数器列表创建数据库表结构 ## Web 使用说明 - **选择服务器**:左上角下拉框(显示格式:`服务器名:接口名`) - **选择 Counter**:勾选左侧列表,支持分类筛选 - **仅变化**:勾选后只显示 delta > 0 的数据 - **图表**:鼠标悬停查看详情,点击右上角按钮最大化 - **拖拽排序**:可拖拽图表卡片调整顺序 - **原始数据**:点击顶部"原始数据"按钮查看表格 - **导出**:选择 counter 后点击"导出"下载 Excel - **清空**:点击"清空"按钮清空数据库(需确认) ### 智能选择继承 切换服务器时: - 如果该服务器有历史选择,自动恢复 - 如果该服务器无历史选择,自动从**同类型**服务器继承 - 例如:在 `srv137:129` 勾选了某些计数器,切换到 `srv138:129` 会自动继承 ## Counter 分类 | 分类 | 关键词 | | -------- | ------------------------------------- | | congestion | ECN, CNP, DCQCN | | retrans | retrans, retry, rnr | | drop | buffer, drop, nak | | sequence | seq, icrc, protocol | | other | 其余 | ## 常见排查场景 ### RoCE 丢包 1. 选择服务器接口,勾选"仅变化" 2. 查看 `drop / out_of_buffer` 类计数器 3. 对齐丢包时间点 ### DCQCN 失效 - 检查 `np_ecn_marked_roce_packets`、`rp_cnp_*` - 判断 ECN 标记是否生效 ### NVMe-oF 异常 - 查看重连时间点的 counter 突增 ## 注意事项 - Counter 单调递增,重启后可能清零 - SQLite 数据库自动清理超过 `retention_days` 天的数据,并自动执行 VACUUM 压缩 - 清空数据库后会自动触发全量采集恢复 - 不同网卡类型的计数器名称可能不同 - 多接口配置会以 `服务器名:接口名` 格式显示在页面 - `known_counters.json` 文件用于定义计数器列表,不要手动删除 - 新架构不支持旧数据库迁移,请在全新环境部署 ## 性能优化建议 - 调整 `retention_days` 控制数据保留时间(推荐 7-14 天) - 采集间隔默认 10 秒,可根据需要调整 - 服务器数量较多时适当增加 `max_workers` 并发数(默认 5) - 数据库过大时可手动触发 VACUUM(通过 Web 界面或 API) ## 技术细节 ### Counter 名称过滤 自动过滤包含独立数字的异常计数器名称,但保留 `IPV4` 和 `IPV6` 标识。 ### Delta 阈值优化 根据计数器类型动态设置阈值: - 字节类: 100M - 数据包类: 10M - 错误/重传类: 1M ### 数据质量监控 collector 会记录采集统计信息,包括: - 总采集次数 - 成功/失败次数 - 过滤的异常数据 - 溢出修正次数 - 未知计数器数量 ### 日志级别 默认只输出 ERROR 级别日志,减少干扰。可通过修改代码调整。