性能监控
Actuator监控
Actuator 简介
在生产环境中,往往需要对系统实际运行的情况(例如 cpu、io、disk、db、业务功能等指标)进行监控运维。在 SpringBoot 项目中 Actuator 模块提供了众多 HTTP 接口端点(Endpoint),来提供应用程序运行时的内部状态信息。
Actuator 模块提供了一个监控和管理生产环境的模块,可以使用 http、jmx、ssh、telnet 等来管理和监控应用。包括应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。同时,提供了可以扩展 Actuator 端点(Endpoint)自定义监控指标。这些指标都是以 JSON 接口数据的方式呈现。
需要注意的是,SpringBoot 1.x 和 2.x 的 Actuator 监控设置差别很大,不仅提供的 endpoint 路径不一樣,连 application.properties 的配置也不一样
使用 Spring Boot Actuator
如果要使用 Spring Boot Actuator 提供的监控功能,需要先加入相关的 maven dependency依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- actuator 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- WEB 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
只要加上了这个 maven dependency,SpringBoot在运行时就会自动开启/actuator/health和/actuator/info这两个 endpoint,然后就可以通过这两个 endpoint查看当前 SpringBoot应用程序的运行情况,例如自动化配置信息、创建的 Spring beans 以及一些环境属性等。
为了保证 actuator 暴露的监控接口的安全性,需要添加安全控制的依赖 spring-boot-start-security 依赖,访问应用监控端点时,都需要输入验证信息。
<dependency>
<!--Security 依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
如果添加了security安全管理,只需要在配置文件配置用户名和密码就可以了
spring:
security:
user:
name: admin
password: 123456
开启 Actuator 所有 endpoints
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html
application.properties
management.endpoints.web.exposure.include=*
配置 jmx 形式的监控
management.endpoints.jmx.exposure.include=*
Prometheus
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
打开 Prometheus 监控接口 application.properties
server.port=8088
spring.application.name=springboot2-prometheus
management.endpoints.web.exposure.include=*
management.metrics.tags.application=${spring.application.name}
访问 /actuator/prometheus
Source & Reference
https://blog.51cto.com/u_15287666/3109393
https://www.mobaijun.com/posts/283491354.html
https://blog.csdn.net/shuofxz/article/details/118213813
https://juejin.cn/post/6844904052417904653#heading-29