1 监控在微服务架构的地位

2 为何需要调用链监控?

  • 在初期的单体应用,应用都打在一个包中,无分布式概念,监控也只需对一些埋点监控。
    微服务调用链监控开源工具CAT_应用程序
    但是微服务时代下,很多服务在各自的包,一旦出现问题,没有调用链监控就很难定位问题!

3 没有应用监控可能带来的坑点


  • 线上发布了服务,怎么知道一切正常?
  • 大量报错,到底哪里产生的,谁才是根因?
  • 人工配置错误,上线前通宵排错,结婚了还得来修 bug!
  • 应用程序有性能问题,怎么尽早发现问题?
  • 数据库问题,在出问题之前能洞察吗?

最后谁都查不出问题,全部甩锅网络问题~

可能出错的事总会出错!!!(墨菲定律)
微服务需要应用监控!!!

4 DevOps 实践


  1. 要提升先测量
    开尔文曾经曰过:If you can’t measure it, you can’t improve it.
    知道系统的当前性能指标,才知道该如何优化。
  2. 研发自主监控所负责的系统

5 Open Tracing

为了这些监控软件而规范,支持很多语言无缝切换。

微服务调用链监控开源工具CAT_应用程序_02

监控演进史

eBay的老员工跳槽到点评后开发了 CAT。

微服务调用链监控开源工具CAT_github_03

开源产品对比

微服务调用链监控开源工具CAT_github_04

微服务调用链监控开源工具CAT_微服务_05

微服务调用链监控开源工具CAT_应用程序_06

调用链监控主要适用于同步场景。异步调用一般不建议,因为异步多线程没有明确调用先后时序关系。实际有些场景(比如异步消息追踪)确实需要的话,也是可以做到的,原理就是在跨越线程边界的时候(类似跨越进程边界),需要把trace上下文向异步线程传递,具体做法一般需要定制。Skywalking的异步支持做的比较好,它提供的一些plugin有些已经支持异步追踪,如果你理解原理,也可以自己实现埋点,参考:

https:///apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/

参考

  • https:///spring2go/cat_lab/blob/master/ppt/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E8%B0%83%E7%94%A8%E9%93%BE%E7%9B%91%E6%8E%A7CAT%E6%9E%B6%E6%9E%84%E5%92%8C%E5%AE%9E%E8%B7%B5.pdf
  • https:///wiki/%E5%BA%B7%E5%A8%81%E5%AE%9A%E5%BE%8B