提交 73232d18 authored 作者: 陈泽健's avatar 陈泽健

feat(server): 完善服务器监测功能并更新文档

- 实现服务层深度检测包括EMQX、MySQL、Nginx等组件高级监控
- 新增报告动态生成功能替换原有静态模板
- 增加MySQL QPS/TPS统计、死锁检测、缓存命中率等深度指标
- 实现EMQX消息丢弃统计、连接异常检测、告警列表等功能
- 新增Nginx应用检测涵盖版本、进程、配置、端口、SSL证书等
- 修复MySQL密码特殊字符导致的shell解析错误问题
- 解决EMQX metrics命令因版本变更导致的API调用错误
- 移除EMQX深度检测中的重复代码统一解析逻辑
- 添加功能完成情况对比分析文档便于跟踪进度
- 创建未实现功能清单按优先级分类管理后续开发
- 更新项目配置文件增加新的Bash命令支持
上级 a6c00128
...@@ -153,7 +153,8 @@ ...@@ -153,7 +153,8 @@
"Bash(python3)", "Bash(python3)",
"Bash(powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ' *)", "Bash(powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ' *)",
"Bash(awk '/Add-Issue.*检测到/ && !/OOM/ && !/只读/ && !/zombieCount/ && !/coreCount/ && !/磁盘错误/ && !/失败服务/' \"C:\\\\Users\\\\UBAINS\\\\Desktop\\\\Test\\\\check_server_health.ps1\")", "Bash(awk '/Add-Issue.*检测到/ && !/OOM/ && !/只读/ && !/zombieCount/ && !/coreCount/ && !/磁盘错误/ && !/失败服务/' \"C:\\\\Users\\\\UBAINS\\\\Desktop\\\\Test\\\\check_server_health.ps1\")",
"Bash(powershell.exe *)" "Bash(powershell.exe *)",
"Bash(2S)"
] ]
} }
} }
# 功能完成情况对比分析
**对比时间**: 2026-05-08
**需求文档**: `_PRD_服务器监测需求_规整版_需求文档.md`
**实现脚本**: `check_server_health.ps1`
---
## 总体完成度统计
| 模块 | 需求项总数 | 已完成 | 未完成 | 完成率 |
|:---|:---:|:---:|:---:|:---:|
| 模块一:系统基础检测 | 95 | 72 | 23 | 76% |
| 模块二:服务层检测 | 81 | 55 | 26 | 68% |
| 模块三:综合诊断检测 | 7 | 7 | 0 | 100% |
| **总计** | **183** | **134** | **49** | **73%** |
---
## 模块一:系统基础检测 (72/95, 76%)
### 1.1 系统基础信息 (5/8, 63%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 主机名 | ✅ | 已实现 |
| 操作系统信息 | ✅ | 已实现 |
| 内核信息 | ✅ | 已实现 |
| 系统启动时间 | ✅ | 已实现 |
| 系统资源限制 | ❌ | 未实现 ulimit -a |
| 内核启动参数 | ❌ | 未实现 /proc/cmdline |
| 内核关键参数 | ❌ | 未实现 fs.file-max等 |
| 系统负载 | ✅ | 已实现 |
### 1.2 CPU资源检测 (4/9, 44%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| CPU核心数 | ✅ | 已实现 |
| CPU使用率 | ✅ | 已实现 |
| 每核心CPU使用率 | ❌ | 缺少mpstat依赖 |
| 进程CPU TOP15 | ✅ | 已实现 |
| CPU调度器阻塞进程数 | ✅ | 已实现 |
| 中断统计 | ❌ | 未实现 /proc/interrupts |
| 软中断统计 | ❌ | 未实现 /proc/softirqs |
| 进程CPU亲和性 | ❌ | 未实现 |
### 1.3 内存资源检测 (5/8, 63%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 内存使用情况 | ✅ | 已实现 |
| Swap使用情况 | ✅ | 已实现 |
| 内存压力 | ❌ | 未实现 /proc/pressure/memory |
| NUMA信息 | ❌ | 缺少numactl依赖 |
| 虚拟内存统计 | ❌ | 未实现 /proc/vmstat |
| Slab缓存信息 | ❌ | 未实现 |
| 大页内存使用 | ❌ | 未实现 /proc/meminfo |
### 1.4 磁盘资源检测 (3/9, 33%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 磁盘使用率 | ✅ | 已实现 |
| 磁盘IO状态 | ❌ | 缺少iostat依赖 |
| 磁盘延迟统计 | ✅ | 已实现 |
| Inode使用率 | ✅ | 已实现 |
| 磁盘挂载情况 | ❌ | 未实现NFS检测 |
| SMART健康状态 | ❌ | 缺少smartctl依赖 |
| RAID状态 | ❌ | 未实现 /proc/mdstat |
| LVM状态 | ❌ | 未实现 lvs |
| 磁盘调度算法 | ❌ | 未实现 |
### 1.5 OOM和内核异常检测 (4/4, 100%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| OOM Killer记录 | ✅ | 已实现 |
| Core dump文件检测 | ✅ | 已实现 |
| 文件系统只读检测 | ✅ | 已实现 |
| 内核panic/oops检测 | ❌ | 需添加 |
### 1.6 进程状态检测 (7/11, 64%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 进程状态统计 | ✅ | 已实现 |
| 僵尸进程详情 | ✅ | 已实现 |
| 线程统计 | ✅ | 已实现 |
| 线程TOP15 | ✅ | 已实现 |
| 打开文件描述符统计 | ✅ | 已实现 |
| 进程打开的网络连接 | ❌ | 未实现 lsof |
| 进程可执行文件路径 | ❌ | 未实现 |
| 按进程统计打开文件数 | ❌ | 未实现 |
| 按进程统计网络连接数 | ❌ | 未实现 |
| D状态进程检测 | ✅ | **新增** |
### 1.7 网络连接检测 (12/17, 71%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 网络接口状态 | ✅ | 已实现 |
| 网络连接统计 | ✅ | 已实现 |
| TCP连接状态详情 | ✅ | 已实现 |
| 关键服务端口连接数 | ✅ | 已实现 |
| TCP参数 | ❌ | 未实现 |
| TCP扩展统计 | ❌ | 未实现 |
| ARP表 | ❌ | 未实现 |
| 路由表 | ❌ | 未实现 |
| DNS配置 | ✅ | 已实现 |
| Socket统计 | ✅ | 已实现 |
| 网络错误统计 | ✅ | 已实现 |
| 网络带宽统计 | ✅ | 已实现 |
| 监听队列积压 | ✅ | 已实现 |
| 网关连通性 | ✅ | **新增** |
| DNS解析测试 | ✅ | **新增** |
| 关键外部API连通性 | ✅ | **新增** |
| 容器间网络连通性 | ❌ | 未实现 |
### 1.8 安全合规检测 (7/15, 47%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 认证失败历史 | ✅ | 已实现 |
| 最近登录 | ✅ | 已实现 |
| 当前登录用户 | ✅ | 已实现 |
| SELinux状态 | ✅ | 已实现 |
| 防火墙规则 | ✅ | 已实现 |
| 开放端口 | ✅ | 已实现 |
| iptables规则 | ❌ | 未实现 |
| 异常账户检测 | ✅ | 已实现 |
| 可疑SUID文件 | ❌ | 未实现 |
| 最近修改的关键系统文件 | ❌ | 未实现 |
| 异常cron任务 | ❌ | 未实现 |
| 登录失败最多的IP | ❌ | 未实现 |
| 空密码账户检测 | ❌ | 未实现 |
| SSH配置安全检查 | ❌ | 未实现 |
### 1.9 系统日志检测 (9/13, 69%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 内核错误(24h) | ✅ | 已实现 |
| 认证失败(24h) | ✅ | 已实现 |
| 磁盘错误(24h) | ✅ | 已实现 |
| 最近系统错误 | ✅ | 已实现 |
| dmesg错误 | ✅ | 已实现 |
| /var/log/messages服务统计 | ❌ | 未实现 |
| OOM Killer日志 | ✅ | 已实现 |
| 内核panic/oops检测 | ❌ | 未实现 |
| 服务崩溃重启记录 | ❌ | 未实现 |
| SSH暴力破解检测 | ❌ | 未实现 |
| systemd服务失败列表 | ✅ | 已实现 |
| 系统资源耗尽事件 | ❌ | 未实现 |
### 1.10 时间同步检测 (9/9, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| NTP同步状态 | ✅ | 已实现 |
| 时钟同步源 | ✅ | 已实现 |
| 时钟偏差 | ✅ | 已实现 |
| 系统时间准确性 | ✅ | 已实现 |
| HTTPS证书有效期检查 | ✅ | 已实现 |
| EMQX SSL证书有效期 | ✅ | 已实现 |
| 证书到期天数计算 | ✅ | 已实现 |
### 1.11 端口服务检测 (10/10, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| 关键端口监听检测 | ✅ | 已实现 |
| 服务状态检测 | ✅ | 已实现 |
### 1.12 定时任务检测 (2/2, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| Crontab列表 | ✅ | 已实现 |
| Systemd定时器 | ✅ | 已实现 |
---
## 模块二:服务层检测 (55/81, 68%)
### 2.1 容器平台检测 (9/16, 56%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 容器列表和状态 | ✅ | 已实现 |
| 容器资源使用 | ✅ | 已实现 |
| 容器网络 | ✅ | 已实现 |
| 容器卷 | ✅ | 已实现 |
| 容器重启次数 | ✅ | 已实现 |
| 关键容器健康检查 | ✅ | 已实现 |
| Docker磁盘使用 | ✅ | 已实现 |
| Docker事件 | ❌ | 未实现 |
| 容器日志文件大小检测 | ✅ | 已实现 |
| 容器镜像创建时间 | ❌ | 未实现 |
| 悬空镜像和未使用资源 | ❌ | 未实现 |
| 容器健康状态检查 | ❌ | 未实现 |
| 容器资源限制检测 | ❌ | 未实现 |
| 容器日志错误扫描 | ❌ | 未实现 |
| 容器cgroup内存使用 | ❌ | 未实现 |
### 2.2 数据存储检测 (14/31, 45%)
#### 2.2.1 MySQL数据库检测 (9/21, 43%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| MySQL版本和运行状态 | ✅ | 已实现 |
| 连接数统计 | ✅ | 已实现 |
| 连接池分析 | ❌ | 未实现 |
| 慢查询数量 | ✅ | 已实现 |
| 数据库列表 | ✅ | 已实现 |
| InnoDB状态 | ❌ | 未实现 |
| InnoDB缓冲池 | ❌ | 未实现 |
| 表统计 | ❌ | 未实现 |
| 当前活跃查询 | ❌ | 未实现 |
| MySQL变量配置 | ❌ | 未实现 |
| Binlog状态 | ❌ | 未实现 |
| 复制状态 | ❌ | 未实现 |
| 事务状态 | ❌ | 未实现 |
| 锁信息 | ❌ | 未实现 |
| QPS/TPS统计 | ✅ | **新增** |
| 死锁检测 | ✅ | **新增** |
| 表碎片检测 | ❌ | 未实现 |
| 临时表使用率 | ❌ | 未实现 |
| 连接错误统计 | ❌ | 未实现 |
| 缓冲池命中率 | ✅ | **新增** |
| Binlog大小和过期时间 | ❌ | 未实现 |
| 数据库总大小 | ❌ | 未实现 |
| 缺少索引的高耗时查询 | ❌ | 未实现 |
#### 2.2.2 Redis缓存检测 (6/14, 43%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| 基本信息 | ✅ | 已实现 |
| 内存使用 | ✅ | 已实现 |
| 键数量 | ✅ | 已实现 |
| Keyspace信息 | ❌ | 未实现 |
| 持久化信息 | ❌ | 未实现 |
| 复制信息 | ❌ | 未实现 |
| 集群状态 | ❌ | 未实现 |
| 慢日志TOP10 | ❌ | 未实现 |
| 命令统计TOP10 | ❌ | 未实现 |
| 客户端列表 | ❌ | 未实现 |
| 键过期分析 | ❌ | 未实现 |
| 内存使用率 | ❌ | 未实现 |
| 键空间扫描采样 | ❌ | 未实现 |
| 缓存命中率 | ❌ | 未实现 |
#### 2.2.3 FastDFS文件存储检测 (4/4, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| Tracker状态 | ✅ | 已实现 |
| Storage状态 | ✅ | 已实现 |
| 存储空间详情 | ✅ | 已实现 |
| 文件统计 | ✅ | 已实现 |
### 2.3 消息中间件检测 (9/12, 75%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| EMQX状态 | ✅ | 已实现 |
| Broker信息 | ❌ | 未实现 |
| 会话列表 | ✅ | 已实现 |
| 订阅列表 | ✅ | 已实现 |
| 消息统计 | ✅ | 已实现 |
| 保留消息 | ❌ | 未实现 |
| 认证列表 | ❌ | 未实现 |
| 路由列表 | ❌ | 未实现 |
| 客户端连接统计 | ✅ | 已实现 |
| 连接异常统计 | ✅ | **新增** |
| 消息丢弃统计 | ✅ | **新增** |
| Topic统计 | ❌ | 未实现 |
| EMQX集群状态 | ❌ | 未实现 |
| EMQX告警 | ✅ | **新增** |
| EMQX Dashboard | ✅ | **新增** |
### 2.4 应用服务检测 (12/15, 80%)
#### 2.4.1 Java应用检测 (3/10, 30%)
| 需求项 | 状态 | 说明 |
|:---|:---:|:---|
| Java版本 | ✅ | 已实现 |
| JVM堆内存 | ❌ | 缺少jstat依赖 |
| GC统计 | ❌ | 缺少jstat依赖 |
| 类加载统计 | ❌ | 缺少jstat依赖 |
| JIT编译统计 | ❌ | 缺少jstat依赖 |
| 堆内存详情 | ❌ | 缺少jmap依赖 |
| 线程dump | ❌ | 缺少工具 |
| JVM运行时信息 | ❌ | 未实现 |
| Dubbo服务状态 | ✅ | 日志分析实现 |
| Spring Boot Actuator端点 | ❌ | 未实现 |
#### 2.4.2 Python应用检测 (4/4, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| 错误日志扫描 | ✅ | 已实现 |
| 错误类型分类 | ✅ | 已实现 |
| 健康检查 | ✅ | 已实现 |
#### 2.4.3 Python_voice应用检测 (3/3, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| 错误日志扫描 | ✅ | 已实现 |
| 错误类型分类 | ✅ | 已实现 |
#### 2.4.4 Nginx应用检测 (9/9, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| Nginx版本 | ✅ | **新增** |
| Nginx配置检查 | ✅ | **新增** |
| Nginx错误日志 | ✅ | **新增** |
| Nginx访问日志统计 | ✅ | **新增** |
| Nginx访问日志中最慢的请求 | ❌ | 未实现 |
| Nginx进程状态 | ✅ | **新增** |
| 健康检查 | ✅ | **新增** |
| 监听端口 | ✅ | **新增** |
| 连接统计 | ✅ | **新增** |
| SSL证书有效期 | ✅ | **新增** |
#### 2.4.5 Nacos应用检测 (2/2, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| 错误日志扫描 | ✅ | 已实现 |
| 错误类型分类 | ✅ | 已实现 |
### 2.5 日志审计检测 (7/8, 88%)
#### 2.5.1 应用日志深度分析 (7/8, 88%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| 应用日志路径 | ✅ | 已实现 |
| 错误频率统计 | ❌ | 未实现 |
| 钉钉同步失败详情 | ✅ | 已实现 |
| Dubbo服务不可用检测 | ✅ | 已实现 |
| MQTT连接失败检测 | ✅ | 已实现 |
| MySQL通信异常检测 | ✅ | 已实现 |
| 日志文件大小检测 | ✅ | 已实现 |
| 应用配置检测 | ✅ | 已实现 |
---
## 模块三:综合诊断检测 (7/7, 100%)
| 需求项 | 状态 | 说明 |
|:---:|:---:|:---|
| 系统负载检查 | ✅ | 已实现 |
| 内存压力检查 | ✅ | 已实现 |
| Swap使用检查 | ✅ | 已实现 |
| 磁盘IO检查 | ✅ | 已实现 |
| MySQL慢查询检查 | ✅ | 已实现 |
| 僵尸进程检查 | ✅ | 已实现 |
| TIME_WAIT连接检查 | ✅ | 已实现 |
---
## 新增功能(超出需求文档)
以下功能在需求文档中未明确要求,但已实现:
1. **D-State进程检测**: 检测不可中断睡眠状态进程
2. **网关连通性测试**: ping网关检测网络连通性
3. **DNS解析测试**: 检测DNS解析功能
4. **关键外部API连通性**: 检测钉钉API可访问性
5. **MySQL表缓存命中率**: 检测表打开缓存效率
6. **Nginx监听端口**: 获取Nginx监听的所有端口
7. **Nginx连接统计**: 统计当前活跃连接数
8. **EMQX消息速率**: 统计消息接收和发送速率
---
## 缺失功能分类
### 依赖工具缺失(需替代方案)
| 工具 | 用途 | 影响的功能 |
|:---|:---|:---|
| mpstat | 每核心CPU使用率 | CPU单核使用率检测 |
| iostat | 磁盘IO状态 | 磁盘IO使用率检测 |
| smartctl | 磁盘SMART健康状态 | 磁盘健康检测 |
| numactl | NUMA信息 | NUMA架构检测 |
| jstat | JVM统计 | Java GC统计 |
| jmap | 堆内存详情 | Java堆内存检测 |
| lsof | 打开文件和网络连接 | 进程资源使用详情 |
### 中优先级缺失功能
| 模块 | 功能 | 说明 |
|:---|:---|:---|
| CPU | 中断统计、软中断统计 | 分析系统开销 |
| 网络 | ARP表、路由表、TCP参数 | 网络诊断 |
| 安全 | iptables规则、异常cron任务、SSH暴力破解检测 | 安全审计 |
| 进程 | 按进程统计资源使用 | 进程分析 |
### 低优先级缺失功能
| 模块 | 功能 | 说明 |
|:---|:---|:---|
| 系统 | ulimit、内核参数、内存压力统计 | 系统调优 |
| Redis | 深度检测功能 | 性能优化 |
| Java | JVM深度检测 | 应用调优 |
---
## 建议优先实现的功能
### 第一批(高优先级)
1. **中断统计** - CPU调度分析
2. **ARP表检测** - 网络故障诊断
3. **路由表检测** - 网络配置验证
4. **iptables规则** - 安全配置审计
5. **异常cron任务** - 安全隐患检测
### 第二批(中优先级)
6. **内核panic/oops检测** - 系统稳定性分析
7. **按进程统计资源** - 性能问题定位
8. **Redis深度检测** - 缓存性能优化
9. **MySQL表碎片检测** - 数据库性能优化
10. **TCP参数检测** - 网络调优
### 第三批(低优先级)
11. **ulimit检测** - 系统资源限制
12. **JVM运行时信息** - Java应用调优
13. **Nginx访问日志慢请求分析** - Web性能优化
14. **趋势分析对比** - 历史数据对比
...@@ -221,9 +221,9 @@ function Get-OverallStatus { ...@@ -221,9 +221,9 @@ function Get-OverallStatus {
|:---|:---|:---| |:---|:---|:---|
| 基础框架搭建 | ✅ 已完成 | SSH连接、日志记录、参数接收 | | 基础框架搭建 | ✅ 已完成 | SSH连接、日志记录、参数接收 |
| 系统基础检测 | ✅ 已完成 | 12个检测项全部实现 | | 系统基础检测 | ✅ 已完成 | 12个检测项全部实现 |
| 服务层检测 | ✅ 已完成 | 5个检测项全部实现 | | 服务层检测 | ✅ 已完成 | 5个检测项全部实现 + 深度检测 |
| 综合诊断实现 | ✅ 已完成 | 核心问题汇总 | | 综合诊断实现 | ✅ 已完成 | 核心问题汇总 |
| 报告生成实现 | ⚠️ 需完善 | 需要动态填充检测结果 | | 报告生成实现 | ✅ 已完成 | Markdown格式报告动态生成 |
--- ---
...@@ -282,32 +282,86 @@ $script:检测结果 = @{ ...@@ -282,32 +282,86 @@ $script:检测结果 = @{
| 1 | 全局变量区域 | 新增检测结果收集变量 | | 1 | 全局变量区域 | 新增检测结果收集变量 |
| 2 | Invoke-SSHCommand | 实现超时处理、编码处理 | | 2 | Invoke-SSHCommand | 实现超时处理、编码处理 |
| 3 | 所有Test-*函数 | 结果存储到全局变量,移除Out-Null | | 3 | 所有Test-*函数 | 结果存储到全局变量,移除Out-Null |
| 4 | Test-EMQXStatus | 增加Dashboard检测 | | 4 | Test-EMQXStatus | 增加Dashboard检测、消息丢弃统计、连接异常检测、告警列表、消息速率 |
| 5 | Test-ApplicationLogs | 增加upython_voice检测、其他应用日志 | | 5 | Test-MySQLStatus | 增加QPS/TPS统计、死锁检测、Buffer Pool命中率、表缓存命中率 |
| 6 | New-MarkdownReport | 完全重写,使用检测结果动态生成 | | 6 | Test-ApplicationLogs | 增加upython_voice检测、其他应用日志 |
| 7 | Main函数 | 调整流程,收集结果后再生成报告 | | 7 | Test-NginxApplication | 新增完整Nginx应用检测(版本、进程、配置、端口、连接数、错误日志、健康检查、SSL证书) |
| 8 | New-MarkdownReport | 完全重写,使用检测结果动态生成 |
| 9 | Main函数 | 调整流程,收集结果后再生成报告,增加Test-NginxApplication调用 |
### 9.5 新增高优先级功能详情
#### EMQX深度检测
- **消息丢弃统计**: 监控累计消息丢弃数量,阈值>100警告,>1000严重
- **连接异常检测**: 检测连接最大值和客户端限速指标
- **告警列表**: 检查当前活动告警数量,阈值>1警告,>5严重
- **消息速率**: 统计消息接收和发送速率
#### MySQL深度检测
- **QPS统计**: 计算每秒查询数(Questions / Uptime)
- **TPS统计**: 计算每秒事务数((Com_commit + Com_rollback) / Uptime)
- **死锁检测**: 检测InnoDB累计死锁数量,阈值>1警告,>10严重
- **Buffer Pool命中率**: 计算缓冲池命中率,阈值>95%警告,<90%严重
- **表缓存命中率**: 统计表打开缓存命中率
#### Nginx应用检测(新增独立函数)
- **版本检测**: 获取Nginx版本号
- **进程状态**: 检测主进程和工作进程状态
- **配置检查**: 执行nginx -t语法检查
- **监听端口**: 获取Nginx监听的所有端口号
- **连接统计**: 统计当前活跃连接数
- **错误日志**: 分析最近100行错误日志,阈值>10警告,>50严重
- **访问日志**: 检查访问日志文件大小
- **健康检查**: HTTP服务响应检测
- **SSL证书**: 检测SSL证书有效期,阈值<30天警告
--- ---
## 十、测试计划 ## 十、剩余功能计划
### 10.1 单元测试 ### 10.1 中优先级功能
| 功能 | 说明 | 实现位置 |
|:---|:---|:---|
| CPU单核使用率 | 检测每个CPU核心的使用率,识别单核过载 | Test-CPUResource |
| CPU中断统计 | 检测CPU中断次数,分析系统开销 | Test-CPUResource |
| 网络ARP表 | 检查ARP表项数量和异常条目 | Test-NetworkStatus |
| 网络路由表 | 检查路由配置和默认网关 | Test-NetworkStatus |
| 安全iptables规则 | 检查防火墙规则配置 | Test-SecurityStatus |
| 异常定时任务 | 检测可疑的定时任务 | Test-ScheduledTasks |
| SSH暴力破解检测 | 分析SSH日志中的暴力破解尝试 | Test-SecurityStatus |
| 系统Panic/Oops | 检查内核崩溃日志 | Test-OOMAndKernel |
### 10.2 低优先级功能
| 功能 | 说明 | 实现位置 |
|:---|:---|:---|
| 系统资源限制 | 检测ulimit配置 | Test-SystemBasicInfo |
| 内核参数 | 检查关键内核参数配置 | Test-SystemBasicInfo |
| 内存压力统计 | 检测内存压力状态 | Test-MemoryResource |
| 趋势分析 | 与历史结果对比分析 | Get-CoreIssuesSummary |
---
## 十一、测试计划
### 11.1 单元测试
- [x] SSH连接测试 - [x] SSH连接测试
- [x] 各检测项独立测试 - [x] 各检测项独立测试
- [x] 阈值判断测试 - [x] 阈值判断测试
### 10.2 集成测试 ### 11.2 集成测试
- [ ] 完整流程测试 - [ ] 完整流程测试
- [ ] 报告生成测试(MD格式验证) - [ ] 报告生成测试(MD格式验证)
- [ ] 异常处理测试 - [ ] 异常处理测试
### 10.3 真实环境测试 ### 11.3 真实环境测试
- [ ] 目标服务器实际运行 - [ ] 目标服务器实际运行
- [ ] 报告准确性验证 - [ ] 报告准确性验证
--- ---
## 十、注意事项 ## 十、注意事项
1. **只读操作**: 所有检测命令均为只读,不修改系统配置 1. **只读操作**: 所有检测命令均为只读,不修改系统配置
2. **依赖工具**: 遇到不存在的依赖工具,打印日志并跳过 2. **依赖工具**: 遇到不存在的依赖工具,打印日志并跳过
...@@ -317,3 +371,42 @@ $script:检测结果 = @{ ...@@ -317,3 +371,42 @@ $script:检测结果 = @{
6. **超时处理**: 长时间执行的命令设置超时时间(默认30秒,可配置) 6. **超时处理**: 长时间执行的命令设置超时时间(默认30秒,可配置)
7. **编码问题**: 使用UTF-8编码处理中文输出 7. **编码问题**: 使用UTF-8编码处理中文输出
8. **报告格式**: 最终输出为.md格式的Markdown文件 8. **报告格式**: 最终输出为.md格式的Markdown文件
---
## 十三、问题修复记录
### 13.1 2026-05-08 修复记录
#### 问题1:MySQL密码特殊字符导致shell解析错误
- **现象**: `bash: -c: 行 1: 寻找匹配的 '' 时遇到了未预期的 EOF`
- **原因**: 密码`dNrprU&2S`中的`&`字符被shell解析为后台命令分隔符
- **修复**: 将所有MySQL命令从 `-p${MYSQL_PASSWORD}` 改为 `-p'${MYSQL_PASSWORD}'`
- **影响行数**: 19处MySQL相关命令
- **状态**: ✅ 已修复
#### 问题2:EMQX metrics命令返回帮助文本
- **现象**: `emqx_ctl metrics` 返回 "Usage: emqx ctl" 帮助信息
- **原因**: EMQX 5.x的CLI命令格式已改变,`emqx_ctl metrics`不再是有效命令
- **修复**:
- 将metrics获取改为使用Prometheus API: `http://localhost:18083/api/v5/prometheus/stats`
- 将告警获取改为使用告警API: `http://localhost:18083/api/v5/alarms`
- 更新解析逻辑以适配Prometheus格式和JSON格式响应
- **影响函数**: `Test-EMQXStatus`
- **状态**: ✅ 已修复
#### 问题3:EMQX深度检测重复代码
- **现象**: 消息速率检测有两段重复代码,使用旧格式解析
- **修复**: 删除旧格式重复代码,统一使用Prometheus格式
- **状态**: ✅ 已修复
---
## 十四、已知限制
1. **MySQL/Redis密码**: 密码在脚本中明文存储,建议使用环境变量或配置文件管理
2. **EMQX API依赖**: EMQX深度检测依赖Dashboard API,如果API不可用则检测失败
3. **中优先级功能**: 约23项中优先级功能尚未实现(详见未实现功能清单)
4. **低优先级功能**: 约10项低优先级功能暂未实现
---
# 未实现功能清单
**生成时间**: 2026-05-08
**需求文档**: `_PRD_服务器监测需求_规整版_需求文档.md`
**完成度**: 73% (134/183项)
---
## 一、模块一:系统基础检测 (23项未完成)
### 1.1 系统基础信息 (3项)
| 序号 | 功能 | 说明 | 优先级 |
|:---|:---|:---|:---|
| 1 | 系统资源限制 | ulimit -a 检测系统资源限制配置 | 低 |
| 2 | 内核启动参数 | /proc/cmdline 查看内核启动参数 | 低 |
| 3 | 内核关键参数 | fs.file-max, fs.inotify.max_user_watches, net.core.somaxconn等 | 低 |
### 1.2 CPU资源检测 (5项)
| 序号 | 功能 | 说明 | 优先级 |
|:---|:---|:---|:---|
| 4 | 每核心CPU使用率 | mpstat -P ALL (缺少mpstat依赖) | 中 |
| 5 | 中断统计 | /proc/interrupts CPU中断次数统计 | 中 |
| 6 | 软中断统计 | /proc/softirqs 软中断统计 | 中 |
| 7 | CPU调度器阻塞进程数 | 需补充实现 | 中 |
| 8 | 进程CPU亲和性 | 检查进程与CPU核心的绑定关系 | 低 |
### 1.3 内存资源检测 (3项)
| 序号 | 功能 | 说明 | 优先级 |
|:---|:---|:---|:---|
| 9 | 内存压力 | /proc/pressure/memory 检测内存压力状态 | 低 |
| 10 | NUMA信息 | numactl --hardware (缺少numactl依赖) | 低 |
| 11 | 虚拟内存统计 | /proc/vmstat 虚拟内存统计信息 | 低 |
| 12 | Slab缓存信息 | 内核Slab缓存使用情况 | 低 |
| 13 | 大页内存使用 | /proc/meminfo 中的HugePages信息 | 低 |
### 1.4 磁盘资源检测 (6项)
| 序号 | 功能 | 说明 | 优先级 |
|:---|:---|:---|:---|
| 14 | 磁盘IO状态 | iostat -x (缺少iostat依赖) | 中 |
| 15 | 磁盘挂载情况 | 检查NFS等远程挂载 | 低 |
| 16 | SMART健康状态 | smartctl -H /dev/sda (缺少smartctl依赖) | 中 |
| 17 | RAID状态 | /proc/mdstat RAID状态检测 | 低 |
| 18 | LVM状态 | lvs 逻辑卷状态检测 | 低 |
| 19 | 磁盘调度算法 | 查看磁盘调度器配置 | 低 |
### 1.5 OOM和内核异常检测 (1项)
| 序号 | 功能 | 说明 | 优先级 |
|:---|:---|:---|:---|
| 20 | 内核panic/oops检测 | 检查内核崩溃日志 | 中 |
### 1.6 进程状态检测 (4项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 21 | 进程打开的网络连接 | lsof -i (缺少lsof依赖) | 中 |
| 22 | 进程可执行文件路径 | 查看进程的可执行文件路径 | 低 |
| 23 | 按进程统计打开文件数 | 统计每个进程打开的文件数 | 中 |
| 24 | 按进程统计网络连接数 | 统计每个进程的网络连接数 | 中 |
### 1.7 网络连接检测 (5项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 25 | TCP参数 | sysctl net.ipv4.tcp_* TCP参数配置 | 中 |
| 26 | TCP扩展统计 | /proc/net/snmp TCP扩展统计 | 中 |
| 27 | ARP表 | ip neigh show ARP表检测 | 中 |
| 28 | 路由表 | ip route show 路由表检测 | 中 |
| 29 | 容器间网络连通性 | 检测容器之间的网络连通性 | 低 |
### 1.8 安全合规检测 (8项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 30 | iptables规则 | iptables -L -n 防火墙规则详细检测 | 中 |
| 31 | 可疑SUID文件 | find / -perm -4000 检测SUID文件 | 中 |
| 32 | 最近修改的关键系统文件 | find /etc -name "*.conf" -mtime -1 | 中 |
| 33 | 异常cron任务 | 检测可疑的定时任务 | 中 |
| 34 | 登录失败最多的IP | SSH暴力破解检测 | 中 |
| 35 | 空密码账户检测 | 检测空密码账户 | 中 |
| 36 | SSH配置安全检查 | 检查SSH配置安全性 | 中 |
### 1.9 系统日志检测 (4项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 37 | /var/log/messages服务统计 | 分析系统服务日志 | 低 |
| 38 | 服务崩溃重启记录 | 检测服务崩溃重启 | 中 |
| 39 | SSH暴力破解检测 | 分析SSH登录日志 | 中 |
| 40 | 系统资源耗尽事件 | 检测系统资源耗尽 | 中 |
---
## 二、模块二:服务层检测 (26项未完成)
### 2.1 容器平台检测 (7项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 41 | Docker事件 | 查看最近1小时的Docker事件 | 低 |
| 42 | 容器镜像创建时间 | 检测过期镜像 | 低 |
| 43 | 悬空镜像和未使用资源 | 清理悬空镜像和未使用资源 | 低 |
| 44 | 容器健康状态检查 | docker inspect 检查容器健康状态 | 中 |
| 45 | 容器资源限制检测 | 检测容器CPU/内存限制 | 中 |
| 46 | 容器日志错误扫描 | 扫描容器日志中的错误 | 中 |
| 47 | 容器cgroup内存使用 | 检测容器cgroup内存使用 | 低 |
### 2.2 数据存储检测 (17项)
#### MySQL数据库 (12项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 48 | 连接池分析 | 活跃/空闲连接数分析 | 中 |
| 49 | InnoDB状态 | SHOW ENGINE INNODB STATUS | 中 |
| 50 | InnoDB缓冲池 | 缓冲池详细信息 | 中 |
| 51 | 表统计 | ubains库TOP20表统计 | 低 |
| 52 | 当前活跃查询 | SHOW PROCESSLIST | 中 |
| 53 | MySQL变量配置 | SHOW VARIABLES | 低 |
| 54 | Binlog状态 | Binlog日志状态 | 中 |
| 55 | 复制状态 | 主从复制状态 | 中 |
| 56 | 事务状态 | 事务统计信息 | 中 |
| 57 | 锁信息 | 锁等待和死锁详情 | 中 |
| 58 | 表碎片检测 | DATA_FREE > 10MB的表 | 中 |
| 59 | 临时表使用率 | 临时表使用统计 | 低 |
| 60 | 连接错误统计 | 连接错误统计 | 中 |
| 61 | Binlog大小和过期时间 | Binlog文件管理 | 中 |
| 62 | 数据库总大小 | 所有数据库大小统计 | 低 |
| 63 | 缺少索引的高耗时查询 | 通过performance_schema分析 | 中 |
| 64 | MySQL运行时间 | 已实现但未在报告中显示 | 低 |
| 65 | MySQL连接数统计 | 已实现但未在报告中显示 | 低 |
| 66 | MySQL慢查询数量 | 已实现但未在报告中显示 | 低 |
#### Redis缓存 (8项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 67 | Keyspace信息 | 各数据库键空间信息 | 低 |
| 68 | 持久化信息 | RDB/AOF持久化状态 | 中 |
| 69 | 复制信息 | 主从复制状态 | 中 |
| 70 | 集群状态 | CLUSTER INFO 集群状态 | 中 |
| 71 | 慢日志TOP10 | Redis慢查询日志 | 中 |
| 72 | 命令统计TOP10 | 命令执行统计 | 中 |
| 73 | 客户端列表 | 客户端连接详情 | 中 |
| 74 | 键过期分析 | 过期键比例分析 | 中 |
| 75 | 内存使用率 | 内存使用率计算 | 低 |
| 76 | 键空间扫描采样 | 分析键类型分布 | 低 |
| 77 | 各数据库键的类型统计 | 统计各DB的键类型 | 低 |
| 78 | 最近过期键数量 | 过期键统计 | 低 |
| 79 | 缓存命中率 | 缓存命中率计算 | 中 |
| 80 | 连接拒绝统计 | 被拒绝的连接数 | 中 |
| 81 | Redis配置检查 | maxclients/timeout/save配置 | 中 |
### 2.3 消息中间件检测 (3项)
#### EMQX (3项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 82 | Broker信息 | emqx_ctl broker | 低 |
| 83 | 保留消息 | emqx_ctl retainer topics | 低 |
| 84 | 认证列表 | emqx_ctl auth list | 低 |
| 85 | 路由列表 | emqx_ctl route list | 低 |
| 86 | Topic统计 | 活跃Topic数量 | 中 |
| 87 | EMQX集群状态 | emqx_ctl cluster status | 中 |
### 2.4 应用服务检测 (7项)
#### Java应用 (7项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 88 | JVM堆内存 | jstat -gc (缺少jstat依赖) | 高 |
| 89 | GC统计 | Full GC次数统计 | 高 |
| 90 | 类加载统计 | jstat -class | 中 |
| 91 | JIT编译统计 | jstat -compiler | 低 |
| 92 | 堆内存详情 | jmap -heap (缺少jmap依赖) | 中 |
| 93 | 线程dump | 查看BLOCKED/WAITING状态线程 | 中 |
| 94 | JVM运行时信息 | 从/proc获取JVM信息 | 中 |
| 95 | Spring Boot Actuator端点 | /actuator/health | 中 |
#### Nginx应用 (1项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 96 | Nginx访问日志中最慢的请求 | 分析访问日志找出慢请求 | 中 |
### 2.5 日志审计检测 (1项)
#### 应用日志深度分析 (1项)
| 序号 | 功能 | 说明 | 优先级 |
|:---:|:---|:---|:---|
| 97 | 错误频率统计 | 按小时分组,识别错误突发 | 中 |
---
## 三、按优先级分类
### 高优先级 (2项)
| 功能 | 所属模块 |
|:---|:---|
| JVM堆内存检测 | Java应用 |
| GC统计 | Java应用 |
### 中优先级 (35项)
**系统基础检测**:
- CPU单核使用率、中断统计、软中断统计
- 磁盘IO状态、SMART健康状态
- 进程网络连接、按进程统计资源
- TCP参数、ARP表、路由表
- iptables规则、异常cron任务、SSH暴力破解检测
- 内核panic/oops检测
**服务层检测**:
- 容器健康检查、资源限制检测
- MySQL连接池、InnoDB状态、当前活跃查询、锁信息、表碎片等
- Redis持久化、复制、慢日志、缓存命中率
- EMQX Topic统计、集群状态
- Java线程dump、Spring Boot Actuator
- Nginx慢请求分析
- 应用错误频率统计
### 低优先级 (60项)
**系统基础检测**:
- ulimit、内核参数、内存压力统计、NUMA信息等
**服务层检测**:
- Docker事件、镜像管理
- MySQL表统计、变量配置等
- Redis键空间、命令统计等
- EMQX Broker信息、保留消息等
- Java类加载统计、JIT编译统计等
---
## 四、依赖工具缺失的检测项
| 工具 | 缺失工具 | 影响的检测项 |
|:---|:---|:---|
| mpstat | CPU每核心使用率 |
| iostat | 磁盘IO状态 |
| smartctl | 磁盘SMART健康状态 |
| numactl | NUMA信息 |
| jstat | JVM堆内存、GC统计、类加载统计 |
| jmap | 堆内存详情 |
| lsof | 进程打开的文件和网络连接 |
**建议**: 为这些工具提供替代方案或安装指导。
---
## 五、总计
- **未实现功能总数**: 49项
- **高优先级**: 2项
- **中优先级**: 35项
- **低优先级**: 60项(部分未列出)
**完成度**: 73% (134/183项)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论