1、SkyWalking技术理论文档之全链路监控系统分析(Zipkin,Pinpoint,SkyWalking,CAT)
文件状态: [ ] 草稿 [√] 正在修改 |
当前版本 |
1.0 |
历史修订版本 |
1.0; |
|
作 者 |
杜有龙 |
|
完成日期 |
2019-01-23 |
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。
互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。
因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
全链路监控组件就在这样的问题背景下产生了。
最出名的是谷歌公开的论文提到的 Google Dapper。
想要在这个上下文中理解分布式系统的行为,就需要监控那些横跨了不同的应用、不同的服务器之间的关联动作。
所以,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路。一个请求完整调用链可能如下图所示:
在google的首页页面,提交一个查询请求后,会经历什么?
总结如下:
如果一次查询耗时不正常,工程师怎么来排查到底是由哪个服务调用造成的?
从上面可以看出调用链系统的需要:
在业务规模不断增大、服务不断增多以及频繁变更的情况下,面对复杂的调用链路就带来一系列问题:
我们会关注在请求处理期间各个调用的各项性能指标,比如:吞吐量(TPS)、响应时间及错误记录等。
全链路性能监控从整体维度到局部维度展示各项指标,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。
有了全链路监控工具,我们能够达到:
市场常见调用链技术:Zipkin,Pinpoint,SkyWalking,CAT。
是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用。特点是轻量,使用部署简单。
但是功能较简单。支持技术栈spring-cloud。
是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具,使用java编写。
特点是支持多种插件,UI功能强大,接入端无代码侵入。
使用java探针字节码增加技术,实现对整个应用的监控。对应用零侵入。
是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。
2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。
特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
其核心是个分布式追踪系统。使用java探针字节码增加技术,实现对整个应用的监控。对应用零侵入。
是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
集成方案是通过代码埋点的方式来实现监控,比如: 拦截器,注解,过滤器等。 对代码的侵入性很大,集成成本较高。风险较大。
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
实现方式 |
拦截请求,发送(HTTP,mq)数据至zipkin服务 |
java探针,字节码增强 |
java探针,字节码增强 |
代码埋点(拦截器,注解,过滤器等) |
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
接入方式 |
基于linkerd或者sleuth方式,引入配置即可 |
javaagent字节码 |
javaagent字节码 |
代码侵入 |
OpenTracing |
√ |
× |
√ |
× |
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
agent到collector通信 |
http,MQ |
thrift |
gRPC |
http/tcp |
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
颗粒度 |
接口级 |
方法级 |
方法级 |
代码级 |
全局调用统计 |
× |
√ |
√ |
√ |
traceid查询 |
√ |
× |
√ |
× |
报警 |
× |
√ |
√ |
√ |
JVM监控 |
× |
× |
√ |
√ |
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
数据存储 |
ES,mysql, |
Hbase |
ES,H2 |
mysql,hdfs |
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
健壮度 |
** |
***** |
**** |
***** |
类别 |
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库 |
ApacheHTTPClient,GoogleHttpClient, OkHttpClient |
ApacheHTTPClient, OkHttpClient,Feign |
Spring体系 |
spring,springboot |
spring,springboot,eureka,hystrix |
RPC框架 |
Dubbo,Thrift |
Dubbo,Motan,gRPC,ServiceComb |
NOSQL |
Memcached, Redis, CASSANDRA |
Memcached, Redis |
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
STAR |
8.4k |
5.9k |
3.3k |
4.9k |
类别 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
缺点 |
默认使用的http请求向zipkin上报信息,耗性能; |
不支持查询单个调用链, 对外表现的是整个应用的调用生态; |
3.2版本之前BUG较多 ,网上反映兼容性较差; |
代码侵入性较强,需要埋点; |
在目前的微服务或者分布式架构下,分布式追踪变得很重要,在开发测试中可以帮助我们更快发现架构或者一些设计有问题的地方,在生产上可以帮我们统计和分析服务器性能和一些部署相关的问题,还可以帮助我们解决或者分析一些未知的问题。
skywalking的定位是apm,不仅提供了自动分布式追踪,还可以通过手动埋探针的方式去处理我们的一些特殊问题。同时它还支持了很多中间件和jvm监控,这是目前一些分布式追踪技术未能解决的问题。
比如spring cloud sleuth zipkin技术,不能解决kafka等一些中间件和jvm的监控功能,也不支持自定义去追踪自己想要了解的链路信息。
在这些方面skywalking做的还是比较好,通过探针的方式来进行监控做到代码0侵入性,而开销也不是很大。
随着微服务架构的流行,一些微服务架构下的问题也会越来越突出。
比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。
所以会深深的感受到 "银弹" 这个词是不存在的,每种架构都有其优缺点 。
面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是所谓的APM(应用性能管理)。
Skywalking是一款APM(应用程序性能监视器),尤其适用于微服务,Cloud Native和基于容器的架构系统。也称为分布式跟踪系统。
它提供了一种自动检测应用程序的方法:无需更改目标应用程序的任何源代码; 以及具有高效流媒体模块的收集器。
针对分布式系统的APM(应用性能监控)系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构, 其核心是个分布式追踪系统。
该项目由国人吴晟基于OpenTracking实现的开源项目skywalking(码云、github)。
2017年12月8日,Apache软件基金会孵化器项目管理委员会 ASF IPMC宣布"SkyWalking全票通过,进入Apache孵化器"。
使用Skywalking实现全链路监控。
Zipkin与Apache SkyWalking共舞—SkyWalking分析 Zipkin 追踪数据。
SkyWalking的发展之路—从无名小卒到拥抱全球。
--https://github.com/apache/incubator-skywalking
SkyWalking:一种APM(应用程序性能监视器)系统,专为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)架构而设计。
SkyWalking: an APM(application performance monitor) system, especially designed for microservices, cloud native and container-based (Docker, Kubernetes, Mesos) architectures.
– http://www.iocoder.cn/SkyWalking/How-do-I-use-Skywalking-to-do-tracking-for-the-Dubbo-service/
– https://blog.csdn.net/zhangkang65/article/details/78991760
– https://github.com/apache/incubator-skywalking
apache官网:
Abstract
SkyWalking is an open source APM system, including monitoring, tracing, diagnosing capabilities for distributed system in Cloud Native architecture. The core features are following.
Service, service instance, endpoint metrics analysis
Root cause analysis
Service topology map analysis
Service, service instance and endpoint dependency analysis
Slow services and endpoints detected
Performance optimization
Distributed tracing and context propagation
Alarm
用于追踪、监控和诊断分布式系统,特别是为使用微服务架构,提供以下主要功能:
性能好,针对单实例5000tps的应用,在全量采集的情况下,只增加 10% 的CPU开销。详细评测见《skywalking agent performance test》。
支持多语言探针。
支持自动及手动探针。
自动探针:Java支持的中间件、框架与类库列表;
手动探针:OpenTrackingApi、@Trace注解、trackId集成到日志中。
采用探针技术,在使用过程中,完全是0代码,无侵入,分布式自动采集与监控系统运行。
--https://www.cnblogs.com/xiaoqi/p/skywalking-usage.html
– https://blog.csdn.net/qq_36236890/article/details/79647017
目前Skywalking已经支持从6个可视化维度剖析分布式系统的运行情况。
--https://github.com/apache/incubator-skywalking
--https://www.cnblogs.com/xiaoqi/p/skywalking-usage.html
– https://www.jianshu.com/p/2fd56627a3cf
说明:
上面的架构图看似模块有点多,但在实际使用时我们并不需要关注太多的实现方式,HTTP、gRPC 、GraphQL 这些都是其内部架构使用到的技术,我们只需安装 SkyWalking Collecter、Elasticsearch 或 H2,然后在需要追踪的服务内配置少量的代码(Java 项目通过修改 JVM 参数即可),最后通过 SkyWalking UI 查看结果。
--https://blog.csdn.net/zhangkang65/article/details/78991760
SkyWalking总体架构分为三部分
2.2.1、部署4部分
2.2.2、关系说明
通过在应用程序中添加 SkyWalking Agent,就可以将接口、服务、数据库、MQ等进行追踪,将追踪结果通过 HTTP 或 gRPC 发送到 SkyWalking Collecter。
SkyWalking Collecter 经过分析和聚合,将结果存储到 Elasticsearch 或 H2。
SkyWalking 同时提供了一个 SkyWalking UI 的可视化界面,UI 以 GraphQL + HTTP 方式获取存储数据进行展示。
(一)、环境部署--社区
1、网络
https://blog.csdn.net/y_h_d/article/details/83342846
https://blog.csdn.net/zhangkang65/article/details/78991760
2、端口修改skywalking 8080 端口 修改
https://my.oschina.net/ytqvip/blog/1793767
3、社区
docker环境:
https://www.cnblogs.com/liguobao/p/9686310.html
4、版本5.X
A类
es环境安装:
http://blog.51cto.com/zero01/2130696
高级特性
https://blog.csdn.net/jilo88/article/details/81355265
https://blog.csdn.net/SoberChina/article/details/79315242
https://blog.csdn.net/qq_42281649/article/details/82804703
5、独到总结
https://blog.csdn.net/qq_36236890/article/details/79647017
6、官方社区
https://github.com/OpenSkywalking/Community
7、高级部署
http://blog.51cto.com/536410/2318051
8、APM、Google
pass==++++https://www.cnblogs.com/xiaoqi/p/apm.html
(二)、环境部署-官方-文档
1、官方
中文
https://github.com/apache/incubator-skywalking/blob/5.x/docs/README_ZH.md
--英文
https://github.com/apache/incubator-skywalking
2、Docker
https://github.com/JaredTan95/skywalking-docker
3、如何构建项目
https://github.com/apache/incubator-skywalking/blob/master/docs/en/guides/How-to-build.md
(三)、高级特性
1、个性化服务过滤
https://github.com/apache/incubator-skywalking/blob/5.x/apm-sniffer/optional-plugins/trace-ignore-plugin/README_CN.md
https://blog.csdn.net/u013095337/article/details/80452088
2、版本、
https://github.com/SkywalkingTest/agent-integration-test-report#dubbo
(四)、理论、深入研究文章
1、架构设计-系列文章
https://github.com/apache/incubator-skywalking/blob/5.x/docs/cn/Architecture-CN.md
https://blog.csdn.net/Saphulot/article/details/81739411
pass==https://www.jianshu.com/p/2fd56627a3cf
2、全面深入分析
https://juejin.im/post/5a7a9e0af265da4e914b46f1
3、全面学习
http://www.iocoder.cn/categories/SkyWalking/
4、10加文章
https://juejin.im/post/5ab5b0e26fb9a028e25d7fcb
5、skywalking源码分析之javaAgent工具ByteBuddy的应用
http://www.kailing.pub/article/index/arcid/178.html
6、谷歌论文《 Dapper,大规模分布式系统的跟踪系统》
http://bigbully.github.io/Dapper-translation/
(五)、监控应用
https://www.jianshu.com/p/3ddd986c7581
https://www.cnblogs.com/huangxincheng/p/9666930.html
(六)、APM常见技术对比
https://blog.csdn.net/u012394095/article/details/79700200
https://www.jianshu.com/p/0fbbf99a236e
https://www.cnblogs.com/davidwang456/articles/8119047.html
(七)、UI
https://blog.csdn.net/qq_36236890/article/details/79647017
http://blog.zollty.com/b/archive/apm-comparison-of-skywalking-and-pinpiont.html