使用java完成系统监控

写在前面的话:
首先接触到系统监控是对jeesite平台的研究,关于这个平台这里不做过多的赘述,了解这个平台的都知道,它是一个国内开发的快速开发平台,内置了很多的功能,在这里我们主要了解系统监控功能的实现,此平台其中一个内置功能就是监控服务所在服务器相关的数据,但如果我们的项目前后端,数据库分别部署在不同的服务器,我们不可能把整个项目到每个服务器上都部署一遍,所以必须把系统监控单独剔出来用来监控其他服务器的信息;首先通过平台的项目找寻关于系统监控的实现,由于平台核心代码为开源,几乎一无所获,只能自己去找寻实现方法,出现在脑海中的第一个影子就是System类以及Runtime和RuntimeMXBean;但参考平台页面展示的数据,这三个类(或接口)所能获取到的数据远远不够;于是又开始了对平台的研究,最终让我眼前一亮的是在在maven本地仓库中的jeesite-framework找到了sigar相关的一些东西,因为不认识,姑且叫他东西吧!于是开始向度娘寻求帮助,最终找到了关于sigar的介绍,还找到了一些断断续续的demo,那就开干吧!
代码也贴出来吧:
代码链接://download.csdn.net/download/weixin_45417573/12103961

一、了解需求

根据jeesite平台页面展示的数据,我们可以知道,我们所需要监控的数据包含CPU信息,内存信息,JVM内存信息,堆和非堆的内存信息,jvm的配置信息,操作系统信息,平台信息,硬盘信息等,其中cpu和内存相关信息是实时刷新的,其他信息是打开页面是加载的;如下图:在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

二、整理思路

1、首先我们要完成任意一台服务器的监控肯定要新建一个springboot项目,让前端发起一个请求,然后把项目所在的服务器监控信息反馈给前端。于是新建一个springboot项目,该项目只需要简单的依赖lombok(用于简化代码和日志输出),web,sigar;如下:

		<dependency>
			<groupId>org.fusesource</groupId>
			<artifactId>sigar</artifactId>
			<version>1.6.4</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

2、接下来就开始我们最擅长的pojo,controller,service层代码的完善,这一部分代码是最简单的,就不做展示了,要注意的一点是controller中要写两个方法对应两个请求,一个返回需要实时加载的数据,一个返回只加载一次的数据。controller中的代码如下:

package com.wwy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.wwy.entry.APIEntry;
import com.wwy.entry.GetEntry;
import com.wwy.entry.RenovateEntry;
import com.wwy.service.SystemService;
/**
 * 
 * @author wwy
 * @date 2019-11-6
 *获取系统监控的controller
 */
@RestController
@RequestMapping("system")
public class SystemController {
   
	@Autowired
	private SystemService systemService;
	/**
	 * 
	 * @return 封装系统监不变的控信息的实体类
	 */
@RequestMapping("get")
	public APIEntry get() {
   

		GetEntry entry=systemService.get();

		return (entry==null)?new APIEntry(500,"数据获取有误",null):new APIEntry(200,"OK",entry);
	}
/**
 * 
 * @return 封装系统监固定的的控信息的实体类
 */
@RequestMapping("renovate")
public APIEntry renovate() {
   

	RenovateEntry entry=systemService.renovate();

	return (entry==null)?new APIEntry(500,"数据获取有误",null):new APIEntry(200,"OK",entry);
}
}

三、获取监控数据

1、框架已搭好,接下来就是如何获取监控数据了,首先我们想到一部分系统相关的数据我们可以通过System来获取,另一部分jvm相关的数据我们可以通过runtime或者RuntimeMXBean来获取,至于硬件相关的如磁盘,cpu等信息就需要通过我们的神秘高手sigar来获取了,首先要使用sigar需要到官方下载相关的脚本文件,这里可以百度的到,就不提供了,如下:
在这里插入图片描述2、我们要使用这些脚本主要是借助于sigar的依赖,当然官方的脚本里提供的jar包也是可以的;另外要在程序中指定脚本存储的位置,并加载
这里单独写了一个工具类,如下:

package com.wwy.util;

import java.io.File;
import org.hyperic.sigar.Sigar;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
/**
 * 
 * @author wwy
 * @date 2019-11-5
 *sigar工具类
 */
@Slf4j
@Component
public class SigarUtils {
   
	/**
	 * 获取存放脚本的地址
	 */
	//将脚本存放位置配置在yml文件中,通过@value读取
	@Value("${sigar.path}")
	private  String path;
	/**
	 * 
	 * @return Sigar
	 * 初始化,加载脚本文件
	 */
	public  Sigar initSigar() {
   
		try {
   
			File classPath = new File(path);
			String path = System.getProperty("java.library.path");
			String sigarLibPath = classPath.getCanonicalPath();
			//防止java.library.path重复加载
			if (!path.contains(sigarLibPath)) {
   		
				path += (isOSWin()?(";" + sigarLibPath)
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值