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

Spring Boot项目里,用oshi-core 6.3.0做个服务器健康监控面板(附完整代码)

Spring Boot集成oshi-core 6.3.0构建企业级服务器监控面板实战在微服务架构盛行的今天系统监控已成为保障服务稳定性的关键环节。对于Java开发者而言如何在Spring Boot项目中快速搭建一套轻量级、低侵入的服务器健康监控系统是提升运维效率的重要课题。本文将带你从零开始基于oshi-core 6.3.0打造一个完整的监控解决方案涵盖数据采集、API封装、可视化展示全流程。1. 监控系统架构设计1.1 技术选型与核心组件现代监控系统通常需要关注四个维度的指标硬件指标CPU、内存、磁盘使用率系统指标OS版本、网络状态JVM指标堆内存、线程数、GC情况应用指标Spring Bean状态、请求量我们采用以下技术栈构建监控系统组件作用优势oshi-core 6.3.0硬件信息采集跨平台、无额外依赖Spring Boot Actuator提供监控端点原生集成、标准协议ECharts数据可视化丰富的图表类型、响应式设计1.2 监控数据流设计完整的监控数据流应包含以下环节数据采集层通过oshi-core获取原始指标数据处理层格式化、聚合原始数据数据存储层时序数据库存储历史数据可选数据展示层前端图表实时渲染// 示例基础监控领域模型 public class ServerMetrics { private CpuStats cpu; private MemoryStats memory; private ListDiskStats disks; private SystemInfo system; private JvmStats jvm; // 嵌套静态类定义各指标结构 Data public static class CpuStats { private int logicalCores; private double systemLoad; private double userLoad; } }2. 核心监控功能实现2.1 依赖配置与基础封装首先在pom.xml中添加必要依赖dependencies dependency groupIdcom.github.oshi/groupId artifactIdoshi-core/artifactId version6.3.0/version /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency /dependencies建议采用分层架构设计监控服务com.example.monitor ├── service │ ├── HardwareCollector.java # 数据采集 ├── model │ ├── MetricDTO.java # 数据传输对象 ├── controller │ ├── MonitorEndpoint.java # REST接口2.2 CPU监控实现进阶oshi-core提供的CPU指标需要二次计算才能得到直观的使用率public CpuStats collectCpuMetrics() { SystemInfo si new SystemInfo(); CentralProcessor cpu si.getHardware().getProcessor(); // 第一次采样 long[] prevTicks cpu.getSystemCpuLoadTicks(); Util.sleep(1000); // 等待1秒间隔 // 第二次采样 long[] ticks cpu.getSystemCpuLoadTicks(); // 计算各状态时间差 long user ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()]; long system ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()]; long idle ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()]; long total user system idle; // 总时间 CpuStats stats new CpuStats(); stats.setLogicalCores(cpu.getLogicalProcessorCount()); stats.setSystemLoad(system * 100.0 / total); stats.setUserLoad(user * 100.0 / total); return stats; }注意Windows和Linux系统获取CPU负载的方式存在差异oshi-core已做好平台适配2.3 内存与磁盘监控优化内存监控需要关注交换分区(swap)的使用情况public MemoryStats collectMemoryMetrics() { GlobalMemory memory new SystemInfo().getHardware().getMemory(); MemoryStats stats new MemoryStats(); stats.setTotal(formatBytes(memory.getTotal())); stats.setAvailable(formatBytes(memory.getAvailable())); stats.setSwapUsed(formatBytes(memory.getVirtualMemory().getSwapUsed())); return stats; } private String formatBytes(long bytes) { return String.format(%.1f GB, bytes / 1024.0 / 1024 / 1024); }磁盘监控建议增加以下增强功能分区inode使用率监控Linux磁盘IOPS和吞吐量监控关键目录使用率告警阈值3. Spring Boot集成方案3.1 Actuator自定义端点扩展Actuator提供监控端点Endpoint(id server-metrics) Component public class ServerMetricsEndpoint { private final HardwareCollector collector; ReadOperation public MapString, Object metrics() { MapString, Object metrics new LinkedHashMap(); metrics.put(cpu, collector.collectCpuMetrics()); metrics.put(memory, collector.collectMemoryMetrics()); metrics.put(disks, collector.collectDiskMetrics()); return metrics; } }在application.yml中配置端点暴露management: endpoints: web: exposure: include: health,info,server-metrics endpoint: server-metrics: cache: time-to-live: 5s # 5秒缓存防止频繁采集3.2 监控数据缓存策略为避免频繁采集带来的性能开销推荐采用以下缓存方案Caffeine缓存适用于单实例部署Redis缓存适用于集群环境定时刷新通过Scheduled定期更新Cacheable(value serverMetrics, key current, cacheManager metricsCacheManager) public ServerMetrics getServerMetrics() { // 采集所有指标 return buildCompleteMetrics(); }4. 可视化仪表板实现4.1 前端工程搭建推荐使用Vue3 ECharts构建监控面板// 安装必要依赖 npm install echarts vue-echarts axios创建核心监控组件template div classmonitor-dashboard v-chart classcpu-chart :optioncpuOption / v-chart classmemory-chart :optionmemoryOption / /div /template script import { use } from echarts/core import { CanvasRenderer } from echarts/renderers import { LineChart } from echarts/charts import { TitleComponent, TooltipComponent } from echarts/components use([CanvasRenderer, LineChart, TitleComponent, TooltipComponent]) export default { data() { return { cpuOption: { title: { text: CPU使用率 }, tooltip: { trigger: axis }, xAxis: { type: category }, yAxis: { type: value }, series: [{ data: [], type: line }] } } }, mounted() { this.fetchData() this.timer setInterval(this.fetchData, 5000) }, methods: { async fetchData() { const res await axios.get(/actuator/server-metrics) this.updateCharts(res.data) } } } /script4.2 ECharts高级配置实现动态实时更新的CPU监控图表const createRealtimeChart () { const option { animation: false, grid: { top: 40, right: 30, bottom: 30, left: 40 }, xAxis: { type: category, boundaryGap: false, data: [] }, yAxis: { max: 100, min: 0 }, series: [ { name: 系统负载, type: line, showSymbol: false, data: [] } ] }; const chart echarts.init(document.getElementById(chart)); chart.setOption(option); // 每5秒更新数据 setInterval(() { fetchMetrics().then(data { const now new Date().toLocaleTimeString(); option.xAxis.data.push(now); option.series[0].data.push(data.cpu.systemLoad); // 保持最近20个数据点 if (option.xAxis.data.length 20) { option.xAxis.data.shift(); option.series[0].data.shift(); } chart.setOption(option); }); }, 5000); };5. 生产环境增强建议5.1 监控指标持久化对于需要历史数据分析的场景建议将监控数据存入时序数据库// InfluxDB写入示例 Scheduled(fixedRate 60000) public void saveMetrics() { ServerMetrics metrics collector.collectAll(); Point point Point.measurement(server_metrics) .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS) .addField(cpu_load, metrics.getCpu().getSystemLoad()) .addField(mem_used, metrics.getMemory().getUsed()) .build(); influxDB.write(point); }5.2 告警规则配置通过Spring Boot的ApplicationEvent实现阈值告警EventListener public void checkCpuAlert(ServerMetrics metrics) { if (metrics.getCpu().getSystemLoad() 90) { alertService.sendAlert( CPU告警, String.format(当前CPU负载 %.1f%%, metrics.getCpu().getSystemLoad()) ); } }推荐监控阈值参考值指标警告阈值严重阈值检测频率CPU使用率80%90%1分钟内存使用率85%95%1分钟磁盘使用率90%98%5分钟在实际项目部署时建议将监控面板集成到内部运维平台与日志系统、链路追踪系统联动形成完整的可观测性体系。对于Kubernetes环境可以结合Prometheus实现更全面的监控方案。

