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日志并进行多维度分析。
目录
相关文章
|
4天前
|
监控 Java 开发者
什么是 Spring Boot?
什么是 Spring Boot?
38 6
|
6月前
|
前端开发 Java 文件存储
精通 Spring Boot 系列 06
精通 Spring Boot 系列 06
52 0
|
6月前
|
Java 数据库连接 数据库
精通 Spring Boot 系列 13
精通 Spring Boot 系列 13
41 0
|
6月前
|
存储 Java Maven
精通 Spring Boot 系列 01
精通 Spring Boot 系列 01
25 0
|
缓存 监控 安全
Spring Boot学习 之 Spring Boot Actuator(一)
Spring Boot学习 之 Spring Boot Actuator(一)
224 0
|
Prometheus 监控 安全
Spring Boot Actuator解析
Actuator 是 SpringBoot 项目中一个非常强大一个功能,有助于对应用程序进行监视和管理,通过 Restful Api 请求来监管、审计、收集应用的运行情况。
171 0
|
XML 监控 Java
初学Spring Boot 必须要知道的事
Spring Boot简介 Spring Boot 核心功能 Spring Boot的优缺点 SpringBoot 常用注解和原理
173 0
|
XML 监控 Java
【Spring Boot系列1】一文带你了解Spring Boot(上)
这几天一直没有更新,本来上一篇文章打算写MyBatis和实际项目的应用,当我把项目代码看完后,发现里面很多地方还是不太理解,就先不写了,等过两个月,实力水平提上来后,我再写这块内容。
309 0
【Spring Boot系列1】一文带你了解Spring Boot(上)
|
XML NoSQL Java
欢迎光临Spring Boot时代(一)2
欢迎光临Spring Boot时代(一)2
欢迎光临Spring Boot时代(一)2
|
Java Spring 容器
【Spring Boot系列1】一文带你了解Spring Boot(下)
这篇文章其实只讲述了SpringBoot的执行流程,如果只是纯粹使用SpringBoot,也可以不用去了解这些,因为只需要知道怎么用就可以,但是学习一门技术,还是需要多去深究一下,不能仅仅停留在会使用的基础上。
158 0
【Spring Boot系列1】一文带你了解Spring Boot(下)
下一篇
无影云桌面