# sys-monitor **Repository Path**: wonder19991209/sys-monitor ## Basic Information - **Project Name**: sys-monitor - **Description**: 实时系统监控 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-26 - **Last Updated**: 2025-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目说明 ### 简述 用于监控服务器状态。 api用于服务器状态上报,上报到admin里面的接口,通过token进行设备识别。 #### 实现方式: 1. client客户端使用系统oshi依赖库获取信息 2. 受限于windows系统限制采用python+dll文件调用函数获取信息的方式信息慢的离谱,所以温度等信息的获取等信息采用python+LibreHardwareMonitorLib.dll实现的http接口,使用方式为本地调用8083端口进行数据获取传输http://localhost:8083/ 。因此很不建议开放8083端口 1. / → 全部数据 2. /cpu → CPU 数据 3. /gpu → GPU 数据 4. /memory → 内存数据 5. /summary → 汇总cpu/gpu/内存信息 3. ### 部署方式 - 需安装lombok插件,不然会提示找不到entity的get set方法 - 创建数据库mydatabase,数据库编码为UTF-8 - 执行db/mydatabase.sql文件,初始化数据 - 修改application-dev.yml文件,更新MySQL账号和密码 - IDEA运行AdminApplication.java,则可启动项目【admin】 - vscode运行前端项目npm install安装依赖 - vscode运行前端项目npm run dev 运行项目 - 前端访问路径:http://localhost:8001/ - admin接口文档路径:http://localhost:8080/admin/doc.html - client 接口文档路径:http://localhost:8081/api/doc.html - 账号密码:admin 密码应该是123456或者admin我也忘记了 ## 设计规划 ### 双端 admin为服务端后台,sys_monitor_FrontEnd为服务器端前台项目 client为客户端,仅需配置好客户端的server-monitor的内容即可 ### 功能规划 - [x] client作为数据主动推送,每隔1s(自定义时间)进行信息状态推送。api传输地址标识比如 传入服务器名称和识别token。 - [ ] 在线ssh功能/在线终端 - [ ] frp穿透功能 - [ ] 点击服务器查看服务器详情信息,即查看该服务器的当前心跳信息及其基本信息 - [ ] admin后端日志筛选方式:昨天/今天/最近七天/自定义事件 - [x] 客户端单次上报基础信息/config/reporting #### 服务器资源压力指数计算 ```python RPI = w_cpu × (CPU_usage / CPU_max) + w_mem × (Mem_usage / Mem_total) + N(w_disk x (Disk_usage / Disk_total)) ``` - `CPU_usage`:当前 CPU 使用率(例如 45 表示 45%) - `CPU_max`:通常为 100 × 核心数(但更推荐使用 **整体使用率百分比**,即 0~100% 范围,避免多核复杂化) - `Mem_usage`:已用内存(单位 MB 或 GB) - `Mem_total`:总物理内存 - `N`代表有几块磁盘,根据实际情况进行计算 - `Disk_usage`:已用磁盘空间(单位 MB 或 GB) - `Disk_total`:总磁盘空间 - `w_cpu` 、`w_mem` 、`w_disk` :权重,满足 `w_cpu + w_mem + w_disk = 1` 未涉及到使用swap和使用率超90%的**阈值惩罚**的功能。 ### 关键数据库结构 #### 服务器信息存储表 | 字段名称 | 类型 | 注释 | | ---------------- | -------- | ----------------------------------------------------------- | | id | bigint | id编号 | | server_name | varchar | 服务器名称 | | server_token | varchar | 与客户端一致的token(唯一性)可以自动生成 | | isEmail | varchar | 是否启用邮件告警(1开启 0关闭) | | ip_addr | varchar | ip地址(map存储,公网ip和局域网ip,手动设置) | | server_pwd | varchar | 服务密码(map存储,ssh密码,桌面密码,mysql密码等保存方式) | | service_provider | varchar | 提供厂商(阿里云/腾讯云/家用服务器) | | remark | longtext | 备注信息 | | create_time | datetime | 创建时间 | | create_user | varchar | 创建人 | | update_time | datetime | 更新时间 | | update_user | varchar | 更新人 | #### 接收客户端心跳信息表 | 字段名称 | 类型 | 注释 | | ------------ | ---- | ------------------------------------------------------------ | | id | | id编号(雪花算法) | | server_name | | 主机名称 | | server_token | | 主机token | | | | 平均负载 | | | | 当前负载 | | | | cpu负载 | | | | cpu温度 | | | | 内存占比 | | | | 剩余可用内存 | | | | 磁盘占用 (当前容量/总容量) | | | | 磁盘IO (map存储, 读取/写入/每秒读写/IO延迟) | | | | 网络IO (map存储, 上行/下行/总发送/总接收) | | | | 当前进程所占用的进程top10(map存储)记录pid、进程名、cpu占用、内存占用 | | | | 创建时间 |