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

2 为何需要调用链监控?
- 在初期的单体应用,应用都打在一个包中,无分布式概念,监控也只需对一些埋点监控。
但是微服务时代下,很多服务在各自的包,一旦出现问题,没有调用链监控就很难定位问题!
3 没有应用监控可能带来的坑点
- 线上发布了服务,怎么知道一切正常?
- 大量报错,到底哪里产生的,谁才是根因?
- 人工配置错误,上线前通宵排错,结婚了还得来修 bug!
- 应用程序有性能问题,怎么尽早发现问题?
- 数据库问题,在出问题之前能洞察吗?
最后谁都查不出问题,全部甩锅网络问题~
可能出错的事总会出错!!!(墨菲定律)
微服务需要应用监控!!!
4 DevOps 实践
-
要提升先测量
开尔文曾经曰过:If you can’t measure it, you can’t improve it.
知道系统的当前性能指标,才知道该如何优化。
- 研发自主监控所负责的系统
5 Open Tracing
为了这些监控软件而规范,支持很多语言无缝切换。
监控演进史
eBay的老员工跳槽到点评后开发了 CAT。
开源产品对比
调用链监控主要适用于同步场景。异步调用一般不建议,因为异步多线程没有明确调用先后时序关系。实际有些场景(比如异步消息追踪)确实需要的话,也是可以做到的,原理就是在跨越线程边界的时候(类似跨越进程边界),需要把trace上下文向异步线程传递,具体做法一般需要定制。Skywalking的异步支持做的比较好,它提供的一些plugin有些已经支持异步追踪,如果你理解原理,也可以自己实现埋点,参考:
https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/Application-toolkit-trace-cross-thread.md参考