Spring Boot Actuator(超详细教程)
背景
由于微服务的出现,系统业务发展随之微型化,每个节点都是系统的组成部分,因此全方位的监控固然重要。所以我们需要一个具有非常强大的监控功能的框架支持,而Spring Boot Actuator 便能帮助我们全方位的监控应用结点!!
1、Spring Boot Actuator
1.简介
Spring Boot Actuator 是 SpringBoot 自带的一个组件,是对SpringBoot进行监控、追踪、审计、控制等,是用来帮助我们每个微服务推向生产环境时对其进行监控和管理的工具集。
我们可以使用JMX或HTTP端点来管理和监视应用程序,也可以使用可视化工具(Spring Boot Admin)来进行页面展示。
2.版本过渡(1.x——>2.x)
3.使用
1.引入Actuator的场景
<!--springboot自动仲裁版本-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.查看监控状态
方式一:使用JMX(java管理扩展)
cmd中输入jconsole,进入java监视和管理控制台,并根据你当前springboot项目,选中当前项目启动类的全类名:
方式二:通过http请求访问(强烈推荐)
访问 http://localhost:8080/actuator/** :
注:默认情况下,通过HTTP请求不能访问所有端点,只有暴露了health信息,而使用JMX可以查看所有端点信息
从SpringBoot2.6.1开始,默认不会暴露info端点
3.配置文件端点配置
示例:
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端点
2、Actuator Endpoints
1.常用的Endpoints:
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 | 执行线程转储 |
2.几个重要的Endpoint:
1.Health Endpoint
健康检查端点,我们一般用于在云平台;平台会定时的检查应用的健康状况,Health Endpoint 就可以为平台返回当前应用的一系列组件健康状况的集合(健康检查后的汇总报告),很多健康检查默认已经配置好了,比如:数据库、redis等;也可以很容易添加自定义的健康检查机制。
访问 http://localhost:8080/actuator/health 时,得到的是信息{“status”:“UP”},如果出现异常,status的值还有可能是DOWM:
如果想要查看health的详细信息(配置文件配置):
management:
health:
enabled: true
show-details: always #开启总是显示详细信息,可显示每个模块的状态信息
2.Metrics Endpoints
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对应的信息:
3.管理Endpoint
1.Endpoint的暴露
- JMX方式:默认是暴露所有Endpoint
- HTTP方式:默认是暴露health 和 info Endpoint(特别注意:从SpringBoot2.6.1开始,默认不再暴露info Endpoint)
- 如果引入了SpringSercurity,则会默认配置安全访问规则
2.Endpoint的开启&禁用
-
默认除了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
3.自定义Endpoint
1.自定义health
-
继承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; } }
运行结果:
2.自定义info
-
编写配置文件:
info: appName: 毛哥test version: 555
运行结果:
-
实现InfoContributor接口
//示例:
@Component
public class SimpleInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("内存","空间充足")
.withDetail("磁盘", "空间充足").build();
}
}
运行结果:
3.自定义Endpoint
-
实现指定的接口(已废弃,博主就不去详细展示了)
-
基于注解的形式实现
-
常见的注解有:
@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("同学们,加油!"); } }
运行结果:
-