由于微服务的出现,系统业务发展随之微型化,每个节点都是系统的组成部分,因此全方位的监控固然重要。所以我们需要一个具有非常强大的监控功能的框架支持,而Spring Boot Actuator 便能帮助我们全方位的监控应用结点!!
Spring Boot Actuator 是 SpringBoot 自带的一个组件,是对SpringBoot进行监控、追踪、审计、控制等,是用来帮助我们每个微服务推向生产环境时对其进行监控和管理的工具集。
我们可以使用JMX或HTTP端点来管理和监视应用程序,也可以使用可视化工具(Spring Boot Admin)来进行页面展示。
<!--springboot自动仲裁版本-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
cmd中输入jconsole,进入java监视和管理控制台,并根据你当前springboot项目,选中当前项目启动类的全类名:
访问 http://localhost:8080/actuator/** :
注:默认情况下,通过HTTP请求不能访问所有端点,只有暴露了health信息,而使用JMX可以查看所有端点信息
从SpringBoot2.6.1开始,默认不会暴露info端点
示例:
management:
#配置所有的端点
endpoints:
enabled-by-default: false #true为暴露所有端点,false为禁用所有端点
#jmx方式配置
jmx:
exposure:
include:
exclude:
#web方式配置
web:
base-path: /maoge #修改访问路径
exposure:
include: '*'
exclude:
#配置单个端点
endpoint:
info:
enabled: true #开启info端点
Endpoint | 描述 |
---|---|
beans | 显示应用程序中所有Spring Bean的完整列表。 |
caches | 暴露可用的缓存。 |
conditions | 显示自动配置的所有条件信息,包括匹配或不匹配的原因。 |
configprops | 显示所有@ConfigurationProperties。 |
flyway | 显示已应用的所有Flyway数据库迁移。 需要一个或多个Flyway组件。 |
health | 显示应用程序健康状况信息。 |
info | 显示应用的基本信息 |
env | 暴露Spring的属性ConfigurableEnvironment,显示当前的环境特性 |
httptrace | 显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个HttpTraceRepository |
组件。 | |
loggers | 显示和修改应用程序中日志的配置。 |
liquibase | 显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件。 |
metrics | 显示当前应用程序的“指标”信息。 |
scheduledtasks | 显示应用程序中的计划任务。 |
sessions | 允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。 |
shutdown | 使应用程序正常关闭。默认禁用。 |
threaddump | 执行线程转储 |
健康检查端点,我们一般用于在云平台;平台会定时的检查应用的健康状况,Health Endpoint 就可以为平台返回当前应用的一系列组件健康状况的集合(健康检查后的汇总报告),很多健康检查默认已经配置好了,比如:数据库、redis等;也可以很容易添加自定义的健康检查机制。
访问 http://localhost:8080/actuator/health 时,得到的是信息{“status”:“UP”},如果出现异常,status的值还有可能是DOWM:
如果想要查看health的详细信息(配置文件配置):
management:
health:
enabled: true
show-details: always #开启总是显示详细信息,可显示每个模块的状态信息
Metrics端点是用来返回当前应用各类重要度量指标,比如内存信息、线程信息、垃圾回收信息等。也可以添加自定义Metrics或者扩展已有的Metrics。
访问 http://localhost:8080/actuator/metrics ,可以查看当前工程metrics端点所支持的度量指标:
由图可以知道metrics端点所支持的度量指标后,就可以通过 http://localhost:8080/actuator/metrics/{name} 请求获取每个度量指标的信息。比如 访问 http://localhost:8080/actuator/metrics/application.ready.time 来获取 application.ready.time对应的信息:
默认除了shutdown,其他Endpoint都是开启的
开启&禁用所有的Endpoint
management:
endpoints:
#false为禁用所有端点,true为开启所有端点
enabled-by-default: false
开启单个Endpoint
management:
endpoint:
metrics:
enabled: true #开启metrics端点
health:
enabled: true #开启health端点
info:
enabled: true #开启infoduandian
继承AbstractHealthIndicator类
//示例:
@Component
public class MaogeHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
builder.withDetail("msg","状态糟糕").down().build();
}
}
实现HealthIndicator接口
//示例:
@Component
public class MyHealthIndicator implements HealthIndicator {
@Override
public Health health() {
Health health = Health.down().withDetail("msg", "状态不错")
.withDetail("hunnu", "湖南师范大学").build();
return health;
}
}
运行结果:
编写配置文件:
info:
appName: 毛哥test
version: 555
运行结果:
实现InfoContributor接口
//示例:
@Component
public class SimpleInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("内存","空间充足")
.withDetail("磁盘", "空间充足").build();
}
}
运行结果:
实现指定的接口(已废弃,博主就不去详细展示了)
基于注解的形式实现
常见的注解有:
@Endpoint:既支持JMX又支持HTTP
@WebEndpoint:只支持HTTP
@JmxEndpoint:只支持JMX
其中 @ReadOperation 这个注解相当于restful api的GET操作,@WriteOperation 相当于restful api的Post操作,@DeleteOperation 相当于restful api的DELETE操作。使用 @Selector注解进行传参
在类上标注**@Endpoint**,然后对应类的方法上标注@ReadOperation、@WriteOperation或@DeleteOperation,并且方法通过JMX自动开启,并且在Web应用程序中也可以通过HTTP方式进行访问。
示例:
//自定义一个端点maoge
@Endpoint(id = "maoge")
@Component
public class SimpleEndpoint {
@ReadOperation
public String read(){
return "hello 同学";
}
@WriteOperation
public void write(){
System.out.println("同学们,加油!");
}
}
运行结果: