springboot2.0actuator的健康检查

author author     2023-05-01     480

关键词:

参考技术A

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

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

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

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

具体的使用方法:

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

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

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

今天重点说一下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 ,获取的信息如下:

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

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

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

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

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

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

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

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

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

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

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

关于女性健康问题方面的论文大家都可以投的国家级刊物是哪个?

中外女性健康研究简介:女性健康研究》[1] 杂志是教育部主管,武汉大学主办,中外女性健康杂志社编辑出版的综合性医学学术期刊,是国家级医学优秀科技期刊、中国学术期刊综合评价数据库统计源期刊、中国期刊全文数... 查看详情

EKS:kubernetes 集群中的不健康节点

】EKS:kubernetes集群中的不健康节点【英文标题】:EKS:Unhealthynodesinthekubernetescluster【发布时间】:2021-04-1223:02:33【问题描述】:使用terraform在AWSEKS上预置节点组时出现错误。错误:等待创建EKS节点组(xxx)时出错:NodeCreationFailure:Unh... 查看详情

秒表检定仪和日差检定仪建标方案以及设备选用

...间检定仪检定规程和JJG488-2018瞬时日差测量仪检定规程中的要求,对秒表的检定,时间检定仪和瞬时日差检定仪满足的规范内容,以及秒表,时间检定仪和日差检定仪应用于测试的方法做了简单的说明,方便于搭建秒表检定,时... 查看详情

在低容错业务场景下落地微服务的实践经验

“健康体检是一个低容错的场景,用户到医院体检,由于IT原因导致无法完成预约的项目,会对用户体验造成极大的影响。”——禾连健康CTO邓志豪禾连健康成立于2014年,是一家从体检场景切入的健康管理服务公... 查看详情

秒表检定仪和瞬时日差检定仪使用介绍

...针式秒表、数字式电秒表、数字式毫秒仪、计时器等产品的时间误差。日差检定仪是用来检定电子秒表、智能电表、电脑主板、电子秤、时钟设备、电子收款机、石英钟表、温控器、计时器、定时器等产品的时间误差。秒表检定... 查看详情

数码相机控制点的自动定位检校

为简化控制场相机检校中的人工量测控制点的繁琐工作,提高相机检校精度,本文提出一种方法:只需均匀量测少量控制点的像方坐标获取相机检校初始参数,便可通过动态模板匹配实现单影像相机检校的控制点高精度自动定位检校... 查看详情

人脸检測中几种框框大小的选择~

...应用极为广泛,内部细节也偏多,尤其是涉及到几种类型的框,这几种框的大小之前有着千丝万缕的联系,对检測性能的好坏影响程度大小不一。本篇文章基于自己在人脸检測方面的经验,说说对这些框之间关系的一些理解。如... 查看详情

检索子包类的资源

】检索子包类的资源【英文标题】:Retrievingresourcesforasubpackageclass【发布时间】:2015-06-0710:52:24【问题描述】:我使用java的时间不长,所以我不确定还要寻找什么。我希望有人能指出我正确的方向。目标:我想使用一个查找表,... 查看详情

使用自动布局检索子视图的正确位置

】使用自动布局检索子视图的正确位置【英文标题】:RetrievetherightpositionofasubViewwithauto-layout【发布时间】:2017-11-0300:23:28【问题描述】:我想以编程方式将视图放置在情节提要中创建的所有子视图的中心。在情节提要中,我有... 查看详情

混检阳性概率的计算(贝叶斯定理的一个应用例)(代码片段)

目录1.混检阳性概率的计算2.混管阳性时你阳性的概率有多大?2.1贝叶斯分析结果的解释1.混检阳性概率的计算        目前核酸混检的基本做法是十混一,如果阳性人群分布完全随机,那么做十混一混检为阳性的... 查看详情

opencv2马拉松第17圈——边缘检測(canny边缘检測)

...OpenCVCanny函数进行边缘检測掌握Canny算法基本理论分享Java的实现葵花宝典在此之前,我们先阐述一下canny检測的算法.总共分为4部分.(1)处理噪声一般用高斯滤波.OpenCV使用例如以下核(2)计算梯度幅值先用例如以下Sobel算子计算出水... 查看详情

cocos2d-x碰撞检測

...bsp;  假设不适用Box2D物理引擎。那么要进行Cocos2d-x的碰撞检測那我们的方法往往就是进行“矩形和点”、“矩形和矩形”这样粗略的碰撞检測。我们一般採取开启scheduleUpdate定时器。然后重写update函数进行每一帧都进行碰... 查看详情

三维标定与三维重建

...检校场标志点图像坐标提取方法非量测数码相机检校方法的研究数码相机室内三维检校场的精密测量技术-于胜文一种新型的数码相机室内检校场的建立方法>>>三维检校场标定:标签制作,打印,重建二维平面棋盘标定:... 查看详情

检查拉取请求是不是与目标分支保持同步

...持同步【发布时间】:2017-01-1615:59:56【问题描述】:我们的项目正在使用受保护的分支,并且要求PR的基础分支与目标分支保持同步才能合并。我们也在使用Jenkins来构建PR的未合并头部,因为我们使用的插件会在目标分支发生变... 查看详情

NSFetchedResultsController, NSPredicate 以对多关系检索子对象

...3-08-3019:41:09【问题描述】:我试图弄清楚我是否使用正确的谓词来获取具有以下模型和代码的FRC的给定Category对象的Item对 查看详情

如何在使用 sklearns 的 LabelEncoder() 时检查分配给哪个标签的值?

】如何在使用sklearns的LabelEncoder()时检查分配给哪个标签的值?【英文标题】:HowcanIcheckwhatvalueisassignedtowhatlabelwhileusingsklearns\'LabelEncoder()?【发布时间】:2020-06-0211:52:53【问题描述】:我正在将分类数据转换为用于机器学习目的的... 查看详情

gesturedetector封装手势检測上下滑动

项目中须要检測ListView的上滑下滑隐藏顶部View控件,之前在网上也有非常多实现案例。在git上发现个封装非常不错的样例,记录下来。GestureDetector是一个手势检測类,内部有个SimpleOnGestureListener手势监听类。定义一个抽象类SimpleD... 查看详情

用于检索子进程输出的python代码(linux ps命令)

】用于检索子进程输出的python代码(linuxps命令)【英文标题】:pythoncodeforretrievingoutputofsubprocess(linuxpscommand)【发布时间】:2018-12-1722:36:35【问题描述】:我想创建python3代码,通过运行linux命令“ps”来过滤系统进程。这是我当前... 查看详情