赞
踩
Zipkin | jaeger | elastic apm | SkyWalking | Pinpoint | |
---|---|---|---|---|---|
简介 | Zipkin早于Jaeger,是Google Dapper的开源版本,由Twitter进一步开发。Zipkin基于Java语言的应用程序,其中包含很多服务,每个服务都实现Zipkin具体的某一个功能,并包括一个用户界面和用于跟踪软件系统框架的界面。每个服务还提供了一系列存储引擎来持久存储数据,例如内存数据库,MySQL,Cassandra和Elasticsearch。 | Jaeger由Uber创建,并用Go语言编写。它除了Zipkin的功能集外,Jaeger还提供了动态采样,REST API,基于ReactJS的UI界面,以及对Cassandra和Elasticsearch内存数据存储的支持。为了实现这些功能,Jaeger相比Zipkin采取了一种不同的,更分散的方法。 Jaeger的体系结构包括一个客户端,该客户端向代理发出跟踪,代理监听入站跨度(spans)并将其路由到收集器。然后,收集器将验证,转换并保留跨度(spans)。 Jaeger的分布式体系结构使其具有高度可扩展性。Jaeger还具有独特的数据收集方式:与其他尝试收集轨迹和跨度(spans)的系统不同,Jaeger会对监视的数据进行动态采样。这种方法不仅可以处理突然的流量激增,而且可以提高Jaeger的整体性能。 | Elastic stack在6.3版本开始推出了APM功能。ElasticAPM是基于Elastic Stack构建的应用程序性能监视系统,它可以嵌入应用进程内部,实时采集各种运行指标并传输到elasticsearch平台进行聚合统计,通过kibana界面端展示应用系统性能处理能力。 | SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器 | Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。 |
OpenTracing兼容 | 是 | 是 | 是 | 是 | 否 |
server端语言 | java | go | go | java | |
客户端支持语言 | java,c#,go,php,js等 | java/c++/go/node/php/python | java/go/node/php/python等 | java, .net core,nodejs,php | |
传输协议支持 | http/AMQP/Kafka/Scribe | udp/http | http/AMQP/Kafka | gRPC,http | thrift |
实现方式 | 拦截请求,发送(HTTP,mq)数据至zipkin服务、侵入性强 | 拦截请求,侵入 | java探针,字节码增强,无侵入性 | java探针,字节码增强,无侵入性 | java探针,字节码增强、无侵入性 |
接入方式 | 基于linkerd或者sleuth方式,引入配置即可 | java agent字节码 | java agent字节码 | java agent字节码 | |
全局调用统计 | × | × | × | √ | √ |
trace查询 | 支持 | 支持 | 支持 | 支持 | 不支持 |
告警支持 | 不支持 | 不支持 | 支持 | 支持 | |
jvm监控 | 不支持 | 不支持 | 支持 | 支持 | 支持 |
页面ui丰富度 | 低 | 中 | 中 | 中 | 高 |
存储方式 | ES,mysql,Cassandra,内存 | ES,kafka,Cassandra,内存 | ES | ES,H2,mysql,TIDB,sharding sphere | Hbase |
性能损耗 | 中等 | 中等 | 低 | 低 | 高 |
社区活跃度 | github15.3k | github15.6k | github apm server 987 | github19.2k | github12.1k |
界面功能较为简单,本身无告警功能,可能需要二次开发。有代码入侵性 | 在界面上较为完善(对比zipkin),但是也无告警功能。有代码入侵性。dubbo目前无插件支持,可二次开发。 | 字节码增强,性能损耗低,无代码入侵性,集成容易,与logging能统一在kibana中展示 | 完全无侵入,性能损耗低,界面完善,支持应用拓扑图及单个调用链查询,功能比较完善(zipkin + pinpoint) | 完全无侵入, 仅需修改启动方式,界面完善,功能细致。不支持查询单个调用链, 对外表现的是整个应用的调用生态,收集性能的损耗比较多,支持的存储比较少。 |
结论:
zipkin框架:仅支持spring cloud,不支持dubbo,功能及其简单,集成容易,与jaeger一样但也有较强的侵入性;
zipkin、jaeger就被排除了,接下来重点看pinpoint和skywalking、elastic apm的对比:
三者对代码都没有侵入性,使用java探针字节码增加技术,监控能力相当,最主要的一个区别在于底层数据库
1、Pinpoint只支持HBase,且扩展代价较大,其支持的查询一定是在时间的基础上(Pinpoint通过鼠标圈定一个时间范围后查看这个范围内的Trace信息),且pinpoint收集链路信息的性能损耗比skywalking高得多,尚未支持pinpoint不支持sharding-jdbc;
2、skywalking和elastic apm底层使用的是elasticSearch数据库,skywalking可以多个维度任意组合查询,例如:时间范围,服务名,Trace状态,请求路径,TraceId等;elastic apm支持使用sql的方式查询,不相上下。elastic apm在kibana中有界面直接展示,如果项目中已经用了elk的话会比较合适。skywalking则是有自己的ui界面展示。
总的来说:skywalking和elastic apm区别不大,活跃度方面elastic apm不及skywalking,但是官方的支持和文档资料也挺齐全的,也不会有啥障碍。建议如果上了elk的话选择elastic apm,否则上skywalking
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。