调用链监控,常见的工程实现了解汇总
调用链监控,常见的工程实现了解汇总
作用
微服务盛行,以及现在的云原生部署,应用数量急速上涨.会导致服务于服务之间的调用变的错综复杂.导致问题排查需要查看很多服务的日志,且很复杂,需要一套系统能够清晰的理清系统之间的调用关系,快速的定位监控问题.
- 生成项目网络拓扑图
- 快速定位问题
- 优化系统
原理
建议了解一下文章
在调用链监控系统中,有几个核心概念需要了解:
-
Trace:
Trace是指一次请求调用的链路过程,trace id 是指这次请求调用的ID。在一次请求中,会在网络的最开始生成一个全局唯一的用于标识此次请求的trace id,这个trace id在这次请求调用过程中无论经过多少个节点都会保持不变,并且在随着每一层的调用不停的传递。最终,可以通过trace id将这一次用户请求在系统中的路径全部串起来。
-
Span:
Span是指一个模块的调用过程,一般用span id来标识。在一次请求的过程中会调用不同的节点/模块/服务,每一次调用都会生成一个新的span id来记录。这样,就可以通过span id来定位当前请求在整个系统调用链中所处的位置,以及它的上下游节点分别是什么。spanid和parentSpanid组合起来就可以表示成一个树形的调用关系。
-
Annotation:
是指附属信息,可以用于附属在每一个Span上自定义的数据。
具体参考下图:
从图中可见,一次请求只有一个唯一的trace id=12345,在请求过程中的任何环节都不会改变。在这个请求的调用链中,SpanA调用了SpanB,然后SpanB又调用了SpanC和SpanD,每一次Span调用都会生成一个自己的span id,并且还会记录自己的上级span id是谁。通过这些id,整个链路基本上就都能标识出来了。
实现
所有的调用链监控系统都由
- 数据埋点采集.
- 数据存储处理.
- 数据分析展示
- 几大部分组成.
目前个大主流互联网公司中,ali有非常出现的鹰眼系统,点评也有一套很出名的调用链监控系统CAT。
目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking
SkyWalking ,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等
下面是网上摘录的几款调用链选型对比(无skywalking).
基本原理
类别 | Zipkin | Pinpoint | SkyWalking CAT |
---|---|---|---|
实现方式 | 拦截请求,发送(HTTP,mq)数据至zipkin服务 | java探针,字节码增强 | java探针,字节码增强 |
接入
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
接入方式」 | 基于linkerd或者sleuth方式,引入配置即可 | javaagent字节码」 | javaagent字节码 | 代码侵入 |
agent到collector的协议 | http,MQ | thrift | gRPC | http/tcp |
OpenTracing | √ | × | √ | × |
分析
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
颗粒度 | 接口级 | 方法级 | 方法级 | 代码级 |
全局调用统计 | × | √ | √ | √ |
traceid查询 | √ | × | √ | × |
报警 | × | √ | √ | √ |
JVM监控 | × | × | √ | √ |
页面UI展示
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
健壮度 | ** | ***** | **** | ***** |
数据存储
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
数据存储 | ES,mysql,Cassandra,内存 | Hbase | ES,H2 | mysql,hdfs |