SpringBoot实现项目健康检查与监控

作者:Peter__Pan 时间:2023-10-28 19:14:25 

Spring Boot 最主要的特性就是AutoConfig(自动配置),而对于我们这些使用者来说也就是各种starter,

Spring Boot-Actuator 也提供了starter,为我们自动配置,在使用上我们只需要添加starter到我们的依赖中,然后启动项目即可。


<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 给我们提供默认的监控结果,包含 磁盘检测和数据库检测。


{
"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 :


@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 健康信息。


{
"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 来提供程序运行时一些信息的展示:


@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 ,返回结果如下:


{
"username": "xxx",
"userdomain": "DESKTOP-6EAN1H4",
"computername": "DESKTOP-6EAN1H4"
}

我们在为Spring Boot应用添加actuator后,期望的health接口返回结果应该是类似下面的结果:


{
status: "UP",
diskSpace:
{
status: "UP",
total: 250182889472,
free: 31169568768,
threshold: 10485760
},
db:
{
status: "UP",
database: "H2",
hello: 1
}
}

如果只是返回了status


{
status: "UP"
}

则需要为应用新增配置,以yml配置文件为例,需要添加如下配置:


management:
security:
enabled: false
endpoints:
health:
sensitive: false

management.endpoint.health.show-details=always

总结

以上所述是小编给大家介绍的SpringBoot实现项目健康检查与监控网站的支持!

来源:https://www.jianshu.com/p/30d3521fbc28

标签:spring,boot,健康检查,监控
0
投稿

猜你喜欢

  • Java服务假死之生产事故的排查与优化问题

    2022-01-12 04:03:37
  • Unity调取移动端的麦克风进行录音并播放

    2023-06-04 22:18:05
  • Android实现随机圆形云标签效果

    2023-02-23 02:10:42
  • 深入探究Java线程的状态与生命周期

    2021-10-01 17:44:10
  • Android开发中ImageLoder加载网络图片时将图片设置为ImageView背景的方法

    2021-12-14 14:58:38
  • SpringMVC文件上传 多文件上传实例

    2023-05-01 02:25:31
  • C#基于HttpWebRequest实现发送HTTP请求的方法分析

    2022-01-04 22:51:03
  • Java实现字符串匹配的示例代码

    2023-04-17 05:24:35
  • C#实现将Email地址转成图片显示的方法

    2022-09-26 09:35:36
  • Android 6.0以上权限拒绝打开权限设置界面的解决方法

    2021-11-07 01:59:35
  • spring boot metrics监控指标使用教程

    2022-01-10 08:42:16
  • Android ListView万能适配器实例代码

    2022-03-06 02:19:50
  • C#操作Excel相关方法总结

    2021-06-22 12:00:48
  • List集合对象中按照不同属性大小排序的实例

    2023-06-07 14:27:41
  • SpringBoot之使用Redis实现分布式锁(秒杀系统)

    2022-09-30 15:45:08
  • C#图片切割、图片压缩、缩略图生成代码汇总

    2022-01-20 07:51:26
  • javaweb中Filter(过滤器)的常见应用

    2023-07-10 23:57:36
  • Spring Boot 单元测试JUnit的实践

    2023-08-29 02:02:15
  • jenkins构建go及java项目的方法

    2022-09-26 12:39:01
  • Java静态泛型使用方法实例解析

    2023-03-31 00:41:35
  • asp之家 软件编程 m.aspxhome.com