Spring Boot 中的 Actuator 是什么?

简介: 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 有所帮助,如果你有任何疑问或建议,欢迎留言交流。

目录
相关文章
|
15天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
18天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
10天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
|
22天前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
8天前
|
人工智能 自然语言处理 前端开发
什么?!通义千问也可以在线开发应用了?!
阿里巴巴推出的通义千问,是一个超大规模语言模型,旨在高效处理信息和生成创意内容。它不仅能在创意文案、办公助理、学习助手等领域提供丰富交互体验,还支持定制化解决方案。近日,通义千问推出代码模式,基于Qwen2.5-Coder模型,用户即使不懂编程也能用自然语言生成应用,如个人简历、2048小游戏等。该模式通过预置模板和灵活的自定义选项,极大简化了应用开发过程,助力用户快速实现创意。
|
5天前
|
云安全 存储 弹性计算
|
7天前
|
云安全 人工智能 自然语言处理
|
4天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
332 4
|
4天前
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
【最新版正确姿势】Docker安装教程(简单几步即可完成)
|
10天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。