spring boot 框架是spring framework发展史上一次质的飞跃,用过都说好。它不仅仅是简化了繁琐的配置文件,提高了开发效率,整合了开发中常用的各种组件,优雅地处理了它们之间的版本兼容性问题,等等。除了以上这些优点还有本文将重点介绍的监控,Spring boot框架自带全方位的监控,这样,做spring boot应用的监控简直是太方便了。

00 前言

在当下流行的Service Mesh架构中,由于Spring boot框架的种种优点,它特别适合作为其中的应用开发框架。

说到Service Mesh的微服务架构,主要特点是将服务开发和服务治理分离开来,然后再结合容器化的Paas平台,将它们融合起来,这依赖的都是互相之间默契的配合。也就是说各自都暴露出标准的接口,可以通过这些接口互相交织在一起。

Service Mesh的架构设计中的要点之一,就是全方位的监控,因此一般我们选用的服务开发框架都需要有方便又强大的监控功能支持。在Spring boot应用中开启监控特别方便,监控面也很广,还支持灵活定制。

01 Actuator的使用方法

在Spring boot应用中,要实现可监控的功能,依赖的是 spring-boot-starter-actuator 这个组件。它提供了很多监控和管理你的spring boot应用的HTTP或者JMX端点,并且你可以有选择地开启和关闭部分功能。当你的spring boot应用中引入下面的依赖之后,将自动的拥有审计、健康检查、Metrics监控功能。

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

具体的使用方法:

  1. 引入上述的依赖jar;
  2. 通过下面的配置启用所有的监控端点,默认情况下,这些端点是禁用的;
management:endpoints:web:exposure:include: "*"

“*”号代表启用所有的监控端点,可以单独启用,例如,healthinfometrics等。

  1. 通过actuator/+端点名就可以获取相应的信息。

一般的监控管理端点的配置信息,如下:

management:endpoints:web:exposure:include: "*"server:port: 10111servlet:context-path: /ssl:enabled: falseendpoint:health:show-details: always

上述配置信息仅供参考,具体须参照官方文档,由于spring boot的版本更新比较快,配置方式可能有变化。

02 健康检查

今天重点说一下Actuator监控管理中的健康检查功能,随时能掌握线上应用的健康状况是非常重要的,尤其是现在流行的容器云平台下的应用,它们的自动恢复和扩容都依赖健康检查功能。

当我们开启health的健康端点时,我们能够查到应用健康信息是一个汇总的信息,访问http://127.0.0.1:10111/actuator/health时,我们获取到的信息是{"status":"UP"},status的值还有可能是 DOWN。

要想查看详细的应用健康信息需要配置management.endpoint.health.show-details 的值为always,配置之后我们再次访问http://127.0.0.1:10111/actuator/health,获取的信息如下:

{"status": "UP","details": {"diskSpace": {"status": "UP","details": {"total": 250685575168,"free": 172252426240,"threshold": 10485760}},"redis": {"status": "UP","details": {"version": "3.2.11"}},"db": {"status": "UP","details": {"database": "Oracle","hello": "Hello"}}}
}

从上面的应用的详细健康信息发现,健康信息包含磁盘空间、redis、DB,启用监控的这个spring boot应用确实是连接了redis和oracle DB,actuator就自动给监控起来了,确实是很方便、很有用。

经过测试发现,details中所有的监控项中的任何一个健康状态是DOWN,整体应用的健康状态也是DOWN

management.endpoint.health.show-details的值除了always之外还有when-authorizednever,默认值是never

03 健康检查的原理

Spring boot的健康信息都是从ApplicationContext中的各种HealthIndicator
Beans中收集到的,Spring boot框架中包含了大量的HealthIndicators的实现类,当然你也可以实现自己认为的健康状态。

默认情况下,最终的spring boot应用的状态是由HealthAggregator汇总而成的,汇总的算法是:

  1. 设置状态码顺序:setStatusOrder(Status.DOWN, Status.OUT_OF_SERVICE, Status.UP, Status.UNKNOWN);
  2. 过滤掉不能识别的状态码。
  3. 如果无任何状态码,整个spring boot应用的状态是 UNKNOWN
  4. 将所有收集到的状态码按照 1 中的顺序排序。
  5. 返回有序状态码序列中的第一个状态码,作为整个spring boot应用的状态。

源代码请参见:org.springframework.boot.actuate.health.OrderedHealthAggregator

Spring boot框架自带的 HealthIndicators 目前包括:

Name Description
CassandraHealthIndicator Checks that a Cassandra database is up.
DiskSpaceHealthIndicator Checks for low disk space.
DataSourceHealthIndicator Checks that a connection to DataSource can be obtained.
ElasticsearchHealthIndicator Checks that an Elasticsearch cluster is up.
InfluxDbHealthIndicator Checks that an InfluxDB server is up.
JmsHealthIndicator Checks that a JMS broker is up.
MailHealthIndicator Checks that a mail server is up.
MongoHealthIndicator Checks that a Mongo database is up.
Neo4jHealthIndicator Checks that a Neo4j server is up.
RabbitHealthIndicator Checks that a Rabbit server is up.
RedisHealthIndicator Checks that a Redis server is up.
SolrHealthIndicator Checks that a Solr server is up.

你可以通过management.health.defaults.enabled这个配置项将它们全部禁用掉,也可以通过management.health.xxxx.enabled将其中任意一个禁用掉。

04 自定义 HealthIndicator 健康检查

有时候需要提供自定义的健康状态检查信息,你可以通过实现HealthIndicator的接口来实现,并将该实现类注册为spring bean。你需要实现其中的health()方法,并返回自定义的健康状态响应信息,该响应信息应该包括一个状态码和要展示详细信息。例如,下面就是一个接口HealthIndicator的实现类:

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;@Component
public class MyHealthIndicator implements HealthIndicator {@Overridepublic Health health() {int errorCode = check(); // perform some specific health checkif (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}}

另外,除了Spring boot定义的几个状态类型,我们也可以自定义状态类型,用来表示一个新的系统状态。在这种情况下,你还需要实现接口 HealthAggregator ,或者通过配置 management.health.status.order 来继续使用HealthAggregator的默认实现。

例如,在你自定义的健康检查HealthIndicator的实现类中,使用了自定义的状态类型FATAL,为了配置该状态类型的严重程度,你需要在application的配置文件中添加如下配置:

management.health.status.order=FATAL, DOWN, OUT_OF_SERVICE, UNKNOWN, UP

在做健康检查时,响应中的HTTP状态码反应了整体的健康状态,(例如,UP 对应 200, 而 OUT_OF_SERVICEDOWN 对应 503)。同样,你也需要为自定义的状态类型设置对应的HTTP状态码,例如,下面的配置可以将 FATAL 映射为 503(服务不可用):

management.health.status.http-mapping.FATAL=503

如果你需要更多的控制,你可以定义自己的 HealthStatusHttpMapper bean。

下面是内置健康状态类型对应的HTTP状态码列表:

Status Mapping
DOWN SERVICE_UNAVAILABLE (503)
OUT_OF_SERVICE SERVICE_UNAVAILABLE (503)
UP No mapping by default, so http status is 200
UNKNOWN No mapping by default, so http status is 200

05 结束

本文主要介绍了Spring boot中提供的应用健康检查功能的使用方法和原理,顺带介绍了一点 Actuator 的内容。主要的内容来自spring boot 2.0.1的官方文档 和 源码,还有一些自己的想法,希望多多支持。

作者:rabbitGYK
链接:https://www.jianshu.com/p/1aadc4c85f51
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Spring boot 2.0 Actuator 的健康检查相关推荐

  1. Spring Boot 2.0官方文档之 Actuator

    https://blog.csdn.net/alinyua/article/details/80009435 前言:本文翻译自Spring Boot 2.0.1.RELEASE官方文档,该Spring ...

  2. 学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator

