Spring Boot之Actuator介绍

Spring Boot Actuator 是一个用于监控和管理你 Spring Boot 应用的框架。它提供了许多内置的端点(Endpoints),允许你访问应用程序的运行时信息,如健康检查、环境属性、日志、指标、线程转储等。此外,它还支持外部化配置,使得你可以轻松地定制和扩展这些端点。本文将详细介绍 Spring Boot Actuator 的各个方面,包括其配置、安全、以及如何使用它来监控和管理你的应用,并提供相应的代码示例。

目录

1. Spring Boot Actuator 简介

2. 启用 Actuator

Maven 依赖

Gradle 依赖

3. Actuator 端点

4. 配置 Actuator

5. 安全配置

添加 Spring Security 依赖

配置 Security

6. 自定义端点

7. Actuator 与监控系统集成

8. 示例应用

application.properties

启动类

总结


1. Spring Boot Actuator 简介

Spring Boot Actuator 是 Spring Boot 生态系统中的一个关键部分,旨在通过暴露一系列 HTTP 端点来简化应用程序的监控和管理。这些端点提供了对应用程序内部状态的访问,而无需修改应用程序代码。你可以使用这些端点来检查应用程序的健康状况、查看度量指标、更改日志级别等。

2. 启用 Actuator

要在 Spring Boot 项目中启用 Actuator,你只需在 pom.xml 文件中添加 Spring Boot Actuator 的依赖(如果你使用的是 Maven)。对于 Gradle,则在 build.gradle 文件中添加相应的依赖。

Maven 依赖

 
org.springframework.boot 
spring-boot-starter-actuator 

Gradle 依赖

implementation 'org.springframework.boot:spring-boot-starter-actuator'

3. Actuator 端点

Actuator 提供了多种内置端点,以下是一些常用的端点及其描述:

  • /actuator/health:显示应用的健康状态信息。
  • /actuator/info:显示应用配置的自定义信息。
  • /actuator/metrics:显示当前应用程序的度量指标信息。
  • /actuator/env:显示当前的环境属性。
  • /actuator/loggers:显示和修改日志级别。
  • /actuator/mappings:显示所有 @RequestMapping 路径的映射信息。
  • /actuator/beans:显示 Spring 应用程序中所有 Bean 的完整列表。
  • /actuator/shutdown(禁用时默认不暴露):允许你优雅地关闭 Spring Boot 应用程序。

4. 配置 Actuator

你可以通过 application.properties 或 application.yml 文件来配置 Actuator。以下是一些常见的配置选项:

# 启用或禁用特定的端点
management.endpoint.shutdown.enabled=true

# 设置端点的暴露级别
# 有三个选项:'web', 'jmx', 'off'
# 默认值为 'web,jmx'
management.endpoints.web.exposure.include=*
# 或者只暴露特定的端点
# management.endpoints.web.exposure.include=health,info

# 设置端点的上下文路径
management.endpoints.web.base-path=/actuator

# 更改健康端点的显示详细信息
management.endpoint.health.show-details=always

5. 安全配置

默认情况下,Actuator 的端点可能会被暴露给外部用户,这可能会带来安全风险。因此,建议使用 Spring Security 来保护这些端点。

添加 Spring Security 依赖

 
org.springframework.boot 
spring-boot-starter-security 

配置 Security

你可以通过编写一个配置类来配置 Spring Security,以限制对 Actuator 端点的访问。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ACTUATOR")
.anyRequest().authenticated()
.and()
.httpBasic();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("ACTUATOR");
}
}

6. 自定义端点

虽然 Actuator 提供了许多内置端点,但你还可以根据需要创建自定义端点。自定义端点可以通过实现 WebMvcEndpoint 接口或使用 @Endpoint 和 @WebEndpoint 注解来创建。

使用 @Endpoint 和 @WebEndpoint

@Endpoint(id = "custom")
public class CustomEndpoint {

@ReadOperation
public String getCustomInfo() {
return "This is custom info from my custom endpoint";
}
}

@Configuration
public class CustomEndpointConfig {

@Bean
public CustomEndpoint customEndpoint() {
return new CustomEndpoint();
}

@Bean
@WebEndpoint(id = "custom")
public WebEndpointResponseSupport customWebEndpoint() {
return new WebEndpointResponseSupport() {
@Override
protected ResponseEntity get(ServerWebExchange exchange) {
return ResponseEntity.ok(customEndpoint().getCustomInfo());
}
};
}
}

7. Actuator 与监控系统集成

Spring Boot Actuator 还可以与各种监控系统集成,如 Prometheus、Grafana、Micrometer 等。这些集成使得你可以收集和可视化应用程序的度量指标,从而更容易地进行问题诊断和系统优化。

8. 示例应用

假设你有一个简单的 Spring Boot 应用,并已经添加了 Actuator 依赖。以下是一个简单的示例,展示如何配置 Actuator 并使用它来检查应用的健康状态。

application.properties

management.endpoints.web.exposure.include=* 
management.endpoint.health.show-details=always

启动类

@SpringBootApplication 
public class MyApplication { 


public static void main(String[] args) { 
SpringApplication.run(MyApplication.class, args); 
} 
}

现在,你可以通过访问 http://localhost:8080/actuator/health 来检查应用的健康状态。

总结

Spring Boot Actuator 是一个强大的工具,用于监控和管理 Spring Boot 应用。通过提供一系列内置的端点,它使得你可以轻松地获取应用程序的运行时信息,并进行必要的调整。此外,你还可以根据需要自定义端点,并将其与各种监控系统集成。希望这篇文章能够帮助你更好地理解和使用 Spring Boot Actuator。

你可能感兴趣的:(JAVA,spring,boot,后端,java)