http://blog.csdn.net/xiaoyu411502/article/details/48129057

**********************************************

微服务 的流行,相比较以前一个大型应用程序搞定所有需求,我们现在更倾向于把大型应用程序切分成多个微服务,服务之间通过 RPC 调用。微服务架构的好处非常多,例如稳定的服务变化较少,不会被非稳定服务所影响;不同的服务更方便交给不同的人管理;发布、扩容等操作也更加有针对性。不过这也不是没有代价的,额外的成本最主要的可能就是运维成本。

测试,那是在测试环境就需要完成的事情,健康检查基本只是关注环境是否 OK,最核心的一两个用例是否 OK。由于部署到预发布或者线上的代码,和线下测试的代码是一致的,因此就不需要重复验证各种功能了,关注点应该在环境上,这一点线上和线下是有明显区别的。至于环境区别,通常就是磁盘、数据库、其他分布式服务等等。

我曾尝试定义一个健康检查协议,让所有服务都暴露一个HTTP接口http://172.20.10.2/health.json ,返回的内容就包含这个这个服务的基本状态。

spring Boot ,发现它已经很好地集成了我想要的功能,而且看起来更简单,因此我就直接扔掉了自己定义的协议,改而使用 Spring Boot 的方式,Spring Boot 有一个称之为 endpoint 的概念,每个 endpoint 是一个非常简单的 HTTP 接口,用户可以通过 endpoint 监控 Spring Boot 应用,甚至与之交互。这其中,最简单的 endpoint 就是 health,只要加入必要的 Spring Boot 依赖,用户就能通过 health 查看 Spring Boot 应用的基本状态。

$ curl http://localhost:8080/health { "status":"UP" }
class MyHealth implements HealthIndicator {@Override public Health health() {  return new Health.Builder()   .withDetail("tair", "timeout") // some logic check tair   .withDetail("tfs", "ok") // some logic check tfs   .status("500")   .down()   .build(); } } 
只要在每个服务稍微实现一些基本的环境检查,那我就可以用几行脚本快速地完成 7 个服务 x (国内环境 + 国外环境)x (预发布环境 + 生产环境)的健康检查,如果有哪个服务出问题了,定位环境问题也是非常方便的。

除了 health endpoint 之外,Spring Boot 还提供了 其它10多个 endpoint ,它们都是针对运维设计的,例如可以用 shutdown endpoint 来关闭服务、用 beans endpoint 来查看所有的 Spring Bean,下面我想详细讲一下 metrics 这个 endpoint。

实现是这样的:

@Component public class MyMetric { private final CounterService counterService; private final GaugeService gaugeService; @Autowired public MyMetric(CounterService counterService, GaugeService gaugeService) { this.counterService = counterService; this.gaugeService = gaugeService; } public void exampleCounterMethod() { this.counterService.increment("login.count"); // reset each minute } public void exampleGaugeMethod() { this.gaugeService.submit("cache.hit", 80.0); } }

现在访问 metrics endpoint 的效果是这样的:

$ curl http://localhost:8080/metrics { "counter.login.count": 42, "counter.status.200.beans": 1, "counter.status.200.metrics": 9, "counter.status.200.root": 4, "gauge.cache.hit": 80.0, "gauge.response.beans": 55, "gauge.response.health": 12, "gauge.response.metrics": 4, ... }

如果所有服务的核心业务数据都通过 metrics 暴露,我们接下来要做的无非就是通过一些数据可视化的 JavaScript 组件访问这些数据,做成一个 Dashboard,那我们就能通过这样一个 Dashboard 查看系统的实时状态。

“you build it, you run it” ,开发不仅要关心如何实现功能,还需要关心服务在线上运行的状态,如果缺乏实时监控,维护线上服务必然是一场噩梦。如果基于 Spring Boot 开发服务,那只需要稍作扩展,实时监控就足够用了,就算不使用 Spring Boot,类似的思路自己实现也并不复杂。

参考链接 http://docs.spring.io/spring-boot/docs/1.1.x/reference/htmlsingle/#production-ready-endpoints

如何做实时监控?—— 参考 Spring Boot 实现相关推荐

