【SpringBoot】定制⾃⼰的 Health Indicator

news2025/7/19 6:21:37

Spring Boot ⾃带的 Health Indicator

⽬的

  • 检查应⽤程序的运⾏状态

状态

  • DOWN - 503
  • OUT_OF_SERVICE - 503
  • UP - 200
  • UNKNOWN - 200

机制

  • 通过 HealthIndicatorRegistry 收集信息
  • HealthIndicator 实现具体检查逻辑

配置项

  • management.health.defaults.enabled=true|false
  • management.health…enabled=true
  • management.endpoint.health.show-details=never | whenauthorized | alway

在这里插入图片描述

⾃定义 Health Indicator

⽅法

  • 实现 HealthIndicator 接⼝
  • 根据⾃定义检查逻辑返回对应 Health 状态
    • Health 中包含状态和详细描述信息

Health Information

官网地址:https://docs.spring.io/spring-boot/docs/2.5.6/reference/html/actuator.html#actuator.endpoints.health

可以使用运行状况信息(health information)检查正在运行的应用程序的状态。它经常被监控软件用于在生产系统崩溃时发出警报。health endpoint公开的信息取决于management.endpoint.health.show-detailsmanagement.endpoint.health.show-components属性,可配置为以下值之一:

NameDescription
never从不显示详细信息。
when-authorized详细信息只显示给授权用户。可使用management.endpoint.health.roles配置授权角色。
always详细信息将显示给所有用户。

缺省值为never。当用户处于一个或多个endpoints的角色中时,就认为用户已获得授权。如果端点没有配置角色(默认),则所有经过身份验证的用户都被认为是经过授权的。可以使用management.endpoint.health.roles属性配置角色。

如果已保护了应用程序并希望使用always,则安全配置必须允许已验证和未验证的用户访问运行状况端点。

运行状况信息从HealthContributorRegistry(默认情况下,ApplicationContext中定义的所有HealthContributor实例)的内容中收集。Spring Boot包括许多自动配置的HealthContributors,您也可以编写自己的HealthContributors

HealthContributor可以是HealthIndicatorCompositeHealthContributorHealthIndicator提供实际的运行状况信息,包括状态。CompositeHealthContributor提供其他HealthContributors的组合。总的来说,contributors形成了一个树形结构来表示整个系统的健康状况。

默认情况下,最终的系统运行状况由StatusAggregator派生,它根据有序的状态列表对每个HealthIndicator中的状态进行排序。排序列表中的第一个状态用作总体运行状况状态。如果没有HealthIndicator返回StatusAggregator已知的状态,则使用UNKNOWN状态。

HealthContributorRegistry可用于在运行时注册和取消注册health indicators

Auto-configured HealthIndicators

下面的HealthIndicators在适当的时候由Spring Boot自动配置。您也可以通过配置management.health.key.enabled来启用/禁用所选指标。通过使用下表中列出的key

KeyNameDescription
cassandraCassandraDriverHealthIndicator检查Cassandra数据库是否已启动。
couchbaseCouchbaseHealthIndicator检查Couchbase集群是否已启动。
dbDataSourceHealthIndicator检查是否可以获得到数据源的连接。
diskspaceDiskSpaceHealthIndicator检查磁盘空间不足。
elasticsearchElasticsearchRestHealthIndicator检查Elasticsearch集群是否已启动。
hazelcastHazelcastHealthIndicator检查Hazelcast服务器是否已启动。
influxdbInfluxDbHealthIndicator检查InfluxDB服务器是否已启动。
jmsJmsHealthIndicator检查JMS代理是否已启动。
ldapLdapHealthIndicator检查LDAP服务器是否已启动。
mailMailHealthIndicator检查邮件服务器是否启动。
mongoMongoHealthIndicator检查Mongo数据库是否已启动。
neo4jNeo4jHealthIndicator检查Neo4j数据库是否已启动。
pingPingHealthIndicator总是用UP响应。
rabbitRabbitHealthIndicator检查Rabbit服务器是否启动。
redisRedisHealthIndicator检查Redis服务器是否启动。
solrSolrHealthIndicator检查Solr服务器是否启动。

可以通过设置management.health.defaults.enabled属性来禁用它们。

有其他HealthIndicators可用,但默认情况下不启用:

KeyNameDescription
livenessstateLivenessStateHealthIndicator暴露“Liveness”应用程序可用性状态。
readinessstateReadinessStateHealthIndicator暴露“Readiness”应用程序可用性状态。

自定义 HealthIndicators

