SpringBoot使用actuator实现项目健康检查与监控
actuator简介
Spring Boot Actuator就是一款可以帮助你监控系统数据的框架,其可以监控很多很多的系统数据,它有对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,如:
- 显示应用程序员的Health健康信息
- 显示Info应用信息
- 显示HTTP Request跟踪信息
- 显示当前应用程序的“Metrics”信息
- 显示所有的@RequestMapping的路径信息
- 显示应用程序的各种配置信息
- 显示你的程序请求的次数 时间 等各种信息
actuator使用
基本用法
1、引入相关的依赖
<!-- actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 一般都是web应用,所以引入了boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、在spring boot 2.0以后,actuator默认只开启了info和health两个端点(不用配置就可以访问),要想使用其他的端点,需要在application.yml中打开:
management:
endpoints:
web:
exposure:
include: "*"
1)在这里include: "*" ,这个""双引号是必须要,在application.properties是不需要""双引号的,application.properties中是这样的:management.endpoints.web.exposure.include=*
2)默认所有的端点都以默认的路径http://localhost:8080/actuator 开始
如我们查看info端点的信息就是访问http://localhost:8080/actuator/info
3)actuator的大部分监控请求都是以get请求的,只有少数是post请求
4)如果想更改默认的actuator启动路径,可以在application.yml中更改,如我们改成 http://localhost:8080/
management:
endpoints:
web:
exposure:
include: "*"
base-path: /
并且health端点的信息默认也是显示的不具体的,请看默认的health是显示的什么:
"UP"就是安全健康的,"DOWN"就是有问题了。
5)在application.yml中开启所有的heanth监控数据:
management:
endpoints:
web:
#开启暴露所有的节点
exposure:
include: "*"
#include: health,info
#调整端点的前缀路径,默认是/actuator
base-path: /
endpoint:
health:
show-details: always #显示健康具体信息 默认不会显示详细信息
所有的监控端点endpoints
ID | 描述 |
---|---|
auditevents | 公开当前应用程序的审核事件信息。 |
beans | 显示应用程序中所有Spring bean的完整列表。 |
caches | 暴露可用的缓存。 |
conditions | 显示在配置和自动配置类上评估的条件以及它们匹配或不匹配的原因。 |
configprops | 显示所有的整理列表@ConfigurationProperties,查看配置属性,包括默认配置 |
env | 露出Spring的属性的各种环境变量,后面可跟/{name}查看具体的值 |
flyway | 显示已应用的任何Flyway数据库迁移。 |
health | 显示应用健康信息,在spring boot2.0以后需要在配置里show-details打开所有健康信息 |
httptrace | 显示HTTP跟踪信息(默认情况下,最后100个HTTP请求 - 响应交换),2.0以后需要手动打开 |
info | 显示任意应用信息,是在配置文件里自己定义的 |
integrationgraph | 显示Spring Integration图。 |
loggers | 显示和修改应用程序中记录器的配置。 |
liquibase | 显示已应用的任何Liquibase数据库迁移。 |
metrics | 显示当前应用程序的“指标”信息,比如内存用量和HTTP请求计数,后可跟/{name}查看具体值 |
mappings | 显示所有@RequestMapping路径的整理列表。 |
scheduledtasks | 显示应用程序中的计划任务。 |
sessions | 允许从Spring Session支持的会话存储中检索和删除用户会话。使用Spring Session对响应式Web应用程序的支持时不可用 |
shutdown | 允许应用程序正常关闭。 |
threaddump | 执行线程转储。 |
如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:
ID | 描述 |
---|---|
heapdump | 返回hprof堆转储文件。 |
jolokia | 通过HTTP公开JMX bean(当Jolokia在类路径上时,不适用于WebFlux)。 |
logfile | 返回日志文件的内容(如果已设置logging.file或logging.path属性)。支持使用HTTP Range标头检索部分日志文件的内容。 |
prometheus | 以可以由Prometheus服务器抓取的格式公开指标。 |
如果你只想打开某个端点,我们是这样的配置的
management:
endpoint:
health: #端点名称
enabled: true
自定义执行器信息端点配置
如果不设置resource 会导致application.yml中的@@找不到pom文件中的配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>@</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
<!--必须添加,否则无法动态获取值-->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
我们可以使用以下属性自定义Spring Boot 执行器信息端点:
- static properties - 我们可以使用键值对添加静态信息。
- maven build properties - spring boot会自动公开maven构建属性。我们可以使用@property.name@语法访问它们。
- environment variables - 我们可以公开环境变量。
- loading properties from java class- 我们可以通过实现InfoContributor接口从java类加载动态属性。
# Spring Boot Actuator Info Endpoint Customization
info:
# static properties
app:
name: Info Endpoint
version: v1.1.0
#build properties from maven
build:
#自定义info端点查看应用相关的信息
encoding: "@project.groupId@"
artifactId: "@project.artifactId@"
traget: "@java.version@"
#environment variables
env:
java:
vendor: ${java.vm.vendor}
vm-name: ${java.vm.name}
runtime-version: ${java.runtime.version}
从Java类加载属性:
我们可以通过实现InfoContributor接口动态注入属性。这允许我们注入静态/动态属性甚至进行数据库查找。这里的可能性无穷无尽。
@SpringBootApplication
public class ActuatorApp implements InfoContributor {
public static void main(String[] args) {
SpringApplication.run(ActuatorApp.class, args);
}
@Autowired
private ApplicationContext ctx;
@Override
public void contribute(Info.Builder builder) {
Map<String, Object> details = new HashMap();
details.put("start-date", ctx.getStartupDate());
details.put("bean-count", ctx.getBeanDefinitionCount());
builder.withDetail("context", details);
}
}
同样的自定义health端点信息可以实现HealthIndicator接口。
我们可以访问执行器信息端点。以下是先前配置的应用程序的示例输出:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南