Spring Boot 中的 Actuator 是什么?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring Boot 中的 Actuator 是什么?

在现代微服务架构中,监控和管理应用的状态变得尤为重要。Spring Boot Actuator 正是为此而设计的一个强大模块,它为应用程序提供了生产就绪的功能,如健康检查、度量收集、审计等。通过 Actuator,开发者可以轻松获取关于应用的运行时信息,这对于诊断问题、优化性能以及确保应用的高可用性具有重要意义。

1. Actuator 的基本概念

Actuator 是 Spring Boot 框架的一部分,它提供了一系列的端点(Endpoints),这些端点可以暴露应用程序的各种运行时信息。每个端点都是一个 RESTful API,可以通过 HTTP 请求访问。Actuator 的主要目标是帮助开发者更好地理解和控制正在运行的应用程序。

2. Actuator 的主要功能

  • 健康检查:Actuator 可以报告应用程序及其依赖组件的健康状态。例如,数据库连接是否正常、外部服务是否可达等。
  • 度量信息:提供关于应用性能的度量数据,如内存使用情况、HTTP 请求统计、线程池状态等。
  • 审计信息:记录用户操作和系统事件,便于追踪和分析。
  • 环境属性:显示应用的配置属性,包括系统属性、环境变量、配置文件等。
  • 日志级别:动态调整应用的日志级别,方便调试和故障排查。
  • 关闭应用:在某些情况下,可以通过 Actuator 安全地关闭应用。

3. 添加 Actuator 依赖

要使用 Actuator,首先需要将其添加到项目的依赖中。如果你使用的是 Maven,可以在 pom.xml 文件中加入以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

如果使用 Gradle,则在 build.gradle 中添加:

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

4. 配置 Actuator

默认情况下,Actuator 会暴露一些基本的端点,如 healthinfo。你可以在 application.propertiesapplication.yml 文件中配置更多的端点和安全选项。

  • 启用所有端点

    management.endpoints.web.exposure.include=*
    
  • 自定义端点路径

    management.endpoints.web.base-path=/manage
    
  • 配置安全性

    为了保护敏感信息,通常需要对 Actuator 端点进行身份验证。你可以使用 Spring Security 来配置安全策略。

    management:
      endpoints:
        web:
          exposure:
            include: health, info
      endpoint:
        health:
          show-details: always
    security:
      user:
        name: admin
        password: secret
    

5. 常用端点介绍

  • /actuator/health:返回应用的健康状态。可以通过配置 management.endpoint.health.show-details 属性来显示详细的健康信息。

    {
         
      "status": "UP",
      "details": {
         
        "diskSpace": {
         
          "status": "UP",
          "total": 499886766080,
          "free": 193507305472,
          "threshold": 10485760
        },
        "db": {
         
          "status": "UP",
          "database": "H2",
          "hello": 1
        }
      }
    }
    
  • /actuator/info:返回应用的信息,通常用于展示构建信息、版本号等。

    {
         
      "app": {
         
        "name": "My Application",
        "version": "1.0.0"
      }
    }
    
  • /actuator/metrics:返回应用的度量信息,如内存使用、HTTP 请求统计等。

    {
         
      "names": [
        "jvm.buffer.count",
        "jvm.buffer.memory.used",
        "jvm.buffer.total.capacity",
        "jvm.classes.loaded",
        "jvm.classes.unloaded",
        "jvm.gc.live.data.size",
        "jvm.gc.max.data.size",
        "jvm.gc.memory.allocated",
        "jvm.gc.memory.promoted",
        "jvm.gc.pause",
        "jvm.memory.committed",
        "jvm.memory.max",
        "jvm.memory.usage",
        "jvm.threads.daemon",
        "jvm.threads.live",
        "jvm.threads.peak",
        "jvm.threads.states",
        "logback.events",
        "process.cpu.usage",
        "process.files.max",
        "process.files.open",
        "process.start.time",
        "process.uptime",
        "system.cpu.count",
        "system.cpu.usage",
        "system.load.average.1m",
        "tomcat.cache.access",
        "tomcat.cache.hit",
        "tomcat.global.error",
        "tomcat.global.received",
        "tomcat.global.request.max",
        "tomcat.global.request",
        "tomcat.global.sent",
        "tomcat.http.request.max",
        "tomcat.http.request",
        "tomcat.sessions.active.current",
        "tomcat.sessions.active.max",
        "tomcat.sessions.alive.max",
        "tomcat.sessions.created",
        "tomcat.sessions.expired",
        "tomcat.sessions.rejected",
        "tomcat.threads.config.max",
        "tomcat.threads.busy",
        "tomcat.threads.current"
      ]
    }
    
  • /actuator/loggers:管理和查询日志级别。

    {
         
      "levels": [
        "TRACE",
        "DEBUG",
        "INFO",
        "WARN",
        "ERROR",
        "FATAL",
        "OFF"
      ],
      "loggers": {
         
        "ROOT": {
         
          "configuredLevel": "INFO",
          "effectiveLevel": "INFO"
        },
        "com.example": {
         
          "configuredLevel": null,
          "effectiveLevel": "INFO"
        }
      }
    }
    

6. 自定义端点

除了内置的端点,你还可以创建自定义端点来满足特定需求。自定义端点可以通过实现 Endpoint 接口或使用 @Endpoint 注解来定义。

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;

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

    @ReadOperation
    public String customOperation() {
   
        return "This is a custom endpoint";
    }
}

7. 安全性和最佳实践

  • 限制暴露的端点:只暴露必要的端点,避免泄露敏感信息。
  • 启用身份验证:使用 Spring Security 配置基本认证或更复杂的认证机制。
  • 监控和报警:结合监控工具(如 Prometheus、Grafana)和报警系统(如 Alertmanager),实时监控应用状态并及时响应异常。

8. 总结

Spring Boot Actuator 是一个非常强大的工具,它为开发者提供了丰富的生产就绪功能,帮助管理和监控应用程序。通过合理配置和使用 Actuator,可以显著提升应用的可维护性和可靠性。无论是健康检查、度量信息还是日志管理,Actuator 都能提供全面的支持,使开发者能够更加专注于业务逻辑的实现。

希望本文对你理解 Spring Boot Actuator 有所帮助,如果你有任何疑问或建议,欢迎留言交流。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
消息中间件 Java 开发工具
Spring Cloud【Finchley】实战-06使用/actuator/bus-refresh端点手动刷新配置 + 使用Spring Cloud Bus自动更新配置
Spring Cloud【Finchley】实战-06使用/actuator/bus-refresh端点手动刷新配置 + 使用Spring Cloud Bus自动更新配置
242 0
|
1月前
|
安全 Java 测试技术
如何在 Spring Boot 中禁用 Actuator 端点安全?
如何在 Spring Boot 中禁用 Actuator 端点安全?
85 1
|
2月前
|
监控 数据可视化 Java
springBoot:actuator&admin 图形可视化&spring 打包 (七)
本文介绍了Spring Boot Actuator及其图形化管理界面Spring Boot Admin的使用方法,包括依赖导入、服务端与客户端配置、以及如何打包为JAR和WAR文件并部署。通过这些步骤,可以实现应用的监控和管理功能。
105 0
|
4月前
|
Java Spring 监控
Spring Boot Actuator:守护你的应用心跳,让监控变得触手可及!
【8月更文挑战第31天】Spring Boot Actuator 是 Spring Boot 框架的核心模块之一,提供了生产就绪的特性,用于监控和管理 Spring Boot 应用程序。通过 Actuator,开发者可以轻松访问应用内部状态、执行健康检查、收集度量指标等。启用 Actuator 需在 `pom.xml` 中添加 `spring-boot-starter-actuator` 依赖,并通过配置文件调整端点暴露和安全性。Actuator 还支持与外部监控工具(如 Prometheus)集成,实现全面的应用性能监控。正确配置 Actuator 可显著提升应用的稳定性和安全性。
167 0
|
5月前
|
监控 NoSQL Java
Spring Boot Actuator 使用和常用配置
Spring Boot Actuator 使用和常用配置
210 5
|
4月前
|
安全 Java Spring
Spring Boot 关闭 Actuator ,满足安全工具扫描
Spring Boot 关闭 Actuator ,满足安全工具扫描
597 0
|
5月前
|
运维 Prometheus 监控
Spring Boot中使用Actuator监控应用状态
Spring Boot中使用Actuator监控应用状态
|
6月前
|
运维 监控 Java
Spring Boot中使用Actuator进行监控
Spring Boot中使用Actuator进行监控
|
6月前
|
监控 Java API
【监控】spring actuator源码速读
【监控】spring actuator源码速读
45 1
|
5月前
|
监控 安全 Java
解析Spring Boot中的Actuator端点
解析Spring Boot中的Actuator端点