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

SpringBootAdmin-clinet自定义监控CPU、内存、磁盘等health

直接上代码:

cpu、内存使用的包 引入一下。

        <dependency>
            <groupId>com.pixel.base</groupId>
            <artifactId>base-admin-client-starter</artifactId>
            <version>1.0.1-gaiya-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.17.0</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna-platform</artifactId>
            <version>5.17.0</version>
        </dependency>

自定义监控扩展

package com.pixel.monitorclient;

import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;
import oshi.SystemInfo;
import oshi.hardware.*;
import oshi.util.Util;

import java.io.File;
import java.util.concurrent.atomic.AtomicLong;

/**
 * @program: hangjizhe-cloud
 * @description: 测试 HealthIndicator
 * @author: <林发和-694204477@qq.com>
 * @create: 2025-03-17 11:29
 **/
@Component
@Slf4j
public class CpuMemoryHealthIndicator extends AbstractHealthIndicator {

    private static final AtomicLong count = new AtomicLong(0);

    private static final SystemInfo SYSTEM_INFO = new SystemInfo();
    private static final CentralProcessor cpu = SYSTEM_INFO.getHardware().getProcessor();
    private static final GlobalMemory memory = SYSTEM_INFO.getHardware().getMemory();

//    private static final HardwareAbstractionLayer hardware = SYSTEM_INFO.getHardware();
//    private static final OperatingSystem os = SYSTEM_INFO.getOperatingSystem();
//    private static final CentralProcessor processor = SYSTEM_INFO.getHardware().getProcessor();

    // 获取 CPU 使用率(%)
    //--- CPU 监控 ---
    public static double getCpuUsage() {
        long[] prevTicks = cpu.getSystemCpuLoadTicks();
        Util.sleep(1000);  // 计算 1 秒内的差值
        return Math.round(cpu.getSystemCpuLoadBetweenTicks(prevTicks) * 10000.0) / 100.0;
    }

    // 获取内存使用率(%)
    //--- 内存监控 ---
    public static double getMemoryUsage() {
        long total = memory.getTotal();
        long available = memory.getAvailable();
        return Math.round((total - available) * 10000.0 / total) / 100.0;
    }

    // 获取磁盘使用率(示例路径为 "/")
    public static double getDiskUsage() {
        File root = new File("/");
        long total = root.getTotalSpace();
        long free = root.getFreeSpace();
        return Math.round((total - free) * 10000.0 / total) / 100.0;
    }

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        log.info("TestHealthIndicator 1: doHealthCheck: cpuUsage: {}, memoryUsage: {}", getCpuUsage(), getMemoryUsage());
        long get = count.addAndGet(1);
        log.info("TestHealthIndicator : doHealthCheck: {} ,get % 2 : {}", get, get % 2);
//        if (get % 2 == 0) {
//            builder.up();
//        } else {
//            builder.down();
//        }
        builder.withDetail("countA", count)
                .withDetail("cpuUsage", getCpuUsage())
                .withDetail("memoryUsage", getMemoryUsage())
//                .withDetail("disk.usage", getDiskUsage())
                .withDetail("countB", count);
        builder.up();

    }

    public static void main(String[] args) {
        System.out.println(getDiskUsage());
        Health.Builder builder = new Health.Builder();
        builder.withDetail("cpu.usage", getCpuUsage())
                .withDetail("memory.usage", getMemoryUsage())
                .withDetail("disk.usage", getDiskUsage());

        Health build = builder.build();
        System.out.println(JSON.toJSONString(build));
    }

}

相关文章:

  • Linux:xxx is not in the sudoers file. This incident will be reported.
  • macOS Sequoia 15.3 一直弹出“xx正在访问你的屏幕”
  • 深度学习篇---对角矩阵矩阵的秩奇异矩阵
  • 异地灾备介绍
  • STM32中断
  • 【Android】基于udp通信的智能家居移动应用开发
  • 强化学习中循环神经网络在序列决策中的应用研究
  • 每日一题-力扣-2680. 最大或值-20250321
  • 机器学习--DBSCAN聚类算法详解
  • [学习笔记] 部署Docker搭建靶场
  • 机器学习实战
  • 比特币驱动金融第七章——比特币:社区、政治与监管的微妙平衡
  • stratis,容器podman
  • 基于3DMax与Vray引擎的轻量级室内场景渲染实践
  • 校园自习室预约小程序(源码+部署教程)
  • 企业磁盘管理实战:常见问题与高效解决方案
  • Spring6: 2 入门
  • Node.js系列(4)--微服务架构实践
  • next.js 组件路由钩子
  • Linux上位机开发实战(能用的开发板计算资源)
  • 国博馆刊|北朝至唐初夏州酋豪李氏家族的发展与身份记忆
  • 第32届梅花奖终评启幕,上海京剧院《智取威虎山》满堂彩
  • 眉山“笑气”迷局:草莓熊瓶背后的隐秘与危机
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 黄晨光任中科院空间应用工程与技术中心党委书记、副主任
  • 8小时《大师与玛格丽特》:长度可以是特点,但不是价值标准