APM工具对比

APM工具对比

市面上有很多分布式链路监控的工具,各有优点,可根据具体情况选择。

调研

整体架构

zipkin

skywalking

cat

基本原理

zipkin

skywalking

cat

接入方式

数据收集

UI

数据存储方案

支持语言

使用者

版本迭代速度

其它

总结

参考文档

调研市面上的APM(Application Performance Management)理论模型大多都是借鉴Google Dapper论文。

我最近也在选取使用哪一个工具,这里的对比是在Spring Cloud 中的使用。

对比三种工具:

zipkin:Twitter公司开源的一个分布式追踪工具,被Spring Cloud Sleuth集成,使用广泛而稳定

skywalking:中国人吴晟(华为)开源的一款分布式追踪,分析,告警的工具,现在是Apache旗下开源项目

cat:大众点评开源的一款分布式链路追踪工具。

整体架构zipkin

zipkin分为zipkin服务端和客户端,每一个被监控的服务都是客户端。

组件:

追踪器:位于客户端,并记录有关发生的操作的时间和元数据,对用户透明

Reporter: 将数据发送到Zipkin的检测应用程序

Transport :传输数据:HTTP, Kafka and Scribe.

Collector:位于服务端中,收集传输来的数据

Storage :存储数据,默认存储在内存中

search :查询api,JSON应用编程接口,被UI调用

UI :Web UI提供了一种基于服务,时间Annotation查看跟踪的方法。UI中没有内置身份验证

skywalking

组件:skywalking分为四个部分:探针,平台后端,存储,UI

Probes,探针,探针因使用的语言不同而不通,收集数据并且格式化为skywalking所需的格式。

Platform backend 平台后端,对应于zipkin server,可以集群部署,聚合,分析,将数据展示在UI中

Storage:存储,可扩展的存储,可以使es,H2,MySQL集群

UI 丰富的可视化功能,提供身份验证

cat

cat-client 业务模块,埋点,发送消息给consumer

cat-consumer,分析从client接收的数据

cat-home 将数据展示在控制端

存储

基本原理zipkin12345678910111213141516171819202122232425262728293031323334353637383940┌─────────────┐ ┌───────────────────────┐ ┌─────────────┐ ┌──────────────────┐│ User Code │ │ Trace Instrumentation │ │ Http Client │ │ Zipkin Collector │└─────────────┘ └───────────────────────┘ └─────────────┘ └──────────────────┘ │ │ │ │ ┌─────────┐ │ ──┤GET /foo ├─▶ │ ────┐ │ │ └─────────┘ │ record tags │ │ ◀───┘ │ │ ────┐ │ │ │ add trace headers │ │ ◀───┘ │ │ ────┐ │ │ │ record timestamp │ │ ◀───┘ │ │ ┌─────────────────┐ │ │ ──┤GET /foo ├─▶ │ │ │X-B3-TraceId: aa │ ────┐ │ │ │X-B3-SpanId: 6b │ │ │ │ └─────────────────┘ │ invoke │ │ │ │ request │ │ │ │ │ │ │ ┌────────┐ ◀───┘ │ │ ◀─────┤200 OK ├─────── │ │ ────┐ └────────┘ │ │ │ record duration │ │ ┌────────┐ ◀───┘ │ ◀──┤200 OK ├── │ │ │ └────────┘ ┌────────────────────────────────┐ │ │ ──┤ asynchronously report span ├────▶ │ │ │ │{ │ │ "traceId": "aa", │ │ "id": "6b", │ │ "name": "get", │ │ "timestamp": 1483945573944000,│ │ "duration": 386000, │ │ "annotations": [ │ │--snip-- │ └────────────────────────────────┘

当发起一个调用,Trace Instrumentation会拦截请求,添加tag,添加traceID和spanID进http头,当服务返回时,它会异步地向Collector发送数据。Collector受到数据后存储,分析,同时UI会展示数据在界面上。

skywalking探针将数据通过gRPC或者HTTP传输给后端平台(server),后端平台将数据存储在Storage中,并且分析数据将结果展示在UI中

cat客户端:收集数据通过ThreadLocal,将数据存在ThreadLocal中,当结束时发送数据给服务端。

举例:

序列化与通信:自定义的序列化协议,Netty数据传输

服务端:

监控模型:

Transaction:适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数

Event:用来记录一件事发生的次数,开销较小

Heartbeat:表示程序内定期产生的统计信息, 如CPU利用率, 内存利用率, 连接池状态, 系统负载等

Metric:用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟

类别

实现方式

zipkin

拦截请求

skywalking

java探针,字节码增强

cat

代码埋点

接入方式

类别

接入方式

agent到collector的协议

zipkin

sleuth,引入依赖和配置

http,mq

skywalking

javaanent

gRPC,http

cat

代码侵入

http/tcp

数据收集

类别

数据

zipkin

链路,耗时

skywalking

链路,耗时,cpu,mem,JVM

cat

链路,耗时,cpu,mem,JVM

UI

类别

丰富度

zipkin

一般

skywalking

丰富

cat

丰富

数据存储方案

类别

存储方案

zipkin

内存,mysql,es,Cassandra

skywalking

es,mysql,h2,TiDB

cat

mysql,hdfs

支持语言

类别

语言

zipkin

C#,Go,Java,JS,Ruby,Scala,PHP;社区支持c++,Python

skywalking

Java,c#,PHP,Node.js

cat

Java, C/C++, Node.js, Python, Go

使用者

类别

使用者

zipkin

skywalking

cat

较多

版本迭代速度

类别

速度

zipkin

skywalking

cat

其它

类别

作者

粒度

traceID查询

告警

依赖分析

OpenTracing标准

zipkin

twitter

接口级

yes

no

yes

部分支持

skywalking

吴晟,华为

方法级

yes

yes

yes

完全支持

cat

吴其敏,尤勇,大众点评

代码级

no

yes

no

不支持

注:OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

总结zipkin

优点:轻量级,springcloud集成,使用人数多,成熟

不足:功能简单,只有链路监控

skywalking

优点:采集数据丰富,UI友好,扩展性高,使用者多,支持中间件以及框架多,社区活跃

缺点:

cat

优点采集数据非常丰富,UI友好,粒度最细

代码侵入,需改动业务代码,git不够活跃,更新缓慢,存储支持不够广泛

这些工具各有长短,根据实际场景不同选择之。

参考文档https://zipkin.io/https://github.com/apache/skywalkinghttps://github.com/dianping/cat/wikihttps://juejin.im/post/5a274614518825592c07f8b8https://www.jianshu.com/p/0fbbf99a236e

相关养生推荐

从曹操的唯才是举,到曹丕的重用门阀,曹魏到底经历了什么?
魔兽世界8.0增强萨PVE:天赋选择及输出技巧指南
365网站取款不给怎么办

魔兽世界8.0增强萨PVE:天赋选择及输出技巧指南

📅 10-19 👁️ 2095
意大利语和德语哪个好学
365官网登录

意大利语和德语哪个好学

📅 07-12 👁️ 3023