当前位置: 首页 > news >正文

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 脚本示例,可留言获取。

http://www.dtcms.com/a/323254.html

相关文章:

  • 欧拉公式的意义
  • 202506 电子学会青少年等级考试机器人六级器人理论真题
  • 通用AGI到来,记忆仍需要一点旧颜色
  • 【狂飙AGI】2025年上半年中文大模型综合性测评
  • [已解决]VSCode右键菜单消失恢复
  • 用户需求调研后的信息如何整理
  • 大语言模型提示工程与应用:LLMs文本生成与数据标注实践
  • 需求管理流程规范
  • 强化学习概论(1)
  • Android 锁屏图标的大小修改
  • android15哪些广播可以会走冷启动或者用于保活呢?
  • 探索Trae:使用Trae CN爬取 Gitbook 电子书
  • 【Doris】实时分析型数据库
  • 走遍美国5 The Right Magic 钓鱼秘决
  • 【Python 语法糖小火锅 · 第 3 涮】
  • 【RabbitMQ】高级特性—TTL、延迟队列详解
  • Java 中的编译与反编译:全面解析与实践指南
  • drippingblues靶机
  • 四边形(梯形、平行四边形、矩形、菱形和正方形)
  • [贪心]田忌赛马
  • Aurora接口FPGA设计
  • QT Creator 5.14.2安装
  • 卷板矫平机:给一张钢板做“拉伸放松操”
  • 北大回应录取通知书被指存在语句问题
  • Claude Code 与 Cursor 技术对比:架构差异与适用场景分析
  • 四、RuoYi-Cloud-Plus 部署时nacos配置服务启动
  • NVIDIA Jetson实战笔记
  • 相册管理系统介绍
  • <PLC><汇川><字符转换>在汇川PLC中,如何进行字符串的转换与比较?
  • 实数与复数及欧拉公式关系