监控软件选型Zipkin jaeger elastic apm SkyWalking Pinpoint

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

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月6日
下一篇 2022年4月6日

相关推荐