Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控

文章目录

  1. 1. 内置 HealthIndicator 监控检测
  2. 2. 自定义 HealthIndicator 监控检测
  3. 3. 源代码

Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring Boot 内置了一些 HealthIndicator。

内置 HealthIndicator 监控检测

Name Description
CassandraHealthIndicator Checks that a Cassandra database is up.
DiskSpaceHealthIndicator Checks for low disk space.
DataSourceHealthIndicator Checks that a connection to DataSource can be obtained.
ElasticsearchHealthIndicator Checks that an Elasticsearch cluster is up.
JmsHealthIndicator Checks that a JMS broker is up.
MailHealthIndicator Checks that a mail server is up.
MongoHealthIndicator Checks that a Mongo database is up.
RabbitHealthIndicator Checks that a Rabbit server is up.
RedisHealthIndicator Checks that a Redis server is up.
SolrHealthIndicator Checks that a Solr server is up.

我们,来看下源代码清单。

可见,Spring Boot 帮忙我们集成了许多比较常见的健康监控,例如 MySQL、 MongoDB、 Redis、 ElasticSearch、 Solr、 RabbitMQ 等。

自定义 HealthIndicator 监控检测

一般情况下,Spring Boot 提供的健康监控无法满足我们复杂的业务场景,此时,我们就需要定制自己的 HealthIndicator, 扩展自己的业务监控。

我们,实现 HealthIndicator 接口创建一个简单的检测器类。它的作用很简单,只是进行服务状态监测。此时,通过重写 health() 方法来实现健康检查。

  1. @Component
  2. public class CusStatusHealthIndicator implements HealthIndicator {
  3. @Override
  4. public Health health() {
  5. int errorCode = check();
  6. if (errorCode != 0) {
  7. return Health.down()
  8. .withDetail("status", errorCode)
  9. .withDetail("message", "服务故障")
  10. .build();
  11. }
  12. return Health.up().build();
  13. }
  14. private int check(){
  15. // 对监控对象的检测操作
  16. return HttpStatus.NOT_FOUND.value();
  17. }
  18. }

我们,来看看打印结果。

  1. {
  2. "status": "DOWN",
  3. "cusStatus": {
  4. "status": 404,
  5. "message": "服务故障"
  6. }
  7. }

此外,我们还可以通过继承 AbstractHealthIndicator 类,创建一个检测器类。

  1. @Component
  2. public class CusDiskSpaceHealthIndicator extends AbstractHealthIndicator {
  3. private final FileStore fileStore;
  4. private final long thresholdBytes;
  5. @Autowired
  6. public CusDiskSpaceHealthIndicator(
  7. @Value("${health.filestore.path:/}") String path,
  8. @Value("${health.filestore.threshold.bytes:10485760}") long thresholdBytes)
  9. throws IOException {
  10. fileStore = Files.getFileStore(Paths.get(path));
  11. this.thresholdBytes = thresholdBytes;
  12. }
  13. @Override
  14. protected void doHealthCheck(Health.Builder builder) throws Exception {
  15. long diskFreeInBytes = fileStore.getUnallocatedSpace();
  16. if (diskFreeInBytes >= thresholdBytes) {
  17. builder.up();
  18. } else {
  19. builder.down();
  20. }
  21. long totalSpaceInBytes = fileStore.getTotalSpace();
  22. builder.withDetail("disk.free", diskFreeInBytes);
  23. builder.withDetail("disk.total", totalSpaceInBytes);
  24. }
  25. }

AbstractHealthIndicator 实现 HealthIndicator 接口,并重写了 health() 方法来实现健康检查。因此,我们只需要重写 doHealthCheck 方法即可。

一般情况下,我们不会直接实现 HealthIndicator 接口,而是继承 AbstractHealthIndicator 抽象类。因为,我们只需要重写 doHealthCheck 方法,并在这个方法中我们关注于具体的健康检测的业务逻辑服务。

我们,来看看打印结果。

  1. {
  2. "status": "UP",
  3. "cusDiskSpace": {
  4. "status": "UP",
  5. "disk.free": 79479193600,
  6. "disk.total": 104856547328
  7. }
  8. }

