Spring Boot Actuator:让应用更健康,监控不再难!

举报
bug菌 发表于 2025/02/25 16:54:28 2025/02/25
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 前言  当你把一个应用从开发阶段推向生产环境时,保持应用的健康状态变得至关重要。尤其...

🏆本文收录于「滚雪球学SpringBoot」专栏,手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

  当你把一个应用从开发阶段推向生产环境时,保持应用的健康状态变得至关重要。尤其是大型应用,运行时的性能瓶颈、健康问题、资源耗尽等问题随时可能发生。此时,如果没有合适的监控手段,问题可能在不知不觉中变得严重,导致应用出现故障或性能下降。Spring Boot Actuator 就是在这个关键时刻登场,它是一个功能强大的工具,可以帮助你实时监控应用的运行状态,暴露重要的应用指标,甚至支持自定义监控端点和与外部工具(如Prometheus和Grafana)集成。让我们来看看如何借助Spring Boot Actuator来保障应用的健康运行。💡

1. Actuator简介:给你的应用插上“监控翅膀”🕊️

  Spring Boot Actuator 是 Spring Boot 提供的一组生产环境特性,使得开发者能够轻松地进行应用监控和管理。Actuator 可以暴露一系列内置的 HTTP 端点,帮助你实时了解应用的健康状态、性能指标、环境信息、应用配置等关键数据。而且,Spring Boot Actuator 的实现方式高度灵活,支持根据需求进行扩展和自定义,极大地提高了开发和运维的效率。

  Actuator 并不是一个新概念,它在 Spring Boot 的早期版本中就已经推出,随着版本的更新和功能的增强,它变得越来越强大,成为开发和生产环境监控中不可或缺的工具。

常见功能

  • 健康检查(Health Checks):确认应用的关键组件是否正常运行,及时发现问题。
  • 性能指标(Metrics):获取应用的内存、CPU、请求响应时间等指标,帮助你优化性能。
  • 审计(Auditing):记录和跟踪系统中发生的关键事件。
  • 应用配置(Environment):暴露当前应用的配置和环境变量,帮助调试和配置管理。

2. 启用和使用 Actuator:安装、配置,轻松启用!🔧

  Spring Boot Actuator 提供了一个开箱即用的监控解决方案,你只需要在项目中引入相应的依赖即可开始使用。接下来,我们来看一下如何启用和配置 Actuator。

2.1 添加依赖

  在使用 Spring Boot Actuator 前,你需要在 pom.xml(如果使用 Maven)或者 build.gradle(如果使用 Gradle)文件中添加相应的依赖。

Maven:

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

Gradle:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

  添加依赖后,Spring Boot 会自动启用 Actuator,并提供一些默认的监控端点,帮助你直接查看应用的健康状态、性能指标等。默认情况下,所有端点都被禁用或仅对本地访问开放,增强安全性。

2.2 配置 Actuator

  Spring Boot Actuator 默认提供一组端点,例如 /actuator/health/actuator/metrics 等,若要启用这些端点,你需要在 application.propertiesapplication.yml 配置文件中进行相关配置。

示例配置(在 application.properties 中):

# 启用所有 Actuator 端点
management.endpoints.web.exposure.include=*

# 配置 Actuator 端点的访问路径
management.endpoints.web.base-path=/actuator

  这样,所有 Actuator 端点都会暴露在 /actuator 路径下,你可以通过 http://localhost:8080/actuator/health 来访问健康检查端点。

2.3 基本端点访问

一旦启用 Actuator 后,你可以通过以下常见端点查看应用状态:

  • /actuator/health:应用的健康状态。
  • /actuator/metrics:应用的性能指标。
  • /actuator/env:应用的环境信息。
  • /actuator/info:应用的基本信息(可以在代码中自定义该信息)。
  • /actuator/loggers:查看和修改日志级别。

访问这些端点,你可以轻松了解应用的运行状况,及时发现和排查问题。

3. Actuator 提供的监控端点:一站式查看应用健康🏥

  Spring Boot Actuator 默认提供了多个有用的端点,帮助开发者监控和管理应用。接下来我们详细介绍几个常用的端点及其作用。

3.1 /actuator/health:健康检查,给你的应用做个“体检”💓

  这个端点返回应用的健康状态信息。它会检查应用的各个关键组件(如数据库、磁盘空间等)是否正常工作。如果一切正常,返回的状态为 UP;如果检测到问题,状态为 DOWN

示例请求:

GET http://localhost:8080/actuator/health

返回内容(示例):

{
  "status": "UP",
  "details": {
    "diskSpace": {
      "status": "UP",
      "total": 5000000000,
      "free": 2000000000,
      "threshold": 10485760
    },
    "db": {
      "status": "UP"
    }
  }
}
  • status:应用的健康状态,UP 表示健康,DOWN 表示不健康。
  • details:返回的详细健康信息,可能包括数据库、磁盘空间、内存等的状态。

