Java 实现企业级服务器资源监控系统(含 SSH 执行 + 邮件通知 + Excel 报表)
在中大型企业运维场景中,自动化地获取服务器资源(CPU、内存、磁盘)状态,并生成报表,是一项非常实用的工作。本文将介绍如何基于 Java、SSHJ、Spring Boot、Apache POI 实现一套服务器监控系统,支持:
- 通过 SSH 自动登录服务器并执行脚本采集信息;
- 分析结果并落库(或处理);
- 生成 Excel 报表;
- 自动发送邮件通知。
✨ 项目特色
- ✅ 支持从 Excel 批量导入主机列表;
- ✅ 使用 SSH 协议安全连接远程主机;
- ✅ 支持 CPU、内存、磁盘多指标监控;
- ✅ 自动生成可读性强的 Excel 报表;
- ✅ 支持邮件推送结果文件。
📦 技术栈
- Java 8+
- Spring Boot
- SSHJ:轻量级 SSH 客户端库
- Hutool:提供丰富的工具方法(文件、集合、日期、IO 等)
- Apache POI:Excel 文件处理(通过封装 ExcelUtil 实现)
- SLF4J + Logback:日志记录
📁 目录结构概览
├── MonitorClient.java // 监控任务核心类
├── domain
│ ├── SshConf.java // 主机连接配置(读取自 Excel)
│ ├── SshCommand.java // 要执行的命令封装
│ ├── HostInfoTerminal.java// shell 脚本输出封装对象
│ └── HostInfoExcel.java // Excel 表格映射模型
├── entity
│ └── HostInfoEntity.java // 监控数据DB实体
├── util
│ ├── ExcelUtil.java // Excel 导入导出
│ ├── ResourceUtil.java // 读取 classpath 资源
│ ├── AppUtil.java // 工具方法封装
│ ├── DbDataUtil.java // 入库操作
│ └── EmailUtil.java // 邮件发送封装
🔧 核心流程详解
1️⃣ 从 Excel 导入主机配置
支持多个 Excel 文件,存放在 classpath:monitor/excel/ 下:
List<SshConf> excelList = ExcelUtil.importExcel(ResourceUtil.getInputStream(excelFile), SshConf.class);
可根据 sshName 筛选是否是 Linux 服务器,还支持 delFlag 忽略失效主机。
2️⃣ 通过 SSH 执行监控脚本
核心逻辑是调用脚本 monitor.sh(一般写 bash 脚本输出 JSON),通过 SSHJ 执行并获取输出:
Session.Command cmd = session.exec(command);
String terminal = IoUtil.readUtf8(cmd.getInputStream());
示例 shell 输出内容结构(JSON),单位统一为字节:
{"operatingSystem": "CentOS 7","cpuCore": "4","cpuRate": "25.0","memTotal": "8388608","memAvailable": "4194304","diskTotal": "107374182400","diskAvailable": "53687091200"
}
3️⃣ 构建监控数据并落库
将监控信息转为 HostInfoEntity,并计算资源使用率:
BigDecimal memRate = (memTotal - memAvailable) / memTotal;
BigDecimal diskRate = (diskTotal - diskAvailable) / diskTotal;
支持使用 DbDataUtil.insertOrUpdate() 持久化,可扩展接入数据库、ES 等。
4️⃣ 生成 Excel 报表
将数据转为适合展示的格式(如百分比、GB 单位),输出本地 Excel:
ExcelUtil.downloadLocal(hostInfoExcelList, HostInfoExcel.class, excelPath);
输出路径:项目路径/excel/服务器监控_2025-08-07.xlsx
5️⃣ 自动发送邮件
使用封装好的 EmailUtil 将报表作为附件发送:
emailUtil.sendMessage(FileUtil.file(excelPath));
可配置收件人、邮件内容、SMTP 参数。根据设置的阈值,对主机列表按使用率高危程度排序,比如使用率 >= 90% 的置顶,其余安装 1:1:1 的权重倒序排列。
Foxmail 邮件在线预览:
⏰ 定时任务推荐方式
可配合 Spring 定时任务,或者使用分布式调度系统(如 XXL-JOB)周期性执行:
@Scheduled(cron = "0 0 9 * * ?")
public void monitorJob() {monitorClient.start();
}
✅ 扩展建议
扩展方向 建议方式
报警通知 钉钉/飞书/企业微信 Bot
脚本异常捕获 对 JSON 转换失败的情况做告警
安全性提升 增加 SSH 密钥登录支持
资源趋势分析 落库后结合 BI 工具展示
异常主机定位 通过多轮采集对比变化
多线程采集 使用线程池提高 SSH 采集效率
📌 总结
通过 Java + SSH + Excel + 邮件组件,我们构建了一套轻量级但功能完整的服务器资源监控系统。非常适合企业运维或 SaaS 平台进行资源状态监控、风险预警和报表输出。
如需完整源码或 shell 脚本示例,可留言获取。