前言:
监听器相信熟悉 Spring、Spring Boot 的都知道,但是监视器又是什么?估计很多人一脸懵的状态,本篇分享一下 Spring Boot 的监视器。
Spring Boot 系列文章传送门
Spring Boot 事件监听机制实战【自定义 Spring Boot 事件监听】
Spring Boot 的监视器是什么?
Spring Boot 的监视器一种特殊的应用程序或组件,用于监控和管理整个应用程序的运行状态和性能,它提供了一种可视化的方式,可以实时跟踪和监视应用程序的各种指标,例如响应时间、CPU使用率、内存使用情况等,Spring Boot 提供了一些内置的监视器功能,可以集成到应用程序中,Spring Boot 监视器功能由各种监视器监视器 Bean 实现,比如 Spring Boot Actuator。
什么是 Spring Boot Actuator?
Spring Boot Actuator 是一个用于监控和管理 Spring Boot 应用程序的模块,它提供了许多端点,可以通过 HTTP 请求来访问这些端点,来获取应用程序的各种信息,如健康状况、度量指标、配置信息等,Actuator还可以通过配置开启或关闭特定的端点,并提供自定义的端点。
Spring Boot Actuator 可以做什么?
- 指标监控:实时跟踪应用程序的各种指标,例如响应时间、CPU使用率、内存使用情况等,以便进行性能优化和故障排查。
- 健康检查:检查应用程序的健康状况,包括是否正常运行(非常实用)。
- 日志管理:记录应用程序的日志信息,包括错误日志、警告日志、调试日志等,以便进行性能优化和故障排查。。
- 端点监控:监控应用程序中的各种端点(HTTP接口),包括请求数量、请求时间、响应时间等。
Spring Boot Actuator 使用演示
在 pom.xml 中引入 management.endpoints.web.exposure.include=*
组件,如下:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在程序的配置文件中启用 Actuator
yaml
#暴露所有的端点
management.endpoints.web.exposure.include=*
- 号的配置是允许所有的 Actuator 端点通过 HTTP 请求访问,生产环境不建议这样配置。
启动应用程序获取程序的健康情况:http://localhost:port/actuator/health
结果如下:
符合预期,我们的程序是健康的。
自定义 Endpoint
注解说明
- @Endpoint:可通过JMX和web应用程序访问。
- @JmxEndpoint:只能通过 JMX 访问。
- @WebEndpoint:只能通过 WEB 应用访问。
- @ReadOperation:相当于 GET 请求。
- @WriteOperation:相当于 POST 请求。
- @DeleteOperation:相当于 DELETE 请求。
有时候我们需要自定义自己的端点,我们可以通过 @Endpoint注解 + @ReadOperation、@WriteOperation、@DeleteOperation 注解来实现自定义端点,代码如下:
java
@Component
@Endpoint(id = "myActuatorEndpoint")
public class MyActuatorController {
@ReadOperation
public Map<String, Object> get() {
Map<String, Object> map = new HashMap<>();
map.put("httpMethod", HttpMethod.GET.toString());
return map;
}
@WriteOperation
public Map<String, Object> post() {
Map<String, Object> map = new HashMap<>();
map.put("httpMethod", HttpMethod.POST.toString());
return map;
}
@DeleteOperation
public Map<String, Object> delete() {
Map<String, Object> map = new HashMap<>();
map.put("httpMethod", HttpMethod.DELETE.toString());
return map;
}
}
GET 方式测试结果:
结果符合预期,另外两种方式这里不做测试了,有兴趣的可以自己去测试一下。
自定义端口
我们还可以自定义监控的端口
yaml
#自定义端口
management.server.port=8082
如有不正确的地方请各位指出纠正。