    前言 主要是完成微服务的监控,完成监控治理.可以查看微服务间的数据处理和调用,当它们之间出现了异常,就可以快速定位到出现问题的地方. springboot - version: 2.0 正文 依赖 m ...

  3. Spring Boot 2.0 新特性

    作者:贺卓凡 原文:https://mp.weixin.qq.com/s/EWmuzsgHueHcSB0WH-3AQw 以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8 ...

  4. Spring Boot 2.0 新特性和发展方向

    以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...

  5. Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档) 9-16

    9. 数据 Spring Boot与多个数据技术集成,包括SQL和NoSQL. 9.1. SQL数据库 Spring Framework提供扩展支持用于与SQL数据工作,从使用JdbcTemplate ...

  6. Spring Boot 2.0.0参考手册_中文版

    Spring Boot参考文档 第一部分:Spring Boot文档 1. 关于文档 Sring参考文档可以通过html,pdf和epub 三种形式得到.最新的文档可以从docs.spring.io/ ...

  7. 【译】Spring Boot 2.0 官方迁移指南

    前提 希望本文档将帮助您把应用程序迁移到 Spring Boot 2.0. 在你开始之前 首先,Spring Boot 2.0 需要 Java 8 或更高版本.不再支持 Java 6 和 7 了. 在 ...

  8. Spring Boot 2.0 迁移指南

    点击上方"朱小厮的博客",选择"设为星标" 回复"666"获取新整理的1000+GB资料 前提 本文档将帮助您把应用程序迁移到 Spring ...

  9. Spring Cloud F Spring Boot 2.0 版本升级说明书

    Spring Boot 2.0 需要 Java 8 或更高版本.不再支持 Java 6 和 7 了 在 Spring Boot 2.0 中,许多配置属性被重新命名/删除,开发人员需要更新 依赖版本 以 ...

  10. InfoQ就Spring Boot 2.0 GA版发布采访了项目牵头人Phil Webb

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 广受期待的Spring Boot 2.0近期由Spring的托管企业Pivotal发布.这是 ...

最新文章

  1. Netflix这公司居然没有运维,也没有CTO
  2. 用python画出小人发射爱心_小人发射爱心biu简笔画表情-biu小人简笔画表情动态完整版-东坡下载...
  3. 3d饼图 vue_这是我见过最优雅的Vue图片轮播插件——Vue-Awesome-Swiper
  4. Windows平台kafka环境的搭建
  5. MX130+python3.7.6+CUDA 10.0+CUDNN 7.4.2+TensorFlow-gpu安装
  6. Django之ORM操作
  7. 调整PowerDesigner各种字体大小
  8. s8050三极管经典电路_电路板维修基本经验分享。
  9. [20150304]唯一索引与阻塞.txt
  10. Ubuntu安装Chromium
  11. [转载] java中抽象类的定义和使用
  12. keras load model 并保存特定层 (pop) 的权重save new_model
  13. 华硕b365安装服务器系统,华硕b365主板装win10系统及bios设置教程(uefi+gpt)
  14. 分享39个大数据可视化工具(数据分析必备)
  15. RTL8111E datasheet中提到的术语
  16. IIS发布网站,如此简单
  17. Uml 类图 stereotype的值含义,该怎么解决
  18. 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15] .
  19. 信锐交换机配置_信锐无线AC,响应网监规定,助力连接安全
  20. MapReduce分布式计算和编程原理总结

热门文章

  1. moss2007安装部署历程 .
  2. 线性MMSE检波和ZF检波
  3. 关于Spring Boot报错:LoggerFactory is not a Logback LoggerContext but Logback is on the classpath
  4. python中文分词算法_基于Python语言的中文分词技术的研究
  5. beyond compare怎么设置不比较文件修改时间?
  6. 专访京东孙海波:大牛架构师养成记及电商供应链中区块链技术的应用(转)...
  7. 中国自动上弦手表市场趋势报告、技术动态创新及市场预测
  8. 纯css实现简单的页面视差滚动
  9. k8s ceph rbd动态挂载
  10. 为防止办公用计算机上的数据,2019年9月计算机一级Ms Office提分练习题(总)