Spring Boot Actuator 集成实战:构建高效监控体系的完整指南

news/2025/2/25 21:46:22/文章来源:https://www.cnblogs.com/java-note/p/18737349

第一步:引入依赖,为项目注入监控能力

要开始使用 Spring Boot Actuator,首先需要将其依赖引入到你的项目中。这一步非常简单,只需在项目的构建配置文件中添加相应的依赖即可。

如果你使用的是 Maven 构建工具,打开 pom.xml 文件,并在 <dependencies> 节中添加以下代码:

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

对于使用 Gradle 构建工具的项目,你可以在 build.gradle 文件中添加以下依赖:

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

通过添加上述依赖,Spring Boot Actuator 的核心功能将被集成到你的项目中,为后续的监控和管理功能提供支持。这一步是整个集成过程的基础,确保了 Actuator 的各项功能能够正常运行。添加依赖后,你将能够访问 Actuator 提供的默认端点,并开始探索其强大的监控功能。

第二步:配置端点,灵活控制监控信息的暴露范围

Spring Boot Actuator 提供了一系列内置的端点(Endpoints),这些端点是监控和管理应用的核心接口。它们涵盖了健康检查、度量信息、环境配置等多个方面。默认情况下,Actuator 仅暴露了部分端点,例如 /actuator/health/actuator/info,以确保应用的安全性。然而,你完全可以根据自己的需求,灵活地配置哪些端点可以被外部访问。

如果你希望启用所有端点,以便进行全面的监控和管理,可以在 application.propertiesapplication.yml 配置文件中添加以下配置:

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

这种配置方式适合在开发环境或内部测试环境中使用,因为它可以让你快速获取应用的全面信息。然而,在生产环境中,出于安全考虑,通常建议仅暴露必要的端点。例如,如果你只需要监控应用的健康状态和度量信息,可以这样配置:

# 只启用特定端点
management.endpoints.web.exposure.include=health,info,metrics

通过这种方式,你可以精确控制哪些端点可以被外部访问,从而在满足监控需求的同时,最大限度地减少潜在的安全风险。灵活配置端点的暴露范围,是确保应用在不同环境下既能高效监控又能保障安全的关键步骤。

第三步:配置端点安全性,平衡监控需求与应用安全

默认情况下,Spring Boot Actuator 的端点是受保护的,需要通过 Spring Security 进行认证。这种设计确保了只有经过授权的用户或系统才能访问敏感的监控信息。然而,在某些情况下,你可能希望某些端点无需认证即可访问,例如 /actuator/health 端点,它通常用于健康检查,可能需要被外部监控系统(如 Prometheus)定期访问。

如果你希望允许所有用户访问特定的端点,可以在 application.properties 文件中进行如下配置:

# 允许所有用户访问特定端点
management.endpoints.web.exposure.include=health,info
management.endpoint.health.probes.enabled=true
management.health.livenessState.enabled=true
management.health.readinessState.enabled=true

