SpringBoot集成Actuator健康指示器health
1.说明
本文详细介绍Actuator提供的HealthIndicators,
即健康指示器的配置使用,
利用自动配置的健康指标,
检查正在运行的应用程序的状态,
以及自定义健康指标的方法。
监控软件通过调用健康指示器接口,
在生产系统出现故障时发出提醒。
2.查看健康指示器
访问health端点:
http://localhost:8011/actuator/health
返回结果:
{
"status": "UP"
}
3.显示详细信息
health端点公开的信息可以配置,
通过management.endpoint.health.show-details属性,
可以配置为以下值之一:
名称 | 描述 |
---|---|
never | 详细信息从不显示。 |
when-authorized | 详细信息仅显示给授权用户,可以使用management.endpoint.health.roles配置授权角色。 |
always | 详细信息显示给所有用户。 |
默认值为never,
所以上面返回结果显示的信息很少。
当用户处于端点的一个或多个角色时,
该用户被视为已被授权。
如果端点没有配置授权角色(默认),
则所有经过身份验证的用户都被视为已授权,
可以使用management.endpoint.health.roles配置授权角色。
下面设置show-details属性为always,
显示所有的详细信息:
management:
endpoint:
health:
show-details: always
重启后再次访问health端点:
{
"status": "UP",
"components": {
"diskSpace": {
"status": "UP",
"details": {
"total": 2000397791232,
"free": 831475470336,
"threshold": 10485760,
"exists": true
}
},
"ping": {
"status": "UP"
}
}
}
可以看到健康指示器下面多出来的两个指标,
分别为diskSpace磁盘空间和ping检查。
4.自动配置HealthIndicators
在应用程序使用到相关功能的情况下,
Spring Boot会自动配置以下HealthIndicators,
这样访问health端点的时候就能看到对应指标:
名称 | 描述 |
---|---|
CassandraHealthIndicator | 检查Cassandra数据库是否已启动。 |
CouchbaseHealthIndicator | 检查Couchbase群集是否启动。 |
DiskSpaceHealthIndicator | 检查磁盘空间是否不足。 |
DataSourceHealthIndicator | 检查是否可以获取到DataSource的连接。 |
ElasticsearchHealthIndicator | 检查Elasticsearch群集是否启动。 |
InfluxDbHealthIndicator | 检查InfluxDB服务器是否启动。 |
JmsHealthIndicator | 检查JMS代理是否启动。 |
MailHealthIndicator | 检查邮件服务器是否启动。 |
MongoHealthIndicator | 检查Mongo数据库是否已启动。 |
Neo4jHealthIndicator | 检查Neo4j服务器是否启动。 |
RabbitHealthIndicator | 检查Rabbit服务器是否启动。 |
RedisHealthIndicator | 检查Redis服务器是否启动。 |
SolrHealthIndicator | 检查Solr服务器是否启动。 |
5.配置DataSource指标
下面演示配置DataSource指标的方法,
同样的其他指标在引入相关功能后会自动配置。
在引入数据库相关的starter之后,
就会自动配置DataSource指标。
在pom.xml中新增MySQL数据库依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
然后在application.yml中新增数据库配置:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://10.21.6.30:3306/demodb
username: demo
password: demo123456
重启后再次访问health端点:
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"validationQuery": "isValid()"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 2000397791232,
"free": 831475470336,
"threshold": 10485760,
"exists": true
}
},
"ping": {
"status": "UP"
}
}
}
可以看到多出来了db指标,
连接的是MySQL数据库,
并且数据库连接是正常的。
故意将数据库的密码配置错误,
重启后再次访问health端点:
{
"status": "DOWN",
"components": {
"db": {
"status": "DOWN",
"details": {
"error": "org.springframework.jdbc.CannotGetJdbcConnectionException:
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException:
Access denied for user 'demo'@'10.21.6.30' (using password: YES)"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 2000397791232,
"free": 831475466240,
"threshold": 10485760,
"exists": true
}
},
"ping": {
"status": "UP"
}
}
}
发现db指标是DOWN状态了。
6.启用和禁用指标
默认所有指标都是启用的,
可以通过设置management.health.defaults.enabled属性来禁用,
设置为false就是禁用所有指标,
然后可以单独启用某个指标。
下面演示禁用所有指标,
仅启用db指标:
management:
endpoint:
health:
show-details: always
health:
defaults:
enabled: false
db:
enabled: true
重启后再次访问health端点,
就只能看到db指标了:
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "MySQL",
"validationQuery": "isValid()"
}
}
}
}
如果应用程序使用了数据库相关功能,
但是不想对外开放db指标,
可以单独禁用db指标:
management:
endpoint:
health:
show-details: always
health:
defaults:
enabled: true
db:
enabled: false
7.自定义HealthIndicators方法1
要使用自定义健康信息,
可以注册实现HealthIndicator接口的Spring beans。
提供health()方法的实现并返回Health响应。
Health响应应包括状态,
并可以增加其他详细信息。
以下代码演示了一个HealthIndicator的实现,
名称为MyHealthIndicator,
这样指标名称就是my,
注意实现类的名称格式必须为XXXHealthIndicator:
package com.yuwen.spring.actuator.actuate.health;
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 {
private static int num = 0;
@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() {
num++;
return num % 2;
}
}
重启后访问health端点,
检查结果为异常:
{
"status": "DOWN",
"components": {
"my": {
"status": "DOWN",
"details": {
"Error Code": 1
}
}
}
}
再次访问health端点,
检查结果为正常:
{
"status": "UP",
"components": {
"my": {
"status": "UP"
}
}
}
如果只想显示my指标的结果:
可以修改application.yml,
禁用所有的内置指标:
management:
endpoint:
health:
show-details: always
health:
defaults:
enabled: false
8.修改自定义指标的名称
如果不想修改实现类的名称,
可以通过Component修改指标名称:
@Component("my1")
public class MyHealthIndicator implements HealthIndicator
这样指标名称就从my改为my1了:
{
"status": "DOWN",
"components": {
"my1": {
"status": "DOWN",
"details": {
"Error Code": 1
}
}
}
}
{
"status": "UP",
"components": {
"my1": {
"status": "UP"
}
}
}
9.自定义HealthIndicators方法2
通过继承AbstractHealthIndicator抽象类,
重写doHealthCheck方法,
而不是直接实现HealthIndicator接口,
功能比第一种要强大一点点,
默认的DataSourceHealthIndicator、
RedisHealthIndicator都是这种方法,
代码回调中还做了异常的处理。
以下代码演示了一个AbstractHealthIndicator的继承类,
名称为My2HealthIndicator,
这样指标名称就是my2:
package com.yuwen.spring.actuator.actuate.health;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health.Builder;
import org.springframework.stereotype.Component;
@Component
public class My2HealthIndicator extends AbstractHealthIndicator {
private static int num = 0;
@Override
protected void doHealthCheck(Builder builder) throws Exception {
int errorCode = check();
if (errorCode != 0) {
builder.down().withDetail("code", errorCode).withDetail("num", num).build();
return;
}
builder.up().withDetail("code", errorCode).withDetail("num", num).build();
}
// 这里模拟检查,设置为一次成功一次失败
private int check() {
num++;
return num % 2;
}
}
重启后访问health端点,
检查结果为异常:
{
"status": "DOWN",
"components": {
"my1": {
"status": "DOWN",
"details": {
"Error Code": 1
}
},
"my2": {
"status": "DOWN",
"details": {
"code": 1,
"num": 1
}
}
}
}
再次访问health端点,
检查结果为正常:
{
"status": "UP",
"components": {
"my1": {
"status": "UP"
},
"my2": {
"status": "UP",
"details": {
"code": 0,
"num": 2
}
}
}
}
10.参考文档
Spring Boot Actuator: Production-ready Features
Spring Boot (27) actuator服务监控与管理
SpringBoot集成Actuator健康指示器health的更多相关文章
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成actuator模块的基本使用
© 版权声明:本文为博主原创文章,转载请注明出处 1. 版本 SpringBoot:2.0.0.RELEASE 2. 集成 SpringBoot集成actuator模块非常简单,只需要引入actuat ...
- SpringBoot集成Actuator监控管理
1.说明 本文详细介绍Spring Boot集成Actuator监控管理的方法, 基于已经创建好的Spring Boot工程, 然后引入Actuator依赖, 介绍监控管理相关功能的使用. Sprin ...
- SpringBoot集成Actuator端点配置
1.说明 Actuator端点可以监控应用程序并与之交互. Spring Boot包括许多内置的端点, 比如health端点提供基本的应用程序运行状况信息, 并允许添加自定义端点. 可以控制每个单独的 ...
- SpringBoot之actuator
在springBoot中集成actuator可以很方便的管理和监控应用的状态. 暴露的Restful接口有: HTTP方法 路径 描述 鉴权 GET /autoconfig 查看自动配置的使用情况 t ...
- Spring Boot Actuator:健康检查、审计、统计和监控(转)
Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...
- 0120 springboot集成Mybatis和代码生成器
在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子 ...
- Spring Boot Actuator:健康检查、审计、统计和监控
Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...
- SpringBoot系列: Actuator监控
Sprng Boot 2 actuator变动加大, 网上很多资料都都已经过期. ============================配置项============================ ...
随机推荐
- 转 MessageDigest来实现数据加密
转自 https://www.cnblogs.com/androidsuperman/p/10296668.html MessageDigest MessageDigest 类为应用程序提供信息摘要算 ...
- Spring Cloud声明式调用Feign负载均衡FeignClient详解
为了深入理解Feign,下面将从源码的角度来讲解Feign.首先来看看FeignClient注解@FeignClient的源码,代码如下: FeignClient注解被@Target(ElementT ...
- my40_MySQL锁概述之意向锁
本文在锁概述的基础上,通常实验举例,详细地介绍了意向锁的原理. 锁范围 全局锁(global lock)表锁(table lock)行锁 (row lock) ROW LOCK的粒度LOCK_REC ...
- i++ 和 ++i 探究原理
先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...
- html上传图片的预览功能实现
表单代码(仅取上传文件部分): <input class="selectImg" style="position:absolute;opacity: 0;width ...
- HDC2021技术分论坛:进程崩溃/应用卡死,故障频频怎么办?
作者:jiwenqiang,DFX技术专家 提到开发一个产品,我们通常首先想到的是要实现什么样的功能,但是除了功能之外,非功能属性也会很大程度上影响一个产品的体验效果,比如不定时出现的应用卡死.崩溃 ...
- ES6解构赋值的简单使用
相较于常规的赋值方式,解构赋值最主要的是'解构'两个字,在赋值的过程中要清晰的知道等号右边的结构. 先简单地看一下原来的赋值方式. var a=[1,2] 分析一下这句代码的几个点: (1)变量申明和 ...
- Android: Client-Server communication
Refer to: http://osamashabrez.com/simple-client-server-communication-in-android/ I was working of an ...
- 开源企业平台Odoo 15社区版之项目管理应用模块功能简介
项目管理无论是各类证书的认证,如PMP.软考高级的信息系统项目管理师.中级的系统集成项目管理工程师等,还是企业实践都有着广泛的实际应用中,至今还是处于热门的行业,合格的或优化的项目经理还是偏少,对于I ...
- k8s-statefulset
1. 简介 StatefulSet 是用来管理有状态应用的工作负载Api对象. StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符. 和 Dep ...