Spring Boot Actuator自定义健康检查教程

网友投稿 1881 2022-12-25

Spring Boot Actuator自定义健康检查教程

Spring Boot Actuator自定义健康检查教程

健康检查是Spring Boot Actuator中重要端点之一,可以非常容易查看应用运行至状态。本文在前文的基础上介绍如何自定义健康检查。

1. 概述

本节我们简单说明下依赖及启用配置,展示缺省健康信息。首先需要引入依赖:

compile("org.springframework.boot:spring-boot-starter-actuator")

现在通过http://localhost:8080/actuator/health端点进行验证:

{"status":"UP"}

缺省该端点返回应用中很多组件的汇总健康信息,但可以修改属性配置展示详细内容:

management:

endpoint:

health:

show-details: always

现在再次访问返回结果如下:

{

"status": "UP",

"components": {

"diskSpace": {

"status": "UP",

"details": {

"total": 214748360704,

"free": 112483500032,

"threshold": 10485760,

"exists": true

}

},

"ping": {

"status": "UP"

}

}

}

查看DiskSpaceHealthIndicatorProperties文件的源码:

@ConfigurationProperties(prefix = "management.health.diskspace")

public class DiskSpaceHealthIndicatorProperties {

/**

* Path used to compute the available disk space.

*/

private File path = new File(".");

/**

* Minimum disk space that should be available.

*/

private DataSize threshold = DataSize.ofMegabytes(10);

public File getPath() {

return this.path;

}

public void setPath(File path) {

this.path = path;

}

public DataSize getThreshold() {

return this.threshold;

}

public void setThreshold(DataSize threshold) {

Assert.isTrue(!threshold.isNegative(), "threshold must be greater than or equal to 0");

this.threshold = threshold;

}

}

上面结果显示当前项目启动的路径 . ,报警值 为10M ,这些属性都可以通过配置进行修改。

2. 预定义健康指标

上面json响应显示“ping”和“diskSpace”检查。这些检查也称为健康指标,如果应用引用了数据源,Spring会增加db健康指标;同时“diskSpace”是缺省配置。

Spring Boot包括很多预定义的健康指标,下面列出其中一部分:

DataSourceHealthIndicator

MongoHealthIndicator

Neo4jHealthIndicator

CassandraHealthIndicator

RedisHealthIndicator

CassandraHealthIndicator

RabbitHealthIndicator

CouchbaseHealthIndicator

DiskSpaceHealthIndicator (见上面示例)

ElasticsearchHealthIndicator

InfluxDbHealthIndicator

JmsHealthIndicator

MailHealthIndicator

SolrHealthIndicator

如果在Spring Boot应用中使用Mongo或Solr等,则Spring Boot会自动增加相应健康指标。

3. 自定义健康指标

Spring Boot提供了一捆预定义健康指标,但并没有阻止你增加自己的健康指标。一般有两种自定义类型检查:

单个健康指标组件和组合健康指标组件。

3.1 自定义单个指标组件

自定义需要实现HealthIndicator接口并重新health()方法,同时增加@Component注解。假设示例应用程序与服务A(启动)和服务B(关闭)通信。如果任一服务宕机,应用程序将被视为宕机。因此,我们将写入两个运行状况指标。

@Component

public class ServiceAHealthIndicator implements HealthIndicator {

private final String message_key = "Service A";

@Override

public Health health() {

if (!isRunningServiceA()) {

return Health.down().withDetail(message_key, "Not Available").build();

}

return Health.up().withDetail(message_key, "Available").build();

}

private Boolean isRunningServiceA() {

Boolean isRunning = true;

// Logic Skipped

return isRunning;

}

}

@Component

public class ServiceBHealthIndicator implements HealthIndicator {

private final String message_key = "Service B";

@Override

public Health health() {

if (!isRunningServiceB()) {

return Health.down().withDetail(message_key, "Not Available").build();

}

return Health.up().withDetail(message_key, "Available").build();

}

private Boolean isRunningServiceB() {

Boolean isRunning = false;

// Logic Skipped

return isRunning;

}

}

现在,我们看到健康监控响应中增加的指标。ServerA状态是UP,ServiceB是DOWN,因此整个监控检测状态为DOWN.

{

"status": "DOWN",

"components": {

"diskSpace": {

"status": "UP",

"details": {

"total": 214748360704,

"free": 112483229696,

"threshold": 10485760,

"exists": true

}

},

"ping": {

"status": "UP"

},

"serviceA": {

"status": "UP",

"details": {

"Service A": "Available"

}

},

"serviceB": {

"status": "DOWN",

"details": {

"Service B": "Not Available"

}

}

}

}

3.2 自定义组合健康检查

ZEnNpC

前面示例很容易查看各个指标各自的状态。但有时需要基于几个指标查看资源的状态,则需要使用 HealthContributor ,该接口没有定义方法,仅用于标记。如果一个服务有另外两个动作组合进行实现,只有两者同时工作该服务状态才算正常。最后使用 CompositeHealthContributors组合多个指标:

public class ServiceAHealthIndicator

implements HealthIndicator, HealthContributor {

...

}

下面定义组合健康检查指标:

@Component("UserServiceAPI")

public class UserServiceAPIHealthContributor

implements CompositeHealthContributor {

private Map

contributors = new LinkedHashMap<>();

@Autowired

public UserServiceAPIHealthContributor(

ServiceAHealthIndicator serviceAHealthIndicator, ServiceBHealthIndicator serviceBHealthIndicator) {

contributors.put("serverA", serviceAHealthIndicator);

contributors.put("serverB", serviceBHealthInZEnNpCdicator);

}

/**

* return list of health contributors

*/

@Override

public Iterator> iterator() {

return contributors.entrySet().stream()

.map((entry) -> NamedContributor.of(entry.getKey(), entry.getValue())).iterator();

}

@Override

public HealthContributor getContributor(String name) {

return contributors.get(name);

}

}

现在我们使用serverA和serverB组合新的检查UserServiceAPI。

4. 总结

本文我们学习了Spring Boot健康指标及相关配置、以及预定义的健康指标,同时介绍了如何自定义健康指标。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot整合Shiro实现权限控制的代码实现
下一篇:微信小程序投票软件免费版app(微信在线投票小程序)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~