简介

Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。

Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。

SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。

CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

4种APM工具对比

类别

Zipkin

Pinpoint

SkyWalking

CAT

实现方式

拦截请求,发送(HTTP,mq)数据至zipkin服务

java探针,字节码增强

java探针,字节码增强

代码埋点(拦截器,注解,过滤器等)

接入方式

基于linkerd或者sleuth方式,引入配置即可

javaagent字节码

javaagent字节码

代码侵入

agent到collector的协议

http,MQ

thrift

gRPC

http/tcp

OpenTracing


×


×

颗粒度

接口级

方法级

方法级

代码级

全局调用统计

×




traceid查询


×


×

报警

×




JVM监控

×

×



UI健壮度

**

*****

****

*****

数据存储

ES,mysql,Cassandra,内存

Hbase

ES,H2

mysql,hdfs

github活跃度

12.8k

10.3k

13.4k

13.3k

PinPoint和skyWalking支持的插件对比

类别

Pinpoint

SkyWalking

web容器

Tomcat6/7/8,Resin,Jetty,JBoss,Websphere

Tomcat7/8/9,Resin,Jetty

JDBC

Oracle,mysql

Oracle,mysql,Sharding-JDBC

消息中间件

ActiveMQ, RabbitMQ

RocketMQ 4.x,Kafka

日志

log4j, Logback

log4j,log4j2, Logback

HTTP库

Apache HTTP Client, GoogleHttpClient, OkHttpClient

Apache HTTP Client, OkHttpClient,Feign

Spring体系

spring,springboot

spring,springboot,eureka,hystrix

RPC框架

Dubbo,Thrift

Dubbo,Motan,gRPC,ServiceComb

NOSQL

Memcached, Redis, CASSANDRA

Memcached, Redis

性能分析

摘自:

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:

java 调用 hdfs merge java 调用链分析_UI

从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。

推荐方案

每种APM工具都有各自的优势,个人推荐使用SkyWalking,主要从以下几个方面考虑

  1. 代码无侵入,通过添加Java探针可直接使用
  2. 追踪细致到方法级别,可以跟踪方法级别的耗时
  3. UI交互友好,国人开发,适用于国人的UI风格
  4. agent到collect通讯方式gRPC,相对HTTP有更好的性能