SpringBoot 项目健康检查与监控(转)
前言
You build it,You run it, 当我们编写的项目上线后,为了能第一时间知晓该项目是否出现问题,常常对项目进行健康检查及一些指标进行监控。
Spring Boot-Actuator 就是帮助我们监控我们的Spring Boot 项目的。
使用
Spring Boot 最主要的特性就是AutoConfig(自动配置),而对于我们这些使用者来说也就是各种starter,
Spring Boot-Actuator 也提供了starter,为我们自动配置,在使用上我们只需要添加starter到我们的依赖中,然后启动项目即可。
1 2 3 4 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> |
常用Endpoint
Spring Boot-actuator,提供了许多有用的EndPoint,对Spring Boot应用提供各种监控,下面说一下我常用的EndPoint:
/health 应用的健康状态
/configprops 获取应用的配置信息,因为Spring Boot 可能发布时是单独的Jar包,配置文件可能包含其中, 当我们需要检查配置文件时可以使用 ConfigpropsEndPoint 进行查看一些配置是否正确。
/trace 最近几次的http请求信息
HealthEndPoint
当我们访问 http://localhost:8088/health 时,可以看到 HealthEndPoint 给我们提供默认的监控结果,包含 磁盘检测和数据库检测。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "status" : "UP" , "diskSpace" : { "status" : "UP" , "total" : 398458875904 , "free" : 315106918400 , "threshold" : 10485760 }, "db" : { "status" : "UP" , "database" : "MySQL" , "hello" : 1 } } |
其实看 Spring Boot-actuator 源码,你会发现 HealthEndPoint 提供的信息不仅限于此,org.springframework.boot.actuate.health 包下 你会发现 ElasticsearchHealthIndicator、RedisHealthIndicator、RabbitHealthIndicator 等
也就是 HealthEndPoint 也提供 ES, Redis 等组件的健康信息。
自定义Indicator 扩展 HealthEndPoint
看源码 其实 磁盘和数据库健康信息就是 DiskSpaceHealthIndicator、DataSourceHealthIndicator 来实现的,当我们对一些我们自定义的组件进行监控时, 我们也可以实现个Indicator :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Component public class User implements HealthIndicator { /** * user监控 访问: http://localhost:8088/health * * @return 自定义Health监控 */ @Override public Health health() { return new Health.Builder().withDetail( "usercount" , 10 ) //自定义监控内容 .withDetail( "userstatus" , "up" ).up().build(); } } |
这时我们再次访问: http://localhost:8088/health 这时返回的结果如下,包含了我们自定义的 User 健康信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | { "status" : "UP" , "user" : { "status" : "UP" , "usercount" : 10 , "userstatus" : "up" }, "diskSpace" : { "status" : "UP" , "total" : 398458875904 , "free" : 315097989120 , "threshold" : 10485760 }, "db" : { "status" : "UP" , "database" : "MySQL" , "hello" : 1 } } |
自定义EndPoint
其实除了扩展 HealthEndPoint 来添加一些健康检查, 我们也可以自定定义一些EndPoint 来提供程序运行时一些信息的展示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | @Configuration public class EndPointAutoConfig { @Bean public Endpoint<Map<String, Object>> customEndPoint() { return new SystemEndPoint(); } } @ConfigurationProperties (prefix= "endpoints.customsystem" ) public class SystemEndPoint extends AbstractEndpoint<Map<String, Object>> { public SystemEndPoint(){ super ( "customsystem" ); } @Override public Map<String, Object> invoke() { Map<String,Object> result= new HashMap<>(); Map<String, String> map = System.getenv(); result.put( "username" ,map.get( "USERNAME" )); result.put( "computername" ,map.get( "COMPUTERNAME" )); result.put( "userdomain" ,map.get( "USERDOMAIN" )); return result; } } |
访问 http://localhost:8088/customsystem 来查看我们自定义的EndPoint ,返回结果如下:
1 2 3 4 5 | { "username" : "xxx" , "userdomain" : "DESKTOP-6EAN1H4" , "computername" : "DESKTOP-6EAN1H4" } |
转自:https://www.cnblogs.com/javanoob/p/springboot_healthcheck.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2015-02-07 math.h函数库
2015-02-07 POJ1269:Intersecting Lines(判断两条直线的关系)