要提供定制的运行状况信息,可以注册实现HealthIndicator接口的Spring bean。您需要提供health()方法的实现并返回一个 Health 响应。Health 响应应包括一个状态,并可选地包括要显示的其他详细信息。下面的代码显示了一个HealthIndicator实现的示例:

@Component
public class MyHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        int errorCode = check();
        if (errorCode != 0) {
            return Health.down().withDetail("Error Code", errorCode).build();
        }
        return Health.up().build();
    }

    private int check() {
        // perform some specific health check
        return ...
    }

}

给定HealthIndicator的标识符是不带HealthIndicator后缀的bean的名称(如果它存在的话)。在前面的示例中,health informationentry时my中可用。

除了Spring Boot的预定义Status类型外,Health还可以返回一个表示新系统状态的自定义状态。在这种情况下,还需要提供StatusAggregator接口的自定义实现,或者必须使用management.endpoint.health.status.order配置属性来配置默认实现。

例如,假设在您的一个HealthIndicator实现中使用了一个code为FATAL的新Status。要配置严重性顺序,请将以下属性添加到应用程序属性中:

management.endpoint.health.status.order=fatal,down,out-of-service,unknown,up

响应中的HTTP状态码反映总体运行状况状态。缺省情况下,OUT_OF_SERVICEDOWN对应为503。任何未映射的运行状况状态(包括UP)都映射到200。如果通过HTTP访问health endpoint,还可能需要注册自定义状态映射。配置自定义映射将禁用DOWNOUT_OF_SERVICE的默认映射。如果您希望保留默认映射,则必须在任何自定义映射旁边显式地配置它们。例如,以下属性将FATAL映射到503(服务不可用),并保留DOWNOUT的默认映射:

management.endpoint.health.status.http-mapping.down=503
management.endpoint.health.status.http-mapping.fatal=503
management.endpoint.health.status.http-mapping.out-of-service=503

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

下表显示了内置statuses的默认状态映射:

StatusMapping
DOWNSERVICE_UNAVAILABLE (503)
OUT_OF_SERVICESERVICE_UNAVAILABLE (503)
UPNo mapping by default, so HTTP status is 200
UNKNOWNNo mapping by default, so HTTP status is 200

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】Reids的哨兵机制

【学习笔记】Reids的哨兵机制 文章目录【学习笔记】Reids的哨兵机制前言什么是哨兵机制?如何判断主库是否挂掉?主从库的切换和消息的通知前言 什么是哨兵机制? 哨兵机制(sentinel) 是Redis解决高可用的一种解决方案&a…

视频会议解决方案-最新全套文件

视频会议解决方案-最新全套文件一、建设背景二、建设思路业务挑战三、建设方案四、获取 - 视频会议全套最新解决方案合集一、建设背景 随着中国经济的迅速发展,很多企业的发展也进入快车道,分支机构越来越多,形成了遍布全国范围甚至全球范围…

Echarts:惊艳的Map

大家在网上看天气预报的时候应该就看到过在中国地图上显示不同省份的温度,并根据温度的高低显示不同的颜色,又或者看到各个省份的新冠肺炎新增人数,根据不同的新增人数显示不同的颜色之类的图像。这些,使用echarts中的map就可以实…

python实现灰色关联法(GRA)

原文:https://mp.weixin.qq.com/s/Uuri-FqRWk3V5CH7XrjArg 1 灰色关联分析法简介 白色系统是指信息完全明确的系统,黑色系统是指信息不完全明确的系统,而灰色系统是介于白色与黑色系统之间的系统,是指系统内部信息和特征是部分已…

IDEA设置和相关快捷键记录汇总

IDEA设置和相关快捷键 前言 Java 开发 现在基本都是使用 IDEA 作为开发工具,IDEA 有很多设置和常用的快捷键,熟悉之后能更好的提高开发效率,这里总结了下从慕课网的内容 开发工具IDEA从入门到爱不释手-慕课网 (imooc.com),摘录做…

Kafka - 04 Java客户端实现消息发送和订阅

1. Kafka测试命令行操作 1. 主题命令行操作 在上一节中我们安装了Kafka单机环境和集群环境,这一节来测试下Linux环境安装Kafka后的命令行操作。 我们之前在用Windows环境安装Kafka Kafka应用场景|基础架构|Windows安装|命令行操作 和命令行操作时,讲到…

哪种类型的蓝牙耳机好?超高性价比蓝牙耳机推荐

朋友让我推荐蓝牙耳机的时候,总是喜欢问哪款蓝牙耳机的性能更强,想要直接入手那款性能更强的蓝牙耳机,以此节省对比的时间。但是用户自行进行对比的步骤,显然是不能省的,所以推荐这四款高性价比的蓝牙耳机,…

