分布式链路追踪 SkyWalking基本原理
一、APM简介
APM(Application Performance Management)应用性能管理,通过各种探针采集并上报数据,收集关键指标,同时搭配数据展示以实现对应用程序性能管理和故障管理的系统化解决方案。
目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,这里主要介绍 SkyWalking ,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。
Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态等,而APM系统则更重视程序内部执行过程指标和服务之间链路调用情况的监控,APM更有利于深入代码找到请求响应“慢”的根本问题,与Zabbix之类的监控是互补关系。
二、分布式链路追踪
下图是常见的微服务的框架,4 个实例,2 个 MySQL、1 个 Redis。实际上它有两次完全不同的请求进来:有一次的一个请求会访问 Redis,再去访问 MySQL;另外一个可能走到另外的服务上,然后直接去 MySQL。整个分布式追踪的目的是什么?是为了让我们最终在页面上、UI上、和数据上能够复现这个过程。我们要拿到整个完整的链路,包括精确的响应时间,访问的方法、访问的 circle,访问的 Redis 的 key等,这些是我们在做分布式追踪的时候需要展现的一个完整的信息。
注:引自:使用Skywalking实现全链路监控
三、Apache Skywalking(Incubator)简介
1. Apache SkyWalking:
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
Apache Skywalking(Incubator) 专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。Apache Skywalking(Incubator)通过加载 探针-非侵入式 的方式收集应用调用链路信息,并对采集的调用链路信息进行分析,生成应用间关系和服务间关系以及服务指标。Apache Skywalking (Incubating)目前支持多种语言,其中包括Java,.Net Core,Node.js和Go语言。
2. Skywalking已经支持从6个可视化维度剖析分布式系统的运行情况。
- 总览视图(Global view)是应用和组件的全局视图,其中包括组件和应用数量,应用的告警波动,慢服务列表以及应用吞吐量;
- 拓扑图(topology view)从应用依赖关系出发,展现整个应用的拓扑关系;
- 应用视图()则是从单个应用的角度,展现应用的上下游关系,TopN的服务和服务器,JVM的相关信息以及对应的主机信息。- - 服务视图关注单个服务入口的运行情况以及此服务的上下游依赖关系,依赖度,帮助用户针对单个服务的优化和监控;
- 调用链(trace)展现了调用的单次请求经过的所有埋点以及每个埋点的执行时长;
- 告警视图(alarm)根据配置阈值针对应用、服务器、服务进行实时告警。
四、什么是 SkyWalking
- 是观察性分析平台和应用性能管理系统。
- 提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案.
- 支持Java, .Net Core, PHP, NodeJS, Golang, LUA语言探针
- 支持Envoy + Istio构建的Service Mesh
五、SkyWalking 原理架构图如下:
六、SkyWalking 核心模块介绍:
SkyWalking采用组件式开发,易于扩展,主要组件作用如下:
1. Skywalking Agent:链路数据采集tracing(调用链数据)和metric(指标)信息并上报,上报通过HTTP或者gRPC方式发送数据到Skywalking Collector
2. Skywalking Collector : 链路数据收集器,对agent传过来的tracing和metric数据进行整合分析通过Analysis Core模块处理并落入相关的数据存储中,同时会通过Query Core模块进行二次统计和监控告警
3. Storage: Skywalking的存储,支持以ElasticSearch、Mysql、TiDB、H2等主流存储作为存储介质进行数据存储,H2仅作为临时演示单机用。
4. SkyWalking UI: Web可视化平台,用来展示落地的数据,目前官方采纳了RocketBot作为SkyWalking的主UI
七、各模块组件视图简介
1. 仪表盘:查看全局服务基本性能指标
仪表盘主要包含Service Dashboard和Database Dashboard
-
Service Dashboard:有Global、Service、Endpoint、Instance面板,展示了全局以及服务、端点、实例的详细信息
-
Database Dashboard:展示数据库的响应时间、响应时间分布、吞吐量、SLA、慢SQL等详细信息,便于直观展示数据库状态
2.拓扑图:展示分布式服务之间调用关系:
-
SkyWalking能够根据获取的数据自动绘制服务之间的调用关系图,并能识别常见的服务显示在图标上,例如图上的tomcat、CAS服务
-
每条连线的颜色反应了服务之间的调用延迟情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息
展示服务的性能数据:
3. 链路追踪:可以根据需求,查看链路调用过程
- 显示请求的响应内部执行情况,一个完整的请求都经过了哪些服务、执行了哪些代码方法、每个方法的执行时间、执行状态等详细信息,快速定位代码问题。
4. 告警提示:
5. 指标数据对比
通过以上的简要介绍,简单的了解了SkyWalking 的适用场景、基本原理,同时也介绍SkyWalking UI 展示页面的基本功能。下篇,进入实践篇,动手安装SkyWalking以及部署JavaAgent。
更多特性请见:SkyWalking.apache.org