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的更多相关文章

  1. springboot集成Actuator

    Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...

  2. SpringBoot集成actuator模块的基本使用

    © 版权声明:本文为博主原创文章,转载请注明出处 1. 版本 SpringBoot:2.0.0.RELEASE 2. 集成 SpringBoot集成actuator模块非常简单,只需要引入actuat ...

  3. SpringBoot集成Actuator监控管理

    1.说明 本文详细介绍Spring Boot集成Actuator监控管理的方法, 基于已经创建好的Spring Boot工程, 然后引入Actuator依赖, 介绍监控管理相关功能的使用. Sprin ...

  4. SpringBoot集成Actuator端点配置

    1.说明 Actuator端点可以监控应用程序并与之交互. Spring Boot包括许多内置的端点, 比如health端点提供基本的应用程序运行状况信息, 并允许添加自定义端点. 可以控制每个单独的 ...

  5. SpringBoot之actuator

    在springBoot中集成actuator可以很方便的管理和监控应用的状态. 暴露的Restful接口有: HTTP方法 路径 描述 鉴权 GET /autoconfig 查看自动配置的使用情况 t ...

  6. Spring Boot Actuator:健康检查、审计、统计和监控(转)

    Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...

  7. 0120 springboot集成Mybatis和代码生成器

    在日常开发中,数据持久技术使用的架子使用频率最高的有3个,即spring-jdbc , spring-jpa, spring-mybatis.详情可以看我之前的一篇文章spring操作数据库的3个架子 ...

  8. Spring Boot Actuator:健康检查、审计、统计和监控

    Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...

  9. SpringBoot系列: Actuator监控

    Sprng Boot 2 actuator变动加大, 网上很多资料都都已经过期. ============================配置项============================ ...

随机推荐

  1. OpenStack之七: compute服务(端口8774)

    注意此处的bug,参考o版 官网地址 https://docs.openstack.org/nova/stein/install/controller-install-rdo.html 控制端配置 # ...

  2. When does compiler create default and copy constructors in C++?

    In C++, compiler creates a default constructor if we don't define our own constructor (See this). Co ...

  3. 【面试】【Linux】【Web】基础概念

    1. HTTP https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol 2. TCP handshake https://en.wikipe ...

  4. 收集linux网络配置信息的shell脚本

    此脚本已在CentOS/ RHEL和Fedora Linux操作系统下进行测试过.可用于当前网络配置信息. 代码: #!/bin/bash # HWINF=/usr/sbin/hwinfo IFCFG ...

  5. 加密时java.security.InvalidKeyException: Illegal key size or default parameters解决办法

    需 Java几乎各种常用加密算法都能找到对应的实现.因为美国的出口限制,Sun通过权限文件(local_policy.jar.US_export_policy.jar)做了相应限制.因此存在一些问题: ...

  6. css clip样式 属性功能及作用

    clip clip 在学前端的小伙伴前,估计是很少用到的,代码中也是很少看见的,但是,样式中有这样的代码,下面让我们来讲讲他吧! 这个我也做了很久的开发没碰到过这个属性,知道我在一个项目中,有一个功能 ...

  7. 2.使用Lucene开发自己的搜索引擎–indexer索引程序中基本类介绍

    (1)Directory:Directory类描述了Lucene索引的存放位置,它是一个抽象,其子类负责具体制定索引的存储路径.FSDirectory.open方法来获取真实文件在文件系统中的存储路径 ...

  8. Redis哨兵 部署和配置

    目录 一.哨兵简介 哨兵介绍 哨兵原理 二.哨兵部署 环境介绍 哨兵配置 三.使用验证 一.哨兵简介 哨兵介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具,其已经被集成在 ...

  9. 数据挖掘实战 - 天池新人赛o2o优惠券使用预测

    数据挖掘实战 - o2o优惠券使用预测 一.前言 大家好,家人们.今天是2021/12/14号.上次更新是2021/08/29.上篇文章中说到要开两个专题,果不其然我鸽了,这一鸽就是三个多月.今天,我 ...

  10. [BUUCTF]PWN——[BJDCTF 2nd]r2t4

    [BJDCTF 2nd]r2t4 附件 步骤 例行检查,64位,开启了canary和nx 64位ida载入,检索字符串的时候发现了后面函数,shell_addr=0x400626 main函数 可以溢 ...