华为云桌面Workspace,让你的办公更加舒适惬意

在各行各业转型的过程中,企业对于线上办公的需求不断增多,越来越需要一个云办公平台,为企业更好实现数字化网络化办公降本增效。正逢佳节之际,在此为各大企业推荐一个高效的办公神器——华为云桌面Workspace。相信作为企业决策者的…

详解设计模式:抽象工厂模式

工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过工厂父类定义负责创建产品的公共接口,子类负责生产具体对象。可以理解为简单工程模式的升级,解决简单工厂模式的弊端。 ~ 本篇内容包括:关于…

Executors-四种创建线程的手段

1 Executors.newCachedThreadPool() 从构造方法可以看出,它创建了一个可缓存的线程池。当有新的任务提交时,有空闲线程则直接处理任务,没有空闲线程则创建新的线程处理任务,队列中不储存任务。线程池不对线程池大小做限制&#x…

ESP三相SVPWM控制器的simulink仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB程序 1.算法描述 SVPWM则以三相的合成矢量为出发点,其基本思想为:在数学意义上的abc轴也好,αβ轴也好,其产生的电压都应该等于dq轴合成的那个电压。那么只要让…

swiper在动态创建dom过程中的问题:数据从后端请求回来后加载到页面上,dom加载完发现swiper没用了

怎么动态创建div标签: 要轮播的数据是后端返回的,所以我们要发ajax请求接收数据; 下面演示的是已经接收回来的数据,动态创建div标签: setTimeout(()>{var list ["aaa","bbb","ccc&quo…

【Redis】从计算机组成原理开始讲解为什么会出现Redis

文章目录前置知识数据库的出现Redismemcache与redis的区别前置知识 首先需要知道的一个常识就是:数据是存放在磁盘里面的。 而磁盘有两个指标: 寻址:表示找到对应的数据所需要的时间,ms带宽:表示单位时间可以有多少个…

Python排序:冒泡排序,选择排序,插入排序,希尔排序

编程中的交换元素逻辑: # python中交换元素 有内置的三方底层逻辑 可以直接交换 a 2 b 3 a, b b, a print(a) # a为3# 其他编程需要有一个中间的变量来转换 变量设为temp a 2 b 3 temp a a b b temp print(a) # a为3 -----冒泡排序----- 相邻…

openfeign原理

openfeign原理 EnableFeignClients注解启用Feign客户端,通过Import注解导入了FeignClientsRegistrar类加载额外的Bean。FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar接口,在Spring启动过程中会调用registerBeanDefinitions方法注册BeanDe…

自动化项目倍加福WCS-PG210E使用GSD文件

1.硬件电气连接 WCS-PG210E WCS3B WCS2B Pin 颜色 Pin 颜色 24V UB 1 BN棕色 2 WH白色 0V GND 3 BU蓝色 3 BU蓝色 RS485- RS485- 4 BK黑色 1 BN棕色 RS485 RS485 2 WH白色 4 BK黑色 保留 5 GY灰色 5 GY灰色 2. 安装W…

Nginx (4):nginx动静分离

什么是动静分离不解释了,网上说的很清楚,这里只说配置 目的 02虚拟机运行一个tomcat,处理动态请求,而对静态文件的访问则交给01虚拟机。操作 下面是01虚拟机的配置文件内容: server {listen 82;listen [::]:82;#root /…

六、nacos环境隔离、服务配置拉取和多环境配置共享

文章目录一、环境隔离-namespace1.namespace理解2.创建命名空间二、Nacos-实现配置管理三、nacos-实现服务配置拉取1.非热更新2.热更新:四、实现多环境配置共享1.开发环境:2.测试环境3.结论一、环境隔离-namespace 1.namespace理解 Nacos中服务存储和数…

Element Plus 组件库相关技术:7. 组件实现的基本流程及 Icon 组件的实现

前言 本章节我们将要实现 Icon 组件,Icon 组件应该是所有组件里面最简单的一个组件了,所以我们由简入深,循序渐进进行学习。Icon 组件虽然简单,但它却包含了一个组件的全部基础流程,通过实现 Icon 组件进行理解 Eleme…

疫情失业之下,测试的未来在哪里

前天和测试圈子里一个朋友聊了关于今年求职招聘市场行情和个人认知以及发展副业的话题。 聊起了今年的求职招聘行情,他说他们公司已经裁了一波人了,估计年底还会有一波裁员。 今年的市场冷的有点吓人,在这么下去,他也会担心自己…