Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控
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() 方法来实现健康检查。
- @Component
- public class CusStatusHealthIndicator implements HealthIndicator {
- @Override
- public Health health() {
- int errorCode = check();
- if (errorCode != 0) {
- return Health.down()
- .withDetail("status", errorCode)
- .withDetail("message", "服务故障")
- .build();
- }
- return Health.up().build();
- }
- private int check(){
- // 对监控对象的检测操作
- return HttpStatus.NOT_FOUND.value();
- }
- }
我们,来看看打印结果。
- {
- "status": "DOWN",
- "cusStatus": {
- "status": 404,
- "message": "服务故障"
- }
- }
此外,我们还可以通过继承 AbstractHealthIndicator 类,创建一个检测器类。
- @Component
- public class CusDiskSpaceHealthIndicator extends AbstractHealthIndicator {
- private final FileStore fileStore;
- private final long thresholdBytes;
- @Autowired
- public CusDiskSpaceHealthIndicator(
- @Value("${health.filestore.path:/}") String path,
- @Value("${health.filestore.threshold.bytes:10485760}") long thresholdBytes)
- throws IOException {
- fileStore = Files.getFileStore(Paths.get(path));
- this.thresholdBytes = thresholdBytes;
- }
- @Override
- protected void doHealthCheck(Health.Builder builder) throws Exception {
- long diskFreeInBytes = fileStore.getUnallocatedSpace();
- if (diskFreeInBytes >= thresholdBytes) {
- builder.up();
- } else {
- builder.down();
- }
- long totalSpaceInBytes = fileStore.getTotalSpace();
- builder.withDetail("disk.free", diskFreeInBytes);
- builder.withDetail("disk.total", totalSpaceInBytes);
- }
- }
AbstractHealthIndicator 实现 HealthIndicator 接口,并重写了 health() 方法来实现健康检查。因此,我们只需要重写 doHealthCheck 方法即可。
一般情况下,我们不会直接实现 HealthIndicator 接口,而是继承 AbstractHealthIndicator 抽象类。因为,我们只需要重写 doHealthCheck 方法,并在这个方法中我们关注于具体的健康检测的业务逻辑服务。
我们,来看看打印结果。
- {
- "status": "UP",
- "cusDiskSpace": {
- "status": "UP",
- "disk.free": 79479193600,
- "disk.total": 104856547328
- }
- }
源代码
相关示例完整代码: springboot-action
(完)
如果觉得我的文章对你有帮助,请随意打赏。

- 版权声明:本文由 梁桂钊 发表于 梁桂钊的博客
- 转载声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。
- 文章标题:Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控
- 文章链接:http://blog.720ui.com/2017/springboot_09_actuator_http_healthindicator/
Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控的更多相关文章
- Spring Boot 揭秘与实战(九) 应用监控篇 - 自定义监控端点
文章目录 1. 继承 AbstractEndpoint 抽象类 2. 创建端点配置类 3. 运行 4. 源代码 Spring Boot 提供的端点不能满足我们的业务需求时,我们可以自定义一个端点. 本 ...
- Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控
文章目录 1. 快速开始 2. 监控和管理端点3. 定制端点 2.1. health 应用健康指标 2.2. info 查看应用信息 2.3. metrics 应用基本指标 2.4. trace 基本 ...
- Spring Boot 揭秘与实战(一) 快速上手
文章目录 1. 简介 1.1. 什么是Spring Boot 1.2. 为什么选择Spring Boot 2. 相关知识 2.1. Spring Boot的spring-boot-starter 2. ...
- Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置
Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot ...
- Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块
文章目录 1. 实战的开端 – Maven搭建 2. 参数的配置 - 属性参数类 3. 真的很简单 - 简单的服务类 4. 自动配置的核心 - 自动配置类 5. spring.factories 不要 ...
- Spring Boot 揭秘与实战 源码分析 - 工作原理剖析
文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoCo ...
- Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机
文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多”开箱即用“的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内 ...
- Spring Boot 揭秘与实战(八) 发布与部署 - 远程调试
文章目录 1. 依赖 2. 部署 3. 调试 4. 源代码 设置远程调试,可以在正式环境上随时跟踪与调试生产故障. 依赖 在 pom.xml 中增加远程调试依赖. <plugins> &l ...
- Spring Boot 揭秘与实战(八) 发布与部署 - 开发热部署
文章目录 1. spring-boot-devtools 实现热部署 2. Spring Loaded 实现热部署 3. 模板文件热部署 4. 源代码 Spring Boot 支持页面与类文件的热部署 ...
随机推荐
- 784. Letter Case Permutation C++字母大小写全排列
网址:https://leetcode.com/problems/letter-case-permutation/ basic backtracking class Solution { public ...
- Echarts 简单报表系列二:折线图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 解决PLSQL Developer 插入中文 乱码问题(转)
原文地址:解决PLSQL Developer 插入中文 乱码问题 PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字 ...
- 【LeetCode】N数和
1. 3Sum 给定一个无序数组(可能存在重复元素),是否存在三个数之和为0,输出所有不重复的三元组. e.g. 给定数组 [-1, 0, 1, 2, -1, -4], 结果集为:[ [-1, 0, ...
- MSSQL内存架构及管理
1. MSSQL内存架构 相比较Oracle,MSSQL的内存区域并没那么清晰,但和Oracle类似,MSSQL内存区域大体也可以分为三个部分:buffer pool,query/workspace ...
- “reliable message”事件引发的思考
今天无意间看到了“reliable message"事件,平时还真没深入研究过这个事件,于是,就收集资料并稍微研究了一下,以下是官方就该事件给出的说明: When you send a me ...
- Vue为v-html中标签添加CSS样式
在最近的vue项目中遇到的问题:v-html渲染的富文本,无法在样式表中修改样式: <template> <div class="msgHtmlBox" v-ht ...
- telnet的装配及xinetd的讨论
telnet由于是不安全的明文传输所以基本被ssh取代了,尤其是在Linux上:不过还是可能会用到,且启停方式还有些不同所以还是有必要说明一下. rpm -qa | grep telnet #查看是否 ...
- [转]每天一个linux命令(44):top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...
- 批量生成QRcode
本想在excel批量生成GUID,并生成二维码. //Excel生成guid,uuid 格式:600d65bc-948a---fd8dfeebb1cd =LOWER(CONCATENATE(DEC2H ...