  1. 如何做自己的服务监控?spring boot 2.x服务监控揭秘

    Actuator是spring boot项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...

  2. 如何做自己的服务监控?spring boot 1.x服务监控揭秘

    1.准备 下载可运行程序:http://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/ 2.添加服务监控依赖 <d ...

  3. 项目监控之Spring Boot 监控端点 Actuator 入门

    1. 概述 应用在部署在生产环境下,我们还需要考虑应用的管理与监控.例如说,应用是否健康存活.应用的 JVM 监控信息.服务器的监控信息(CPU.内存.磁盘等等). 如果我们为应用的管理与监控做相应的 ...

  4. Home Assistant系列 -- 接入手机摄像头做实时监控和人脸识别

    准备一部废旧(土豪忽略,主要是穷)的.摄像头还是好的手机做监控设备,(Android 和iPhone都行)当Home Assistant 获得实时的视频流后,可以接入各种图像处理组件完成人脸识别,动作 ...

  5. Spring Boot 项目如何做性能监控?

    来源:zhaoyh's blog,http://zhaoyh.com.cn/ Spring Boot特别适合团队构建各种可快速迭代的微服务,同时为了减少程序本身监控系统的开发量,Spring Boot ...

  6. Spring Boot之程序性能监控

    转载自 Spring Boot之程序性能监控 Spring Boot特别适合团队构建各种可快速迭代的微服务,同时为了减少程序本身监控系统的开发量,Spring Boot提供了actuator模块,可以 ...

  7. (转)Spring Boot (十九):使用 Spring Boot Actuator 监控应用

    http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html 微服务的特点决定了功能模块的部署是分布式的,大部分功能 ...

  8. Spring Boot 3.0.0-M1 Reference Documentation(Spring Boot中文参考文档) 9-16

    9. 数据 Spring Boot与多个数据技术集成,包括SQL和NoSQL. 9.1. SQL数据库 Spring Framework提供扩展支持用于与SQL数据工作,从使用JdbcTemplate ...

  9. Spring Boot 中文参考指南

    Spring Boot 版本 2.7.8 原文:https://docs.spring.io/spring-boot/docs/2.7.8/reference/htmlsingle/ - 笔者注: S ...

最新文章

  1. 异步消息队列zeromq实现服务器间高性能通信
  2. windows找不到msconfig解决方法
  3. Scala入门到精通——第二十八节 Scala与JAVA互操作
  4. Oracle_双机备份_资料
  5. 开个定时器给echarts组件配置定时更新
  6. 协作机器人 ai算法_如果我们希望人工智能为我们服务而不是不利于我们,我们需要协作设计...
  7. 【vue开发】vue导出Excel表格教程demo
  8. python绘制直方图plt_Python:matplotlib绘制直方图
  9. 查看 linux系统版本,内核,CPU,MEM,位数的相关命令(实验)
  10. springboot的一些小问题
  11. AWVS13破解docker一键安装
  12. android开发之局域网内屏幕共享+提取文字01:截屏
  13. 【Steam】成就系统的制作及本地化
  14. DL----karas可视化工具
  15. S型函数:Sigmoid 函数
  16. SUST OJ P5502
  17. 财路网每日原创推送:混迹币圈必看,吐血推荐!
  18. 关于Visual studio 2010运行时闪退问题的解决
  19. 433M无限遥控发射与接收
  20. ScriptManager的使用

热门文章

  1. Java面试锦囊送给你!大厂门槛随便跨!
  2. hive-2.3.3安装指北
  3. Hive2.1.1执行initSchema报错
  4. linux DISPLAY变量
  5. 2016-6-3Ajax异步复习
  6. Java基于Socket文件传输示例(转)
  7. 协变(covariant)和逆变(contravariant)
  8. windows程序静默安装
  9. 测试网站集群节点的页面访问是否正常
  10. 2010-11-23 network virtualization papers(2)