一、链路追踪SkyWalking简介
在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往要涉及到多个服务。
互联网应用构建在不同的软件模块集上,这些软件模块,有可能是有不同的团队开发,可能使用不同的编程语言来实现,有可能不在几千台服务器,横跨多个不同的数据中心,也就意味着
这架构形式胡存在如下一些问题
Skywalking是一个可观测性分析平台和应用性能管理系统,它也是基于OpenTracing规范、开源的AMP系统。Skywalking提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。支持Java, .Net Core, PHP, NodeJS, Golang, LUA, c++代理。支持Istio +特使服务网格
- 如何快速发现问题?
- 如何判断故障影响范围?
- 如何树立服务依赖以及依赖的合理性?
- 符合拆分链路性能问题以及实时容量规划?
二、链路追踪介绍
分布式链路追踪(Distributed Tracing)就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、
每个服务街店的请求状态等等
Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。
三、功能和技术方案对比
Zipkin是Twitter开源的调用链路分析工具,目前基于Spingcloud sleuth得到了广泛的应用,特点是轻量,部署简单。
Pinpoint一个韩国团队开源的产品,运用了字节码增强技术,只需要在启动时添加启动参数即可,对代码无侵入,目前支持Java和PHP语言,底层采用HBase来存储数据,探针收集的数据粒度非常细,但性能损耗大,因其出现的时间较长,完成度也很高,应用的公司较多
Skywalking是本土开源的基于字节码注入的调用链路分析以及应用监控分析工具,特点是支持多种插件,UI功能较强,接入端无代码侵入。
CAT是由国内美团点评开源的,基于Java语言开发,目前提供Java、C/C++、Node.js、Python、Go等语言的客户端,监控数据会全量统计,国内很多公司在用,例如美团点评、携程、拼多多等,CAT跟下边要介绍的Zipkin都需要在应用程序中埋点,对代码侵入性强。
四、Skywalking架构
Skywalking agent和业务端绑定在一起,负责收集各种监控数据
Skywalking oapservice是负责处理监控数据,接受agent的数据并存储在数据库中,接受来自UI的请求,查询监控数据。
Skywalking UI提供给用户,展现各种监控数据和告警。
五、Skywalking的使用
Skywaking的启动
Skywalking核心功能
SkyWalking 核心功能:
- 服务、服务实例、端点指标分析。
- 服务拓扑图分析
- 服务、服务实例和端点(Endpoint)SLA 分析
- 慢查询检测
- 告警
SkyWalking 特点:
多语言自动探针,支持 Java、.NET Code 等多种语言。
为多种开源项目提供了插件,为 Tomcat、 HttpClient、Spring、RabbitMQ、MySQL 等常见基础设施和组件提供了自动探针。
微内核 + 插件的架构,存储、集群管理、使用插件集合都可以进行自由选择。
支持告警。
优秀的可视化效果
- agent目录将来要拷贝到各服务所在机器上用作探针
- bin目录是服务启动脚本
- config目录是配置文件
- oap-libs目录是oap服务运行所需的jar包
- webapp目录是web服务运行所需的jar包
接下来,要选择存储了,支持的存储有:
- H2
- ElasticSearch 6, 7
- MySQL
- TiDB
- InfluxDB
作为监控系统,这里使用mysql为例,在设置对应路径中添加swtest数据库,启动服务后即可添加对应表
之后将mysql驱动jar包添加到下面这个目录中
在对应的启动类环境中添加jvm参数
启动后在官方提供的链路追踪中即可访问到
SkyWalking 分为三个核心部分:
Agent(探针):Agent 运行在各个服务实例中,负责采集服务实例的 Trace 、Metrics 等数据,然后通过 gRPC 方式上报给 SkyWalking 后端。
OAP:SkyWalking 的后端服务,其主要责任有两个。
一个是负责接收 Agent 上报上来的 Trace、Metrics 等数据,交给 Analysis Core (涉及 SkyWalking OAP 中的多个模块)进行流式分析,最终将分析得到的结果写入持久化存储中。SkyWalking 可以使用 ElasticSearch、H2、MySQL 等作为其持久化存储,一般线上使用 ElasticSearch 集群作为其后端存储。
另一个是负责响应 SkyWalking UI 界面发送来的查询请求,将前面持久化的数据查询出来,组成正确的响应结果返回给 UI 界面进行展示。
UI 界面:SkyWalking 前后端进行分离,该 UI 界面负责将用户的查询操作封装为 GraphQL 请求提交给 OAP 后端触发后续的查询操作,待拿到查询结果之后会在前端负责展示。