Spring Boot Actuator项目监控详解
Spring Boot Actuator项目监控详解
Spring Boot Actuator是Spring Boot框架中用于监控和管理应用的重要组件,它提供了丰富的端点(Endpoints)来获取应用的健康状态、性能指标、日志信息等。本文将详细介绍Actuator的使用方法,并展示如何通过Spring Boot Admin进行可视化监控。
1. Actuator 监控应用程序
要启用Actuator的端点,只需在项目中引入Actuator的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
启动应用后,可以通过以下默认暴露的HTTP端点进行访问:
/actuator
/actuator/health
/actuator/health/{component}
/actuator/health/{component}/{instance}
/actuator/info
默认情况下,应用使用8080端口,访问http://localhost:8080/actuator/health
会显示应用的健康状态:
{"status":"UP"}
2. Actuator Endpoints
Actuator的核心功能是提供各种端点,用于监控和管理应用的运行时状态。以下是一些常用的端点及其功能:
2.1 端点列表
ID | 描述 |
---|---|
auditevents | 暴露审核事件信息 |
beans | 显示所有Spring Bean的列表 |
caches | 显示可用的缓存 |
conditions | 显示自动配置条件信息 |
configprops | 显示所有@ConfigurationProperties |
env | 显示环境属性 |
flyway | 显示Flyway数据库迁移 |
health | 显示应用健康信息 |
httptrace | 显示HTTP请求追踪信息 |
info | 显示应用信息 |
integrationgraph | 显示Spring Integration图 |
loggers | 显示和修改日志配置 |
liquibase | 显示Liquibase数据库迁移 |
metrics | 显示应用指标 |
mappings | 显示所有@RequestMapping路径 |
scheduledtasks | 显示计划任务 |
sessions | 管理用户会话 |
shutdown | 使应用正常关闭(默认禁用) |
startup | 显示应用启动步骤数据 |
threaddump | 执行线程转储 |
对于Web应用,还可以使用以下附加端点:
ID | 描述 |
---|---|
heapdump | 返回hprof堆转储文件 |
jolokia | 通过HTTP暴露JMX bean |
logfile | 返回日志文件内容 |
prometheus | 以Prometheus格式公开指标 |
2.2 暴露所有 Endpoints
默认情况下,Web应用只暴露部分端点。要暴露所有端点,可以在application.yml
中进行如下配置:
endpoints:
web:
exposure:
include: '*'
2.3 默认开启所有监控端点&打开/关闭 Actuator Endpoint
要关闭默认开启的所有监控端点,可以在application.yml
中进行如下配置:
management:
endpoints:
enabled-by-default: false
此时,通过Web访问只能看到/actuator
端点。如果需要选择性地暴露某些端点,可以进行如下配置:
management:
endpoints:
enabled-by-default: false
endpoint:
health:
enabled: true
loggers:
enabled: true
mappings:
enabled: true
metrics:
enabled: true
2.4 最常用的 Endpoint
- Health:监控应用程序状况
- Metrics:运行时指标
- Loggers:日志记录
2.4.1 Health Endpoint
/actuator/health
端点提供了关于应用健康的基础信息。要显示详细的健康信息,可以在application.yml
中进行如下配置:
management:
endpoint:
health:
show-details: always
2.4.2 Metrics Endpoint
/actuator/metrics/{name}
端点展示了多个有用的度量信息,如JVM内存使用情况、系统CPU使用情况等。访问localhost:8080/actuator/metrics
可以看到监控指标列表。
要获取某个度量的详细信息,可以传递度量名称到URL中,例如访问localhost:8080/actuator/metrics/jvm.memory.used
。
2.4.3 Loggers Endpoint
/actuator/loggers
端点展示了应用的日志信息,并允许在运行时改变日志等级。例如,要获取root
logger的细节,可以访问http://localhost:8080/actuator/loggers/root
:
{
"configuredLevel":"INFO",
"effectiveLevel":"INFO"
}
要改变日志等级,可以发送一个POST请求到http://localhost:8080/actuator/loggers/root
,并传递如下参数:
{
"configuredLevel": "DEBUG"
}
2.4.4 Info Endpoint
info
端点展示了应用的基本信息,包括编译信息和Git信息。访问http://localhost:8080/actuator/info
可以看到相关信息。
2.4.5 Mappings Endpoint
访问http://localhost:8080/actuator/mappings
可以查看请求映射的相关信息。
2.4.6 Configprops Endpoint
3. Spring Boot Admin
Spring Boot Admin是一个开源项目,用于管理和监控Spring Boot应用程序,提供可视化的UI界面展示Actuator Endpoints的监控信息。它包括客户端(Spring Boot Admin Client)和服务端(Spring Boot Admin Server)两个角色。
3.1 Admin-Server
要创建一个Admin Server,需要完成以下步骤:
- 创建admin-server模块
- 导入依赖坐标
admin-starter-server
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 服务端监控 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
</dependencies>
配置访问端口:
# 应用名称
spring.application.name=springboot-admin-server
# 应用服务 WEB 访问端口
server.port=9000
在引导类上启用监控功能:
// 开启服务端监控
@EnableAdminServer
@SpringBootApplication
public class SpringbootAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootAdminServerApplication.class, args);
}
}
3.2 Admin-Client
要创建一个Admin Client,需要完成以下步骤:
- 创建admin-client模块
- 导入坐标依赖
admin-starter-client
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 客户端访问 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
</dependencies>
配置相关信息:
# 应用名称
spring.application.name=springboot-admin-client
# 执行admin-server的地址
spring.boot.admin.client.url=http://localhost:9000
# 暴露所有endpoints
management.endpoints.web.exposure.include=*
# 开启健康检查的完整信息
management.endpoint.health.show-details=always
同时启动server和client服务后,访问http://localhost:9000
可以看到正在运行的实例: