常见 APM 系统
APM 系统(Application Performance Management,即应用性能管理)是对企业的应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案。APM 作为系统运维管理和网络管理的一个重要方向,能够对关键服务进行监控、追踪以及告警,帮助开发和运维人员轻松地在复杂的应用系统中找到故障点,提高服务的稳定性,保证用户得到良好的服务,降低 IT 运维的成本。 当下成熟的互联网公司都已经建立了全方位监控系统,力求及时发现故障,并为优化系统提供性能数据支持。
国内比较常见的 APM 如下:
-
CAT: 由国内美团点评开源的,基于 Java 语言开发,目前提供 Java、C/C++、Node.js、Python、Go 等语言的客户端,监控数据会全量统计。国内很多公司在用,例如美团点评、携程、拼多多等。CAT 需要开发人员手动在应用程序中埋点,对代码侵入性比较强。
-
Zipkin: 由 Twitter 公司开发并开源,是分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。比较常见spring cloud 采用的方案,大家都比较熟知
-
Pinpoint: Pinpoint是由一个韩国团队实现并开源,针对Java编写的大规模分布式系统设计,通过JavaAgent的机制做字节代码植入,实现加入traceid和获取性能数据的目的,对应用代码零侵入。
-
SkyWalking: Skywalking是由国内一位叫吴晟的工程师开源,已加入Apache孵化器,是一个APM系统,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。 SkyWalking 与 Pinpoint 相同,Java 探针采用字节码增强技术实现,对业务代码无侵入。探针采集数据粒度相较于 Pinpoint 来说略粗,但性能表现优秀。SkyWalking 增长势头强劲,社区活跃,中文文档齐全,没有语言障碍,支持多语言探针
对比
cat
zipkin
pinpoint
skywalking
依赖
Java 6,7,8Maven 3.2.3+mysql5.6Linux 2.6以及之上(2.6内核才可以支持epoll)
Java 6,7,8Maven3.2+rabbitMQ
Java 6,7,8maven3+Hbase0.94+
Java 6,7,8maven3.0+nodejszookeeperelasticsearch
实现方式
代码埋点(拦截器,注解,过滤器等)
拦截请求,发送(HTTP,mq)数据至zipkin服务
java探针,字节码增强
java探针,字节码增强
存储选择
mysql , hdfs
in-memory , mysql , Cassandra , Elasticsearch
HBase
elasticsearch , H2
通信方式
—
http , MQ
thrift
GRPC
MQ监控
不支持
不支持
不支持
支持(RocketMQ,kafka)
全局调用统计
支持
不支持
支持
支持
trace查询
不支持
支持
不支持
支持
报警
支持
不支持
支持
支持
JVM监控
不支持
不支持
支持
支持
star数
4.5K
7.9K
5.6K
2.8K
优点
功能完善。
spring-cloud-sleuth可以很好的集成zipkin , 代码无侵入,集成非常简单 , 社区更加活跃。
完全无侵入, 仅需修改启动方式,界面完善,功能细致。
完全无侵入,界面完善,支持应用拓扑图及单个调用链查询。 功能比较完善(zipkin + pinpoint)
缺点
代码侵入性较强,需要埋点文档比较混乱,文档与发布版本的符合性较低,需要依赖点评私服 (或者需要把他私服上的jar手动下载下来,然后上传到我们的私服上去)。
默认使用的是http请求向zipkin上报信息,耗性能。跟sleuth结合可以使用rabbitMQ的方式异步来做,增加了复杂度,需要引入rabbitMQ 。
不支持查询单个调用链, 对外表现的是整个应用的调用生态。
3.2版本之前BUG较多 ,网上反映兼容性较差 . 3.2新版本的反映情况较少依赖较多。
文档
网上资料较少,仅官网提供的文档,比较乱
文档完善
文档完善
文档完善
开发者
大众点评
naver
吴晟(华为开发者) ,目前已经加入Apache孵化器
使用公司
大众点评, 携程, 陆金所,同程旅游,猎聘网
naver
华为软件开发云、天源迪科、当当网、京东金融