此外,如果你启用了 Spring Security,还需要在安全配置中明确允许访问这些端点。以下是一个简单的 Spring Security 配置示例,展示了如何为 Actuator 端点放行:

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/actuator/**").permitAll() // 允许访问所有 Actuator 端点.anyRequest().authenticated();}
}

通过上述配置,你可以根据实际需求灵活地管理端点的安全性,确保在满足监控需求的同时,不会对应用的安全性造成威胁。在生产环境中,合理配置端点的安全性是保护应用免受未经授权访问的关键措施。

第四步:自定义端点,满足特定监控需求的扩展能力

Spring Boot Actuator 的强大之处不仅在于其丰富的内置端点,还在于它提供了强大的扩展能力,允许开发者根据自己的业务需求创建自定义端点。这使得 Actuator 能够与你的应用紧密结合,提供更具针对性的监控信息。

例如,假设你需要一个自定义端点来返回应用的版本信息或其他特定的业务数据,你可以通过注解的方式轻松实现。以下是一个自定义端点的示例:

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;@Endpoint(id = "custom")
public class CustomEndpoint {@ReadOperationpublic String customOperation() {return "This is a custom endpoint. Application version: 1.0.0";}
}

在定义了自定义端点后,还需要在 application.properties 文件中启用它,以便可以通过 HTTP 接口访问:

# 启用自定义端点
management.endpoints.web.exposure.include=custom

通过这种方式,你可以根据业务需求灵活地扩展 Actuator 的功能,使其能够提供更符合业务需求的监控信息,从而更好地支持应用的运维和管理。自定义端点的创建,是将 Actuator 的通用功能与你的具体业务需求相结合的重要手段。

第五步:配置健康检查,实时掌握应用的健康状态

健康检查是 Spring Boot Actuator 的核心功能之一,它通过 /actuator/health 端点提供应用的健康状态信息。默认情况下,Actuator 提供了一些内置的健康指示器(Health Indicator),例如数据库连接、消息队列、缓存等。这些健康指示器能够自动检测应用依赖的关键组件是否正常运行,并返回相应的健康状态。

然而,对于一些复杂的业务场景,你可能需要自定义健康检查逻辑,以确保应用的健康状态能够真实反映业务运行情况。例如,假设你的应用依赖一个外部的第三方服务,你希望在健康检查中包含对该服务的调用状态检查。你可以通过实现 HealthIndicator 接口来定义自己的健康检查逻辑。以下是一个自定义健康指示器的示例:

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;@Component
public class CustomHealthIndicator implements HealthIndicator {@Overridepublic Health health() {int errorCode = check(); // 自定义检查逻辑if (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}private int check() {// 模拟检查逻辑,例如调用第三方服务return 0; // 返回 0 表示服务正常}
}

在上述代码中,check() 方法是自定义的健康检查逻辑,你可以根据实际需求实现对第三方服务的调用,并根据返回结果判断服务是否正常运行。如果服务调用失败,返回一个非零的错误码,并通过 Health.down() 方法标记应用处于不健康状态;如果服务调用成功,则通过 Health.up() 方法标记应用处于健康状态。

通过自定义健康指示器,你可以将业务逻辑与健康检查紧密结合起来,确保 /actuator/health 端点能够提供更全面、更准确的健康状态信息,从而帮助运维人员快速定位问题并采取相应的措施。自定义健康检查是确保应用在复杂业务环境中稳定运行的重要保障。

第六步:配置度量信息,深入洞察应用的性能表现

除了健康检查,Spring Boot Actuator 还提供了丰富的度量信息(Metrics),这些信息可以帮助你深入了解应用的性能表现和资源使用情况。默认情况下,Actuator 提供了许多内置的度量指标,例如内存使用情况、线程池状态、HTTP 请求指标等。这些度量信息可以通过 /actuator/metrics 端点进行访问,并且可以通过 Micrometer 提供的多种度量注册器(如 Prometheus、Graphite 等)进行外部暴露。

在某些情况下,你可能需要自定义度量信息,以满足特定的监控需求。例如,假设你的应用中有一个关键的业务流程,你希望记录该流程的执行次数或执行时间,以便更好地监控其性能表现。你可以通过 Micrometer 的 MeterRegistry 来定义和记录自定义度量信息。以下是一个自定义度量信息的示例:

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;@Component
public class CustomMetrics {private final MeterRegistry meterRegistry;public CustomMetrics(MeterRegistry meterRegistry) {this.meterRegistry = meterRegistry;}public void recordCustomMetric() {meterRegistry.counter("custom.metric").increment();}
}

在上述代码中,我们通过 MeterRegistry 创建了一个名为 custom.metric 的计数器,并在需要时对其进行了递增操作。这样,每当业务流程执行一次,计数器的值就会增加,从而记录了业务流程的执行次数。你可以在 /actuator/metrics 端点中查看这个自定义度量信息,也可以通过 Prometheus 等工具将其暴露给外部监控系统。

通过自定义度量信息,你可以将业务逻辑中的关键指标纳入到监控体系中,从而更全面地了解应用的运行状态,及时发现潜在的性能问题,并采取优化措施。自定义度量信息的创建,是实现精细化监控和性能优化的关键步骤。

第七步:使用 Prometheus 和 Grafana,构建强大的监控可视化体系

Spring Boot Actuator 与 Prometheus 和 Grafana 的集成,可以进一步提升应用的监控能力,实现对应用的实时监控和性能分析。Prometheus 是一个开源的监控系统,它通过抓取应用暴露的度量信息并存储在本地时序数据库中,从而实现对应用的性能监控。Grafana 则是一个强大的可视化工具,它可以通过连接 Prometheus 数据源,将监控数据以直观的图表形式展示出来,帮助运维人员快速了解应用的运行状态。

要将 Spring Boot Actuator 与 Prometheus 和 Grafana 集成,首先需要在 pom.xml 文件中添加 Prometheus 的依赖:

<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><scope>runtime</scope>
</dependency>

然后在 application.properties 文件中启用 Prometheus 端点:

# 启用 Prometheus 端点
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true

启动应用后,访问 /actuator/prometheus 端点,Prometheus 就可以抓取这些度量信息。接下来,你可以在 Prometheus 中配置抓取任务,将 Actuator 暴露的度量信息定期抓取并存储。最后,通过 Grafana 连接 Prometheus 数据源,并创建仪表盘,将监控数据以图表形式展示出来。

通过这种方式,你可以构建一个完整的监控可视化体系,实现对应用的全方位监控。这不仅有助于运维人员快速发现和解决问题,还可以通过历史数据的分析,为应用的优化和扩展提供数据支持。Prometheus 和 Grafana 的结合,为 Actuator 提供了一个强大的可视化平台,使得监控数据更加直观易懂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889775.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于信息论的高动态范围图像评价算法matlab仿真

1.程序功能描述 基于信息论的高动态范围图像评价算法matlab仿真,利用一种自然图像的概率模型对图像的熵与成像动态范围之间的关系进行了数值模拟,得到了具有普遍意义上的理想成像动态范围的计算公式,公式指出了对自然景物完善成像所需的最大动态范围;给出了图像熵与动态…

BloomFilter详解

目录BloomFilter 原理:问题引入:黑名单管理程序哈希、哈希函数BloomFilter :3.4 BloomFilter 的缺陷、改进:代码实现黑名单blacklist.py:普通的实现方法set.py:哈希函数hash.py:4.4 BloomFilter 实现方法bloomfilter.py: BloomFilter 原理: ​ 我们将从哈希函数开始…

【ABP】项目示例(4)——领域服务

领域服务 在上一章节中,已经完成了仓储的设计,在这一章节中,实现领域服务,即业务的核心逻辑 领域服务主要处理特定领域的业务逻辑,对内协调和整合聚合根与各个实体的业务关系,对外作为业务的边界,供应用服务组合来提供完整复杂的功能 规约 在名称为General.Backend.Doma…

YOLOv10 解析与地平线 征程 6模型量化

一,YOLOv10 解析 1.简介 近些年来,研究人员对 YOLO 的架构设计、优化目标、数据增强策略等进行了探索,取得了显著进展。然而,后处理对非极大值抑制(NMS)的依赖阻碍了 YOLO 的端到端部署,并对推理延迟产生不利影响。此外,YOLO 中各个组件的设计缺乏全面彻底的检查,导致…

SemanticKernel之Chat

去年写过几过几篇关于SemanticKernel的文章,由于正式发布的版本与之前的版本变化较大,加上前的东京《生成式AI应用开发》活动,想把演示的Demo逐一分享出来,的以再次开启SemanticKernel系统。下面是一个Chat的例子,用户提问,如果本地有固定数据能对应,直接返回,如果没有…

7、添加特效

去除画面logo 复制一份 拖动模糊特效到复制的片段中 右键分离音频或者快捷键【ctrl+shift+s】 删除音频 添加原创特效,特效随机 有音乐的去除音乐 适当拖动放大 调整透明度 开幕特效 三秒 调整参数后,复制双份 画面特效和人物特效二选一 画面特效需要修改参数

Prompt升级

前两篇关于Prompt的文章分别从提示词规则建议和具体框架角度说明了一下Prompt的使用技巧,接下来可以说是对框架式提示词的的进一步升级——结构化提示词。 结构化定义: 对信息进行组织,使其遵循特定的模式和规则,从而方便有效理解信息。 结构化提示词语法:这个结构支持 Mark…

Spring复习-事务

事务概述 Spring事务编程概述 事务是开发中必不可少的东西,使用JDBC开发时,我们使用connnection对事务进行控制,使用MvBatis时,我们使用SqlSession对事务进行控制,缺点显而易见,当我们切换数据库访问技术时,事务控制的方式总会变化,Spring 就将这些技术基础上,提供了统…

Prompt进阶

在Prompt入门里,我们分享了OpenAI官方给出的提示词建议,但这些建议基本上是指导性的,方向性的,概念性的,虽然对我们编写提示词有很大帮助,但究竟我们的提示词好还是不好,效率怎么性,很大程度上要看每个人的理解,和提示词输出。那么有没有一个可操作性的,方法论的,谁…

P1174 打砖块

链接 https://www.luogu.com.cn/problem/P1174 思路刚开始的思路:设置dp[i][j]:前i列使用了j颗子弹,那么递推dpi,j=max(dpi,j,dpi-1,k+maxj-k),然后统计在第i列使用了j-k颗子弹会多出来多少颗,把这些遍历加到前面,见代码。喜提70pts。但是搞不懂哪里错了。 看了评论区的dp:70…

redis - [06] redis-benchmark性能测试

题记部分 001 || 参数含义 002 || 测试100个并发,100000个请求 启动redis-server redis-server /etc/redis.conf 进行性能测试 redis-benchmark -h localhost -p 6379 -c 100 -n 100000

百万架构师第四十三课:Nginx:Nginx 应用实战|JavaGuide

百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 课程目标:Nginx 反向代理功能配置 Nginx 负载均衡实战 Nginx 动静分离配置 Nginx 配置文件分析 Nginx 多进程模型原理 Nginx 高可用集群实战反向代理​ 我们把请求发送到 proxy (代理服务…