欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-20 08:14:34
spring boot 最主要的特性就是autoconfig(自动配置),而对于我们这些使用者来说也就是各种starter, spring boot-actuator 也...

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

当我们访问 时,可以看到 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();
 }
}

这时我们再次访问: 这时返回的结果如下,包含了我们自定义的 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;
 }
}

访问 来查看我们自定义的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实现项目健康检查与监控,希望对大家有所帮助

上一篇:

下一篇: