目录
1、为什么要使用分布式链路追踪?(待补充)
2、 分布式链路追踪原理(待补充)
3、开源的分布式链路追踪解决方案
3.1 Twitter的Zipkin
Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。
ZipKin可以分为两部分,一部分是zipkin server,用来作为数据的采集存储、数据分析与展示;zipkin client是zipkin基于不同的语言及框架封装的一些列客户端工具,这些工具完成了追踪数据的生成与上报功能,架构如下:
在线演示地址:zipkin界面
3.2 韩国Naver的PinPoint
Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统、分布式跟踪系统。我们知道,前端向后台发起一个查询请求,后台服务可能要调用多个服务,每个服务可能又会调用其它服务,
最终将结果返回,汇总到页面上。如果某个环节发生异常,工程师很难准确定位这个问题到底是由哪个服务调用造成的,Pinpoint等相关工具的作用就是追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据,
方便工程师能够快速定位问题。Pinpoint 对代码的零侵入,运用JavaAgent字节码增强技术,只需要加启动参数即可。
- Pinpoint-Collector:收集各种性能数据
- Pinpoint-Agent:和自己运行的应用关联起来的探针
- Pinpoint-Web:将收集到的数据显示成WEB网页形式
- HBase Storage:收集到的数据存到HBase中
PinPoint管理控制台介绍:APM监控--(五)pinpoint使用手册
3.3 Apache的SkyWalking
参考文档:分布式全链路追踪 SkyWalking基本原理(一)
在线演示
3.3.1 简介
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(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)根据配置阈值针对应用、服务器、服务进行实时告警。
3.3.2 界面介绍
1. 仪表盘:查看全局服务基本性能指标
仪表盘主要包含Service Dashboard和Database Dashboard
-
Service Dashboard:有Global、Service、Endpoint、Instance面板,展示了全局以及服务、端点、实例的详细信息
-
Database Dashboard:展示数据库的响应时间、响应时间分布、吞吐量、SLA、慢SQL等详细信息,便于直观展示数据库状态
2.拓扑图:展示分布式服务之间调用关系:
-
SkyWalking能够根据获取的数据自动绘制服务之间的调用关系图,并能识别常见的服务显示在图标上,例如图上的tomcat、CAS服务
-
每条连线的颜色反应了服务之间的调用延迟情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息
3. 链路追踪:可以根据需求,查看链路调用过程
4. 告警提示:
5. 指标数据对比
3.4 Google的Dapper
Dapper是Google生产环境下的分布式跟踪系统,Dapper有三个设计目标:
低消耗:跟踪系统对在线服务的影响应该做到足够小。
应用级的透明:对于应用的程序员来说,是不需要知道有跟踪系统这回事的。如果一个跟踪系统想生效,就必须需要依赖应用的开发者主动配合,那么这个跟踪系统显然是侵入性太强的。
延展性:Google至少在未来几年的服务和集群的规模,监控系统都应该能完全把控住。
处理分为3个阶段:
①各个服务将span数据写到本机日志上;
②dapper守护进程进行拉取,将数据读到dapper收集器里;
③dapper收集器将结果写到bigtable中,一次跟踪被记录为一行。
Google的Dapper不开源 !!!!!
3.5 阿里的鹰眼
参考文档:阿里-鹰眼
关于淘宝的鹰眼系统,主要资料来自于内部分享:
鹰眼埋点和生成日志:
如何抓取和存储日志,记录本地文件,使用额外的后台进程定期(时间间隔小)收集日志。这种方式的优势在于对应用的性能影响小,方便做消息堆积;但是需要在每台业务server上都部署并管理日志收集agent,运维量比较大。
阿里的鹰眼不开源 !!!!!