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

 更新时间:2018年06月04日 10:48:57   作者:Peter__Pan  
这篇文章主要介绍了SpringBoot实现项目健康检查与监控,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

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实现项目健康检查与监控,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 自定义SpringBoot的白标错误页面的操作方法

    自定义SpringBoot的白标错误页面的操作方法

    Spring Boot的白标错误页面是在应用程序出现错误时(如404或500 HTTP状态码)自动生成的默认错误页面,下面小编给大家分享如何自定义SpringBoot的白标错误页面,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • java多态的向上转型的概念及实例分析

    java多态的向上转型的概念及实例分析

    在本篇内容里小编给大家整理的是一篇关于java多态的向上转型的概念及实例分析,对此有兴趣的朋友们可以跟着学习下。
    2021-05-05
  • 图解Spring Security 中用户是如何实现登录的

    图解Spring Security 中用户是如何实现登录的

    这篇文章主要介绍了图解Spring Security 中用户是如何实现登录的,文中通过示例代码和图片介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • springboot扫描自定义的servlet和filter代码详解

    springboot扫描自定义的servlet和filter代码详解

    本文是一篇根据作者工作经历总结出来的关于springboot扫描自定义的servlet和filter代码详解的文章,小编觉得非常不错,这里给大家分享下,和朋友们一起学习,进步。
    2017-10-10
  • 关于Java Guava ImmutableMap不可变集合源码分析

    关于Java Guava ImmutableMap不可变集合源码分析

    这篇文章主要介绍Java Guava不可变集合ImmutableMap的源码分析的相关资料,需要的朋友可以参考下面具体的文章内容
    2021-09-09
  • Java实现MD5加密及解密的代码实例分享

    Java实现MD5加密及解密的代码实例分享

    如果对安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自带的MessageDigest类就提供了支持,这里就为大家带来Java实现MD5加密及解密的代码实例分享:
    2016-06-06
  • Java中关键字final finally finalize的区别介绍

    Java中关键字final finally finalize的区别介绍

    这篇文章主要给大家分享的是 Java中final,finally,finalize 到底有什么区别,文章围绕final,finally,finalize的相关资料展开详细内容,具有一定的参考的价值,需要的朋友可以参考一下
    2022-04-04
  • springboot整合rabbitmq的示例代码

    springboot整合rabbitmq的示例代码

    本篇文章主要介绍了springboot整合rabbitmq的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • SpringCloud微服务多应用脚手架的搭建与部署方式

    SpringCloud微服务多应用脚手架的搭建与部署方式

    这篇文章主要介绍了SpringCloud微服务多应用脚手架的搭建与部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java中的传值与传引用实现过程解析

    Java中的传值与传引用实现过程解析

    这篇文章主要介绍了java中的传值与传引用实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论