相关文章:

Spring Boot项目里,用oshi-core 6.3.0做个服务器健康监控面板(附完整代码)

Spring Boot集成oshi-core 6.3.0构建企业级服务器监控面板实战 在微服务架构盛行的今天,系统监控已成为保障服务稳定性的关键环节。对于Java开发者而言,如何在Spring Boot项目中快速搭建一套轻量级、低侵入的服务器健康监控系统,是提升运维效…...

FPGA实现CIC滤波器时,如何搞定大位宽累加器溢出?一个5000倍抽取的实战案例

FPGA实现CIC滤波器时大位宽累加器溢出问题的工程实践 在数字信号处理领域,CIC(Cascaded Integrator-Comb)滤波器因其无需乘法运算的独特优势,成为高抽取率场景的首选方案。然而,当面对5000倍这样的超高抽取率时&#x…...

MongooseIM XMPP服务器入门:企业级即时通讯平台的完整搭建指南

MongooseIM XMPP服务器入门:企业级即时通讯平台的完整搭建指南 MongooseIM是一款由Erlang Solutions开发的企业级XMPP服务器,以其卓越的健壮性、可扩展性和高效性能著称,特别适合大型企业级即时通讯部署。本文将为您提供从零开始搭建Mongoos…...

Jetson TX2刷机后,用Jetson Stats和JTop做性能监控与系统调优(附完整配置命令)

Jetson TX2性能监控与系统调优实战指南:从Jetson Stats到JTop深度应用 当你成功为Jetson TX2刷入JetPack系统后,真正的挑战才刚刚开始。这块嵌入式计算平台的潜力远不止于基础系统运行,如何实时掌握硬件状态、优化资源分配才是开发者面临的核…...

TorchServe云原生部署终极指南:在KServe、Kubeflow上的最佳实践

TorchServe云原生部署终极指南:在KServe、Kubeflow上的最佳实践 【免费下载链接】serve Serve, optimize and scale PyTorch models in production 项目地址: https://gitcode.com/gh_mirrors/serv/serve TorchServe是一个强大的PyTorch模型服务框架&#xf…...

Jitsi Meet会议互动功能:举手与表情反应实现原理

Jitsi Meet会议互动功能:举手与表情反应实现原理 Jitsi Meet作为一款开源的视频会议工具,不仅提供了基础的音视频通话功能,还通过举手和表情反应等互动功能增强了会议的参与感和互动性。本文将深入解析这些功能的实现原理,帮助开…...

如何快速批量下载全网视频资源?这款开源工具让你告别手动保存

如何快速批量下载全网视频资源?这款开源工具让你告别手动保存 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 还在…...

实战教程:用Python脚本突破百度网盘限速,实现高速下载的终极方案

实战教程:用Python脚本突破百度网盘限速,实现高速下载的终极方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘那蜗牛般的下载速度抓狂…...

同城短租长租全覆盖,Java 系统管好每一台车

要实现同城短租(日租、周租)与长租(月租、年租)全覆盖的车辆管理系统,需结合Java技术栈构建高可用、智能化的租车平台。以下从系统架构、核心功能、智能调度、风控体系四个维度,提供一套完整的解决方案&…...

基于蒙特卡洛模拟的电动汽车接入对配电网影响研究:潮流计算与优化分析

基于蒙特卡洛法的电动汽车无序接入对配电网影响的分析 采用蒙特卡洛法对电动汽车的接入容量进行预测 再将预测的结果接入IEEE33节点配电网 通过对配电网的潮流计算 得到接入前后对电网电压和网损的影响 这个接入的数目也是可以灵活改变的 这段程序主要是对一个电力系统进行潮…...

GTSAM 4.0.3 在 Windows 平台下的编译与 MATLAB 工具箱集成实战

1. 环境准备与依赖库安装 在Windows平台编译GTSAM 4.0.3需要先搭建完整的开发环境。我实测过Win10和Win11系统都能顺利运行,但更推荐使用Win10以避免潜在的兼容性问题。核心工具链包括: Visual Studio 2019:虽然VS2022理论上也能用&#xff0…...

SIEMENS 1FK6081-6AF71-1ZZ9-Z伺服电机

SIEMENS 1FK6081-6AF71-1ZZ9-Z 伺服电机SIEMENS 1FK6081-6AF71-1ZZ9-Z 是一款1FK6系列交流同步伺服电机,主要用于工业自动化与高精度运动控制系统,常见于数控机床、机器人及自动化生产设备中。属于1FK6系列同步伺服电机用于工业自动化运动控制系统提供高…...

保姆级教程:用Dify和MCP服务快速搭建你的第一个AI智能体(附完整代码)

从零到一:基于Dify与MCP构建企业级AI助手的全流程指南 在数字化转型浪潮中,AI智能体正成为企业提升服务效率的关键工具。想象一下,当你需要为电商平台搭建一个能理解"羽绒服含绒量90%意味着什么"这类专业问题的客服系统时&#xff…...

如何永久保存微信聊天记录?WeChatMsg完整教程让数据真正属于你

如何永久保存微信聊天记录?WeChatMsg完整教程让数据真正属于你 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

终极DefectDojo故障排除指南:解决95%的部署和运行问题

终极DefectDojo故障排除指南:解决95%的部署和运行问题 【免费下载链接】django-DefectDojo Open-Source Unified Vulnerability Management, DevSecOps & ASPM 项目地址: https://gitcode.com/gh_mirrors/dj/django-DefectDojo DefectDojo作为一款开源的…...

终极指南:如何使用Mole创建终端数据可视化图表与进度指示器

终极指南:如何使用Mole创建终端数据可视化图表与进度指示器 【免费下载链接】Mole 🐹 Deep clean and optimize your Mac. 项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole Mole是一款强大的Mac深度清理与优化工具,不仅能…...

Appwrite React Native SDK性能优化终极指南:缓存、分页与批量操作技巧

Appwrite React Native SDK性能优化终极指南:缓存、分页与批量操作技巧 【免费下载链接】sdk-for-react-native [READ ONLY] Official Appwrite React Native SDK 💙 ⚛︎ 项目地址: https://gitcode.com/gh_mirrors/sd/sdk-for-react-native App…...