3.2 /actuator/metrics:性能监控,让应用的“运动”看得见🏃‍♀️

  /actuator/metrics 端点提供了关于应用的各种性能数据,包括内存使用、请求数量、响应时间等。通过它,你可以实时监控应用的负载情况,确保应用的性能在可接受的范围内。

示例请求:

GET http://localhost:8080/actuator/metrics

返回内容(示例):

{
  "names": [
    "jvm.memory.used",
    "jvm.threads.live",
    "system.cpu.usage"
  ]
}
  • jvm.memory.used:JVM使用的内存量。
  • jvm.threads.live:当前活跃的线程数。
  • system.cpu.usage:系统CPU的使用率。

3.3 /actuator/env:查看应用的环境配置🔧

  /actuator/env 端点提供了应用的环境信息,包括所有的配置属性、系统属性等。这个端点通常用于调试和排查配置问题,帮助你快速查看应用的所有配置。

示例请求:

GET http://localhost:8080/actuator/env

返回内容(示例):

{
  "properties": {
    "spring.datasource.url": "jdbc:mysql://localhost:3306/mydb",
    "spring.datasource.username": "root",
    "spring.datasource.password": "root"
  }
}

3.4 /actuator/loggers:查看日志级别,快速定位问题日志📝

  /actuator/loggers 端点允许你查看和修改日志级别。你可以实时改变日志级别来排查问题,特别是当你不确定问题的根源时,调试级别的日志非常有帮助。

示例请求:

GET http://localhost:8080/actuator/loggers

返回内容(示例):

{
  "levels": [
    "OFF",
    "ERROR",
    "WARN",
    "INFO",
    "DEBUG",
    "TRACE"
  ]
}

  你还可以通过 POST 请求来动态修改日志级别,例如将某个包的日志级别设置为 DEBUG

4. 自定义 Actuator 端点:个性化监控,专属你的需求🔧

  虽然 Spring Boot Actuator 提供了许多默认的端点,但你可能需要根据自己的需求来扩展功能。Spring Boot 允许你创建自定义的 Actuator 端点,以便暴露更多个性化的信息。

4.1 创建自定义端点

  你可以通过继承 AbstractEndpoint 来实现自定义端点,或者使用 @Endpoint 注解来创建新的监控端点。例如,我们可以创建一个名为 /actuator/myCustomEndpoint 的端点,返回一些定制化的信息。

示例代码

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

@Component
@Endpoint(id = "myCustomEndpoint")
public class MyCustomEndpoint {

    @ReadOperation
    public String getInfo() {
        return "This is my custom endpoint!";
    }
}

  上述代码定义了一个新的 Actuator 端点 myCustomEndpoint,当你访问 /actuator/myCustomEndpoint 时,会返回 "This is my custom endpoint!" 的字符串。

4.2 启用自定义端点

  通过简单的注解和配置,Spring Boot 会自动将你定义的自定义端点添加到 Actuator 中,供你在应用中使用。

5. 集成 Prometheus 与 Grafana:打造更高级的监控仪表盘📊

  虽然 Actuator 提供了丰富的默认端点,但对于生产环境中的大规模应用,可能需要更加灵活和强大的监控工具。这时,Prometheus 和 Grafana 的结合就显得尤为重要,它们是目前最受欢迎的开源监控方案,能够帮助你更好地展示和分析应用数据。

5.1 集成 Prometheus

  Prometheus 是一个强大的开源监控系统,特别适用于时序数据的收集和查询。你可以通过 Spring Boot Actuator 集成 Prometheus 来收集应用的各种监控指标。

步骤:

  1. 添加 Prometheus 依赖

pom.xml 文件中添加 Prometheus 的支持。

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
  1. 配置 Prometheus 配置文件

  确保 Actuator 暴露的 /actuator/prometheus 端点可以被 Prometheus 服务器访问。你需要修改配置文件启用这个端点:

management.endpoints.web.exposure.include=prometheus
  1. 配置 Prometheus 服务

  在 Prometheus 的配置文件中,添加对 /actuator/prometheus 的抓取配置。

scrape_configs:
  - job_name: 'spring-boot-actuator'
    scrape_interval: 10s
    static_configs:
      - targets: ['localhost:8080']
  1. Grafana 配置

  安装并配置 Grafana,添加 Prometheus 作为数据源。然后你可以在 Grafana 中创建仪表盘,实时查看 Spring Boot 应用的性能数据。

6. 总结:Spring Boot Actuator 让监控更轻松!🎉

  通过本章节的学习,相信你已经掌握了 Spring Boot Actuator 的基本用法及其如何帮助我们进行应用监控和管理。从启用 Actuator 到了解常用端点,再到如何创建自定义端点,Actuator 给我们提供了强大的监控能力。加上 Prometheus 和 Grafana 的集成,你可以让应用的监控更加可视化、智能化,帮助你实时掌控应用健康状况。

  如果你对 Actuator 的更多高级功能有兴趣,别忘了深入探索!未来的项目开发中,记得使用 Actuator 这个小助手,它将帮助你节省很多排查问题和优化性能的时间。📈

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

✨️ Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。