本文对比了五款流行的分布式追踪系统——Zipkin、Jaeger、ElasticAPM、SkyWalking和Pinpoint。Zipkin和Jaeger具有代码入侵性,而Pinpoint、SkyWalking和ElasticAPM则使用Java探针实现无侵入性监控。Jaeger以其高度可扩展性和动态采样脱颖而出,ElasticAPM与ELK栈集成紧密,SkyWalking支持丰富的UI功能和全局调用统计。在存储方面,Pinpoint仅支持HBase,SkyWalking和ElasticAPM使用Elasticsearch。根据需求,若已有ELK栈,推荐ElasticAPM,否则SkyWalking是不错的选择。
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
————————————————
版权声明:本文为CSDN博主「隐0士」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lyd135364/article/details/124667007