一、介绍
Apache SkyWalking
是一个 国产开源框架。
- 2015年由 吴晟 开源,2017年加入Apache孵化器。
skyWalking
是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。- 它是一款优秀的
APM(Application Performance Management)
工具,包括了 分布式追踪、性能指标分析、应用和服务依赖分析 等。
二、为什么使用链路追踪
微服务框架落地后,分布式部署架构带来的问题就会迅速凸显出来。
- 服务之间的相互调用过程中,如果业务出现错误或者异常,如何快速定位问题?
- 如何跟踪业务调用链路?
- 如何分析解决业务瓶颈?
三、链路追踪特性
- 业务调用链路监控与分析
- 服务性能链路监控与分析
- 服务告警
四、链路追踪框架对比
目前主要的一些 APM 工具有:
Cat
是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。Zipkin
是Twitter开源的调用链分析工具, ,目前基于Spring Cloud Sleuth得到了广泛的使用,特点是轻量,使用部署简单。Pinpoint
是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。SkyWalking
是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
4.1 功能对比
功能 | CAT | Zipkin | SkyWalking |
---|---|---|---|
调用链可优化 | 有 | 有 | 有 |
聚合报表 | 非常丰富 | 少 | 较丰富 |
服务依赖图 | 简单 | 简单 | 好 |
埋点方式 | 侵入式 | 侵入式 | 非侵入式,字节码增强 |
VM监控指标 | 好 | 无 | 有 |
支持语言 | Java、net | 丰富 | Java、C++、Net、NodeJs、PHP、Go、Python |
存储机制 | MySQL (报表)、 本地文件、HDFS(调用链) | 内存、ElasticSearch、MySQL | H2、ElasticSearch、MySQL、TiDB、Sharding Sphere |
社区支持 | 主要在国内 | 国外主流 | Apache 支持 |
使用案例 | 美团、携程、陆金所 | 京东、阿里定制后不开源 | 华为、小米、当当、微众银行 |
APM | 是 | 否 | 是 |
开发基础 | eBay cal | Google Dapper | Google Depper |
是否支持 webflux | 否 | 是 | 是 |
4.2 性能对比
比较关注探针的性能,毕竟APM定位还是工具,如果启用了链路监控组建后,直接导致吞吐量降低过半,那也是不能接受的。对skywalking、zipkin、pinpoint进行了压测,并与基线(未使用探针)的情况进行了对比。 选用了一个常见的基于Spring的应用程序,他包含Spring Boot, Spring MVC,redis客户端,mysql。 监控这个应用程序,每个trace,探针会抓取5个span(1 Tomcat, 1 SpringMVC, 2 Jedis, 1 Mysql)。这边基本和 skywalkingtest 的测试应用差不多。 模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:
从上表可以看出,在三种链路监控组件中:
- skywalking的探针对吞吐量的影响最小。
- zipkin的吞吐量居中。
- pinpoint的探针对吞吐量的影响较为明显。
在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。
详细参考信息: APM 巅峰对决
五、SkyWalking 主要功能特性
- 多种监控手段,可以通过语言探针和serviceMesh获得监控的数据。
- 支持多种语言自动探针。
- 轻量高效,无需大数据平台和大量的服务器资源。
- 模块化、UI、存储、集群管理都有多种机制可选。
- 支持告警。
- 优秀的可视化解决方案。