通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过HTTP, JMX, SSH协议来进行操作,自动得到审计、健康及指标信息等。
步骤:
1、引入 spring-boot-starter-actuator
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、通过 http 方式访问监控端点
创建项目,并引入 actuator,并启动项目
项目 pom.xml 配置文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.12.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.njf</groupId> <artifactId>spring-boot-16-actuator</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-16-actuator</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
启动项目:
使用了 actuator 之后,会自动添加很多的映射,这些就是用于监控管理的请求信息。
监控和管理端点:
默认这些访问都是受保护的,不可以直接访问,可以在 application.properties 中设置下面的属性,就可以访问了。
management.security.enabled=false
(1)health:监控应用健康状况
(2)auditevents:审计事件
(3)beans:所有 Bean的信息
(4)info:当前应用信息
可以在 application.properties 中配置 info 信息
info.app.id=Hello info.app.verion=1.0.0
还可以配置 git 的信息(可以参照GitProperties 类)
创建 git.properties 并配置信息;
git.branch=master git.commit.id=njf git.commit.time=2022-01-08 12:12:56
(5)dump:应用中的线程状态信息
(6)autoconfig:所有自动配置信息
(7)heapdump:下载当前内存快照
(8)trace:追踪信息(最新的http 请求)
(9)mappings:应用 @RequestMapping 映射路径,由哪个Controller来处理
(10)metrics:应用的各项指标
(11)env:当前环境信息
(12)loggers:日志相关信息
(13)configprops:所有配置属性
(14)shutdown:远程关闭当前应用(默认关闭)
在application.properties 中开启此功能:(可进行 shutdown,POST 提交,此端点默认关闭)
#远程关闭应用,需要发送post请求 endpoints.shutdown.enabled=true
可以使用 Postman 发送 POST 请求来测试:
http://localhost:8080/shutdown
定制端点一般通过endpoints+端点名+属性名来设置
修改端点id(endpoints.beans.id=mybeans) 开启远程应用关闭功能(endpoints.shutdown.enabled=true) 关闭端点(endpoints.beans.enabled=false)
示例:
#定制端点信息,id 和 path 只能一个生效 endpoints.beans.id=mybean endpoints.beans.path=/bean #禁用端点信息 endpoints.beans.enabled=false
定制端点访问根路径:
#定制端点访问根路径 management.context-path=/manage
此时的端点访问路径就是 http://localhost:8080/manage/beans。
这样可以结合 Spring Security 进行权限控制。
定制端点的访问端口:
#定制端点的访问端口,如果为 -1 表示关闭端点访问 management.port=8181
关闭所有端点,按需启动端点:
#关闭所有端点,按需启动端点 endpoints.enabled=false endpoints.beans.enabled=true
默认只有当前应用中组件的健康状态,Spring Boot 也提供了一些默认提供好的组件健康状态。
(1)加入 Redis 的场景启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
(2)配置 Redis 的信息
#配置 redis 的主机地址(配置是错误的) spring.redis.host=localhost
(3)启动服务
可以看到 Redis 连接是异常的。
SpringBoot 提供了 RedisHealthIndicator 类用来检查 Redis 的连接状态。
(1)自定义健康状态指示器步骤:
1、编写一个指示器,必须实现 HealthIndicator 接口 2、指示器的名字 xxxHealthIndicator 3、加入容器中
(2)自定义健康状态指示器:
@Component public class MyAppHealthIndicator implements HealthIndicator { @Override public Health health() { //自定义的检查方法 //Health.up().build(); 代表应用健康 Health build = Health.down().withDetail("msg", "服务异常").build(); return build; } }
测试: