使用Actuator检查与监控

我们如何监控SpringBoot的健康状况,其实对于SpringBoot是很有必要去监控和检查的,

因为我们通过这个方式呢,是当前程序运行的一个状态,那我们讲监控SpringBoot健康状况的当中,会讲两种

方式,第一种是使用Actuator插件,检查SpringBoot的状态,第二种可以使用可视化的监控报表,SpringBootAdmin,

来监控我们SpringBoot的健康状况,我们先讲解第一种,使用Actuator检查与监控,在这里我们先说一下,如果SpringBoot

想用Actuator来做监控的话,来做健康检查的话,他的使用步骤是什么样的,第一步我们需要在pom文件里添加Actuator的

坐标,并且通过坐标会导入相应的坐标,在pom文件中添加Actuator的坐标,这是第一个步骤,第二个步骤,在全局配置文件中,

设置关闭安全限制,也就是默认的对于访问信息,安全限制是开启的,那么我们就没法去获取安全信息,当然这个在不同的版本

当中是有区别的,比如说我们现在,打开我们的pom文件,现在我们用的springboot用的是1.5.12.RELEASE,我没记错的话是在

1.5以下,不包括1.5,他的这个版本当中,与Actuator使用是不用关闭安全限制的,在1.5以上对于安全限制呢,他默认是开启的,

需要在配置文件当中去关闭,如果我们把上面两个步骤做完,我们就可以使用Actuator插件,SpringBoot就可以去做健康监控了,

那我们接下来就跟着这个步骤,去完成相应的操作,打开我们的pom文件,在这里我们需要添加一个坐标,这个坐标是什么呢,

我们把它copy过来,还是org.springframework.boot下的一个jar包,jar包叫什么呢,

artifactId叫spring-boot-starter-actuator,

其实这个坐标也很好记,把我们的WEB启动器,后面的WEB改成actuator就可以了,因为它是springboot的一个插件,给他的groupId

也都是相同的,这是第一步,第二步我们说过,需要去关闭安全限制,那么在哪去设置安全限制呢,在全局配置文件当中,打开我们的项目

看一下,其实我们现在没有一个全局配置文件,这些都加入了其他字符了,就不再是默认的springboot的配置文件了,那我们需要重新

创建一个全局配置文件,在这里我拷贝一个,我们新建的就是springboot全局配置文件的,他的名称叫application.properties,

在这里我们把端口号去掉,在这里我们需要加入什么呢,加入一句话

management.security.enabled=false

默认的是true,我们把它改成false,这样就关闭了安全限制,我们把这两项设好以后,接下来我们再把springboot程序启动一下,

找到启动类,运行,我们观察控制台,在这里我们看,控制台它会输出这样的信息,其实这些信息就是为我们提供了健康状况做

不同检查的URI的一个标记,比如这里我们找一个最简单的,像这个health

Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.
Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.a
Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto 
Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+j
Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+j
Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actua
Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot
Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1
Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1
Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+js
Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+j
Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuato
Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot
Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json |
Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+jso

/health这表示什么意思呢,在我的笔记当中已经给大家罗列出来了

对应控制台里的URI,比如我们找health,他表示什么呢,显示应用程序运行健康信息,

这是最简单的一个信息了,我们接下来就看怎么通过URI,去获取springboot的基本信息,我们把这个URI

copy一下,打开浏览器,我们在这里去访问一下,后面直接加我们拷贝的URI就可以了

localhost:8080/health

{
	status: "UP",
	diskSpace: {
		status: "UP",
		total: 104857595904,
		free: 12969869312,
		threshold: 10485760
	}
}

这是一个JSON格式的字符串,返回给springboot的一个基本信息,这里我们来看一下,第一个status是状态,UP表示什么呢,

就是当前这个状态是正常的,就是你的springboot项目是正常运行的,然后还有一个diskSpace,就是你的磁盘空间,在磁盘空间

里呢,运行状态也是正常的,total就是你当前项目的磁盘,服务器所在的磁盘,总空间,free是剩余空间,就是可用空间,然后还有一个

threshold,这是什么呢,边界值,边界值是什么意思呢,当前你要在你的磁盘里面运行你的springboot程序,那么你的磁盘空间至少

要有10485760这么多,至少要提供10M的空间,所以这是一个边界值,所以我们通过health可以得到基本的显示,当然这里还有其他的,

再找一个比较常见的,你像这个env,这是什么呢,看环境变量的,我们拿过来,在这里我们把它访问一下

http://localhost:8080/env

这个时候的信息就会多一些,那么对于这样的信息,你会发现他也是JSON格式的了,那这个时候我们怎么办呢,当然我们也可以用工具

来做JSON格式的转换,比如我们可以找一下JSON在线解析的工具

json在线解析

https://www.sojson.com/