PTA 编程题(C语言)-- 插入排序的三种实现方式对比

1. 插入排序的三种实现方式对比 插入排序是C语言初学者必须掌握的基础算法之一,也是PTA编程题中的常客。很多同学第一次接触这个算法时,往往只记住了教科书上的标准实现,却忽略了不同实现方式背后的设计哲学。今天我们就来深入探讨三种典型的…...

ArcMap实战指南:缓冲区分析在城乡规划中的应用

1. ArcMap缓冲区分析入门:城乡规划师的必备技能 第一次接触缓冲区分析时,我也觉得这个功能听起来很抽象。直到参与了一个城中村改造项目,才真正体会到它的强大之处。简单来说,缓冲区分析就是在地图上围绕某个要素(比如…...

Flux Sea Studio 常见错误排查:从CUDA内存不足到提示词无效

Flux Sea Studio 常见错误排查:从CUDA内存不足到提示词无效 你是不是也遇到过,兴致勃勃地打开Flux Sea Studio准备大展身手,结果却被各种报错搞得一头雾水?从让人头疼的“CUDA out of memory”,到提示词输进去半天没反…...

LLVM实战:如何用Graphviz可视化你的数据流图(DFG)

LLVM实战:如何用Graphviz可视化你的数据流图(DFG) 在编译器优化和程序分析领域,数据流图(Data Flow Graph, DFG)是理解程序行为的重要工具。它清晰地展现了数据在指令间的流动路径,帮助开发者识…...

别再死记硬背了!用“数据库查询”和“信号处理”的视角,5分钟彻底搞懂Transformer的Attention机制

从数据库查询到信号滤波:用跨界思维拆解Transformer注意力机制 在咖啡馆的玻璃窗前,一位工程师正用铅笔在餐巾纸上画着奇怪的符号——左边是数据库表结构,右边是滤波器电路图。这看似毫不相关的两件事,却意外地成为了理解Transfor…...

SwiftUI 项目架构与代码组织:SwiftUI-Tutorials 项目结构深度解析

SwiftUI 项目架构与代码组织:SwiftUI-Tutorials 项目结构深度解析 【免费下载链接】SwiftUI-Tutorials A code example and translation project of SwiftUI. / 一个 SwiftUI 的示例、翻译的教程项目。 项目地址: https://gitcode.com/gh_mirrors/sw/SwiftUI-Tuto…...

如何快速获取Steam游戏完整文件清单:Onekey工具终极指南

如何快速获取Steam游戏完整文件清单:Onekey工具终极指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏清单获取流程而烦恼吗?Onekey Steam Depot…...

2025年ejabberd发展趋势:实时通信技术的7大演进方向与创新突破

2025年ejabberd发展趋势:实时通信技术的7大演进方向与创新突破 ejabberd作为一款Robust, Ubiquitous and Massively Scalable Messaging Platform,在2025年将继续引领实时通信技术的发展潮流。这款基于Erlang/OTP的XMPP服务器凭借其卓越的性能和可扩展性…...

利用AI写教材,低查重技巧让教材编写流程事半功倍

整理教材知识点:难题待解与 AI 工具破局 整理教材知识点真是一项“精细活”,其中最大的挑战在于如何平衡和衔接各个知识点!有时我们会因为害怕遗漏重要的核心内容而感到焦虑,而有时又担心控制不好难度的梯度——小学教材的内容往…...

如何高效诊断AMD Ryzen系统问题:SMUDebugTool专业硬件调试完整指南

如何高效诊断AMD Ryzen系统问题:SMUDebugTool专业硬件调试完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址…...

Dev C++新手入门:从零开始掌握编辑、编译与运行

1. Dev C简介与环境搭建 第一次接触编程的朋友可能会被各种复杂的开发环境吓到,但Dev C绝对是入门C语言的最佳选择之一。这款轻量级的IDE(集成开发环境)安装包只有几十MB,对电脑配置要求极低,甚至十年前的旧电脑都能流…...

消息管理终极指南:Rocket.Chat消息撤回与编辑全攻略

消息管理终极指南:Rocket.Chat消息撤回与编辑全攻略 【免费下载链接】Rocket.Chat The Secure CommsOS™ for mission-critical operations 项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chat 在团队协作中,发送错误消息或需要修改已…...

Rocket.Chat频道管理终极指南:创建、归档与权限控制全解析

Rocket.Chat频道管理终极指南:创建、归档与权限控制全解析 【免费下载链接】Rocket.Chat The Secure CommsOS™ for mission-critical operations 项目地址: https://gitcode.com/GitHub_Trending/ro/Rocket.Chat Rocket.Chat作为一款注重数据保护的通信平台…...