源代码

相关示例完整代码: springboot-action

(完)

如果觉得我的文章对你有帮助,请随意打赏。

时间: 2024-11-08 05:07:31

Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控的相关文章

Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控

文章目录 1. 快速开始 2. 监控和管理端点3. 定制端点 2.1. health 应用健康指标 2.2. info 查看应用信息 2.3. metrics 应用基本指标 2.4. trace 基本的HTTP跟踪信息 2.5. shutdown关闭当前应用 4. 源代码 Spring Boot 提供运行时的应用监控和管理功能.本文,我们通过 HTTP 实现对应用的监控和管理. 快速开始 Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖

Spring Boot 揭秘与实战(九) 应用监控篇 - 自定义监控端点

文章目录 1. 继承 AbstractEndpoint 抽象类 2. 创建端点配置类 3. 运行 4. 源代码 Spring Boot 提供的端点不能满足我们的业务需求时,我们可以自定义一个端点. 本文,我将演示一个简单的自定义端点,用来查看服务器的当前时间,它将返回两个参数,一个是标准的包含时区的当前时间格式,一个是当前时间的时间戳格式. 继承 AbstractEndpoint 抽象类 首先,我们需要继承 AbstractEndpoint 抽象类.因为它是 Endpoint 接口的抽象实现,此

Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机

文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多"开箱即用"的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内藏玄机 Spring Boot提供了很多"开箱即用"的依赖模块,都是以spring-boot-starter-xx作为命名的.例如,之前提到的 spring-boot-starter-redis.spring-boot-starter-data-mongodb.spri

Spring Boot 揭秘与实战(四) 配置文件篇 - 有哪些很棒的特性

文章目录 1. 使用属性文件2. YAML文件 1.1. 自定义属性 1.2. 参数引用 1.3. 随机数属性 1.4. application-{profile}.properties参数加载 3. 源代码 Spring 框架本身提供了多种的方式来管理配置属性文件.Spring 3.1 之前可以使用 PropertyPlaceholderConfigurer.Spring 3.1 引入了新的环境(Environment)和概要信息(Profile)API,是一种更加灵活的处理不同环境和配置文件

Spring Boot 揭秘与实战 源码分析 - 工作原理剖析

文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoConfiguration4. 扩展阅读 3.1. 核心注解 3.2. 注入 Bean 结合<Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机>一文,我们再来深入的理解 Spring Boot 的工作原理. 在<Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏

Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置

Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html # =================================================================== # COMMON SPRING

Spring Boot 揭秘与实战(八) 发布与部署 - 远程调试

文章目录 1. 依赖 2. 部署 3. 调试 4. 源代码 设置远程调试,可以在正式环境上随时跟踪与调试生产故障. 依赖 在 pom.xml 中增加远程调试依赖. <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> &l

Spring Boot 揭秘与实战(五) 服务器篇 - Tomcat 代码配置

Spring Boot 内嵌的 Tomcat 服务器默认运行在 8080 端口.如果,我们需要修改Tomcat的端口,我们可以在 src/main/resources/application.properties 中配置Tomcat信息. server.port=8089 现在,你可以重新运行上面的例子,看下是不是 Tomcat 的端口变成 8089 了. 如果想直接通过代码配置 Tomcat, 可以直接定义 TomcatEmbeddedServletContainerFactory. 现在,我

Spring Boot 揭秘与实战(七) 实用技术篇 - FreeMarker 模板引擎

文章目录 1. FreeMaker 代替 JSP 作为页面渲染 2. 生成静态文件 3. 扩展阅读 4. 源代码 Spring Boot 提供了很多模板引擎的支持,例如 FreeMarker.Thymeleaf.这篇,我们看下 Spring Boot 如何集成和使用 FreeMarker. Spring Boot 中使用 FreeMarker 模板非常简单方便.如果想要使用FreeMarker 模板引擎,首先,修改 POM 文件,添加依赖. FreeMaker 代替 JSP 作为页面渲染 <de