然后我们把信息copy一下,然后放到在线工具当中,在这里我们看一下,

profiles: [ ],

profiles现在什么都没有,所以是空的,不用管它,然后有一个

server.ports: {
	local.server.port: 8080
}

当前你的程序所监听的一个端口,8080,然后还有一个

servletContextInitParams: { }

就是你上下文初始化所需要的参数,那我们这里没有相应的参数,所以是空的,然后下面就是你的系统属性systemProperties

java.runtime.name: "Java(TM) SE Runtime Environment",
sun.boot.library.path: "C:\Program Files\Java\jdk1.8.0_151\jre\bin",
java.vm.version: "25.151-b12",
user.country.format: "US",
java.vm.vendor: "Oracle Corporation",
java.vendor.url: "http://java.oracle.com/",
path.separator: ";",
java.vm.name: "Java HotSpot(TM) 64-Bit Server VM",
file.encoding.pkg: "sun.io",
user.country: "CN",
user.script: "",
sun.java.launcher: "SUN_STANDARD",
sun.os.patch.level: "",
PID: "8904",
java.vm.specification.name: "Java Virtual Machine Specification",
user.dir: "C:\JavaEE_Workspace\springboot-hello",
java.runtime.version: "1.8.0_151-b12",
java.awt.graphicsenv: "sun.awt.Win32GraphicsEnvironment",
org.jboss.logging.provider: "slf4j",
java.endorsed.dirs: "C:\Program Files\Java\jdk1.8.0_151\jre\lib\endorsed",
os.arch: "amd64",
java.io.tmpdir: "C:\Users\Leon.sun\AppData\Local\Temp\",
line.separator: " ",
java.vm.specification.vendor: "Oracle Corporation",
user.variant: "",
os.name: "Windows 8.1",
sun.jnu.encoding: "GBK",
spring.beaninfo.ignore: "true",

在这里有java.runtime.name,表示你当前JAVA虚拟机的一个版本,虚拟机的一个名称,我们用的是

Java(TM) SE Runtime Environment,然后还有你用的JDK的路径,

我们用的是C:\Program Files\Java\jdk1.8.0_151\jre\bin,然后还有当前JVM的版本,还有URL,还有分隔符,

还有VM里面核心的名称是什么,Java HotSpot(TM) 64-Bit Server VM,在这里我们可以看到跟环境变量相关的信息,

这里读的这一块就是虚拟机的一些信息,下面还有其他的配置信息,这是对env,看我们springboot环境变量的一个方式,

还有一个是什么呢,我们还可以通过/dump,来查看他的dump信息

localhost:8080/dump

其实大家对dump并不陌生吧,举个最简单的例子,我们用debug去调式的时候,在debug模式下,左侧显示线程的信息,其实就是dump里面的

一些信息,在没有springboot提供的Actuator工具的时候,如果我们想要看dump信息,其实这是一件非常麻烦的事,我们得借助JDK当中的

一些工具,通过工具才能查看dump的信息,如果感兴趣的呢,我在这里就不讲了,在JVM检查他的健康状况,就有对于dump文件的查看,然后

我们也把这个copy,在这里我们可以看到,是我们线程的信息

{
	threadName: "DestroyJavaVM",
	threadId: 33,
	blockedTime: -1,
	blockedCount: 0,
	waitedTime: -1,
	waitedCount: 0,
	lockName: null,
	lockOwnerId: -1,
	lockOwnerName: null,
	inNative: false,
	suspended: false,
	threadState: "RUNNABLE",
	stackTrace: [ ],
	lockedMonitors: [ ],
	lockedSynchronizers: [ ],
	lockInfo: null
}

ThreadId线程ID是多少,还有锁的时间,没有锁,blockedCount锁的数量,没有,还有lockName锁的名称,保持本地线程inNative,

也没有本地线程也是false,还有这个线程是否是挂起的suspended,也是false的,这些其实就是dump文件给我们输出的dump信息,

可以查看springboot在运行时的一些状况,那么至于其他的URI表示什么意思呢,就不一一讲解了,表格去看一下,你也可以去

试一下,我相信大家去读一下也是能读懂的,我们主要是讲一下Actuator的一个使用,其实相对于来说,Actuator比SpringBoot

Admin还要简单一些,毕竟他不是一个可视化的一个报表,我们主要讲一下什么是监控健康状况,怎么去监控
<project xmlns="http://maven.apache.org/POM/4.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
	http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.learn</groupId>
  <artifactId>springboot-hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>springboot-hello</name>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.12.RELEASE</version>
  </parent>
  
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
  
  <dependencies>
  <!-- springBoot的启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
  </dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>
management.security.enabled=false
package com.learn.springboothello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootHelloApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootHelloApplication.class, args);
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值