文章目录
概述
PinPoint(naver–开源)
由Twitter公司开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
字节码探针技术,代码无侵入,体系完善不易修改,支持java,技术栈支持dubbo.其他语言社区支援中;
Zipkin(Twitter–开源)
一款对Java编写的大规模分布式系统的APM工具,由韩国人开源的分布式跟踪组件,特点是支持多种插件,UI功能强大,接入端无代码侵入。
方便集成于spring cloud sleuth,社区支持的插件也包括dubbo,rabbit,mysql,httpclient等,同时支持php,go,js等语言客户端,界面功能较为简单,本身无告警功能,可能需要二次开发。代码入侵度小;
Skywalking(华为–开源)
是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
类似于PinPoint,目前还在apache孵化中,网上吞吐量对比中强于pinpoint,实际未验证。本身支持dubbo;
对比
探针的性能
对 skywalking、zipkin、pinpoint 进行了压测,并与基线(未使用探针)的情况进行了对比。
模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%。
pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:
结论
skywalking 的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint 的探针对吞吐量的影响较为明显
应用入侵性
zipkin
没有采用
javaagent
方式,应用强依赖ZipKin
,必须打包到应用中与应用一起运行,每个项目需要添加依赖项、配置,不同探针有不同的bean配置需求;
skywalking
采用
javaagent
方式,普通功能对应用无侵入,以下两项功能需要应用稍作修改1.中添加自定义Tag项:应用代码在
SkyWalking Span
中添加自定义Tag,可以按需输出方法参数值等关键信息,辅助应用排错和性能分析,PinPoint
和ZipKin
都不支持(可自行实现);2.日志中输出全局跟踪ID,需要添加
SkyWalking
依赖项;
pinpoint
采用
javaagent
方式,对应用完全无侵入,项目无需添加任何额外依赖项,无需修改代码,这点做得最好;
可扩展性
zipkin
开发 zipkin-Server(其实就是提供的开箱即用包),zipkin-agent 与 zipkin-Server 通过 http 或者 mq 进行通信,http 通信会对正常的访问造成影响,
所以还是推荐基于mq异步方式通信,zipkin-Server 通过订阅具体的 topic 进行消费。这个当然是可以扩展的,多个 zipkin-Server 实例进行异步消费 mq 中的监控信息
skywalking
skywalking的collector支持两种部署方式:单机和集群模式。collector与agent之间的通信使用了gRPC。
当你使用-javaagent参数激活sky-walking的探针, 如果当前上下文中存在traceid,logback将在输出traceId。
如果探针没有被激活,将输出TID: N/A.而且SkyWalking是基于字节码增强的,traceId的传递依赖于SkyWalking的服务端,
如果服务端异常等客户端连接不上服务端的情况,就会出现TID: [Ignored Trace]的情况,就会丢失traceId。
pinpoint
pinpoint也是支持集群和单机部署的。pinpoint agent通过thrift通信框架,发送链路信息到collector。
界面展示
zipkin
skywalking
pinpoint
调用链应用拓扑
zipkin
skywalking
pingpoint
JVM监控
方案总结
方案 | 扩展性 | 实现方式 | 代码侵入性 | 性能损失 | 传输协议 | 客户端支持 | 存储 |
---|---|---|---|---|---|---|---|
skywalking | 中 | java探针字节码注入 | 部分侵入(生成TraceId) | 低 | gRPC | Java, .NET, PHP等 | es,mysql,H2,TIDB |
sleuth+zipkin | 高 | 拦截请求 | 侵入(强依赖zipkin) | 中 | Http,MQ | java,c#,go,php等 | es,mysql,cassandra,内存 |
pingpoint | 低 | java探针字节码注入 | 无侵入 | 高 | Thrift,gRPC | java、php | hbase+mysql |
方案 | 颗粒度 | 调用链应用拓扑 | UI丰富程度 | 告警支持 | jvm监控 | trace查询 | 全局调用统计 |
---|---|---|---|---|---|---|---|
skywalking | 方法级 | 服务+中间件 | 中 | 支持 | 支持 | 支持 | 支持 |
sleuth+zipkin | 接口级 | 服务 | 低 | 不支持 | 不支持 | 支持 | 不支持 |
pingpoint | 代码级 | 服务+中间件 | 高 | 支持 | 支持 | 支持 | 支持 |
** 借鉴自: https://blog.csdn.net/qq_34162294/article/details/118347401**