Spring Boot Actuator组件
Spring Boot Actuator通过HTTP endpoints或者JMX来管理和监控Spring Boot应用,如服务的审计、健康检查、指标统计和HTTP追踪等。
Spring Boot Actuator同时还可以与AppOptics、Datadog、Elastic、Influx、Prometheus等第三方监控系统进行整合。完善的监控系统可以使业务系统更健壮。本节主要介绍Spring Boot Actuator的相关知识与实践应用。
Endpoints组件简介
Spring Boot Actuator Endpoints可以让开发者监控或者动态地改变应用。Spring Boot Actuator内置了一系列的端点,也可以自定义端点。默认情况下,Spring Boot Actuator暴露了health和info两个端点。例如,访问health端点可以进行应用健康状态查询,如果应用健康,则返回UP,如果不健康,则返回DOWN。通常情况下使用HTTP的方式访问端点信息,默认的访问路径是/actuator。如果访问health端点,则使用/actuator/health即可。如表8.1所示为Spring Boot提供的一些端点。
表8.1 Spring Boot提供的端点
如果程序是Web应用,还可以使用下面的端点,如表8.2所示。
表8.2 Web应用可以使用的端点
默认情况下,除了shutdown端点之外,其他端点都是启用的。如果想要启用shutdown端点,可以通过配置management.endpoint.<id>.enabled属性来实现。具体配置如下:
management:
endpoint:
shutdown:
enabled: true
如果想要禁用默认的端点,而只开启自己想要的端点,可以使用下面的配置:
management:
endpoints:
enabled-by-default: false
endpoint:
info:
enabled: true
基于HTTP的方式默认暴露了health和info端点。如果想要暴露更多的端点,需要使用下面的配置:
management:
endpoints:
web:
exposure:
include: "*"
exclude: "env,beans"
Spring Boot Actuator端点的默认访问路径是/actuator,如果想要修改该路径,需要进行如下配置:
management:
endpoints:
web:
base-path: "/"
path-mapping:
health: "healthcheck"
同样可以修改访问的端口,配置信息如下:
management:
server:
port: 8081
如果想要修改端点的属性配置,可以进行如下修改:
management:
endpoint:
health:
show-details: always
自定义端点
除了Spring Boot Actuator提供的通用端点之外,开发中还可以自定义端点。Spring Boot提供了@Endpoint注解,带有@Endpoint注解的Bean即为自定义端点。@Jmx-Endpoint和@WebEndpoint 注解可分别通过JMX或者HTTP方式进行访问。
自定义端点提供了方法注解@ReadOperation、@WriteOperation和@Delete-Operation,分别对应HTTP访问方法的GET、POST和DELETE。
下面自定义一个简单的端点,代码如下:
//自定义端点
@WebEndpoint(id="userEndpoint")
@Component
public class UserEndpoint {
@ReadOperation
public String readUserEndpoint(){
return "test read userEndpoint!";
}
@WriteOperation
public String writeUserEndpoint(){
return "test write userEndpoint!";
}
@DeleteOperation
public String deleteUserEndpoint(){
return "test delete userEndpoint!";
}
}
定义好端点Bean之后,需要暴露这个端点,配置信息如下:
management:
endpoints:
web:
exposure:
include: userEndpoint
访问
http://localhost:8080/actuator即可看到userEndpoint端点已经暴露出来了。分别用GET、POST和DELETE方式访问http://localhost:8080/actuator/userEndpoint,将返回不同的信息。