springboot从入门到实战开源的全链路追踪系统介绍及实践!

360影视 欧美动漫 2025-05-30 17:16 3

摘要:全链路追踪系统已经是大型互联网应用程序的必备中间件,被广泛应用于监控系统或调用链追踪系统。现在有很多的开源全链路追踪系统供大家使用。本节主要从开源的全链路追踪系统架构等方面介绍比较知名的调用链追踪工具。

全链路追踪系统已经是大型互联网应用程序的必备中间件,被广泛应用于监控系统或调用链追踪系统。现在有很多的开源全链路追踪系统供大家使用。本节主要从开源的全链路追踪系统架构等方面介绍比较知名的调用链追踪工具。

Dapper是谷歌公司内部的调用链追踪系统,该系统没有开源。谷歌公司在2010年发表了论文Dapper, a Large-Scale DistributedSystems Tracing Infrastructure,其中定义了追踪数据的格式、追踪方式及调用链追踪系统的架构等理论模型。大部分开源调用链追踪系统都是参照Dapper这篇论文提出的模型进行实现的。

如图7.3所示为Dapper收集数据的过程。Dapper对谷歌公司内部的通用框架都提供了装配工具,服务部署了这些装配工具后就会对调用链进行追踪,装配工具将追踪信息保存到机器的磁盘上,每台服务器上部署的Dapper daemon会将追踪信息收集到Dapper Collector上。

Dapper Collector根据各个服务上报的追踪信息中包含的traceId、spanId和parentSpanId组装成完整的调用链,同时注明每个环节的耗时,然后进行存储并提供查询功能。

Zipkin是Twitter公司按照Dapper论文中定义的追踪数据格式、追踪方式和架构进行了开发实现。Zipkin主要包括Collector、Storage和UI界面等组件,同时提供数据查询功能,如图7.4所示。

Zipkin的整个架构与Dapper非常类似,它装配了追踪工具的服务,首先将追踪信息上报给Transport,然后Collector对追踪信息进行处理、存储,最后前端UI通过调用API查询存储中的信息并进行展示。其中,Transport支持HTTP、Kafka等,Storage存储支持MySQL、ElasticSearch和Cassandra等。Zipkin的追踪是独立于开发语言的,只要满足Zipkin的追踪数据格式即可,它支持的框架包括Grpc、Spring Web、Spring Boot及Spring Cloud等。

Pinpoint是韩国的搜索公司Naver基于Google Dapper开发的一款开源分布式调用链追踪系统。Pinpoint对代码零侵入,运用了JavaAgent字节码增强技术,只需要添加启动参数即可使用。

如图7.5所示,Pinpoint框架的基本组成部分与Zipkin相似。

Pinpoint Collector作为收集组件,收集各种性能数据;PinpointAgent和服务一起运行,作为探针采集数据;Pinpoint Web UI是展示页面;HBase Storage作为存储组件,将采集到的数据存到HBase中。

Pinpoint使用字节码增强技术对服务进行埋点,追踪信息通过Thrift等方式上传到Pinpoint Collector, Pinpoint负责计算统计指标,并将实时结果和原始追踪信息都存入HBase,前端Web UI从HBase中读数据进行展示查询。

Pinpoint支持追踪的服务包括Spring Boot、Thrift和Dubbo等。

它采用字节码增强技术侵入服务,业务无须修改代码,具有实时统计展示、JVM实时监控及调用链追踪服务的特点。

Skywalking是国内开源的一款调用链追踪系统。2019年4月17日,SkyWalking成为Apache的顶级项目,当前支持的开发语言包括Java、.NET和Node.js等,数据存储支持MySQL和Elasticsearch等。

Skywalking跟Pinpoint一样,采用字节码注入的方式实现代码的无侵入,支持云原生,目前增长势头强劲,其架构如图7.6所示。

Skywalking在逻辑上包含4部分,分别是Probes、Platformbackend、Storage和UI。Probes主要用于收集和格式化数据;

Platform backend支持数据聚合、分析和处理;Storage用于数据存储,支持MySQL、H2和ElasticSearch等;Web UI用于数据的可视化。

开源的全链路追踪系统从架构上看包括以下几个方面。

1. 采集方式

采集方式就是通常所说的埋点。埋点是调用链追踪系统与业务服务交互的部分,该部分需要做到低消耗与低侵入。Pinpoint与Skywalking开源组件采用了字节码增强技术,可以做到低侵入。追踪数据的上传有两种方式,即HTTP和TCP。此外,也可以通过日志采集方式进行追踪。Skywalking的采集对吞吐量的影响比较小。

2. 数据计算

根据上传的追踪数据可以统计多维度指标,以了解服务的各种状态,如实时的QPS、调用延时、延时分布、服务状态监控及服务依赖关系拓扑图等。

3. 数据存储

原始数据量比较大,一般存储在HDFS、HBase、Elasticsearch和Cassandra等分布式数据库中。统计报表类数据的数据量比较小,需要具有快速地按时间检索的能力,一般存储在MySQL或时序数据库中。

4. 数据展示

调用链追踪系统的数据最终通过UI界面展示,其中包含许多查询指标和调用链树形展示。Pinpoint界面的展示效果更加丰富,Zipkin的拓扑局限于服务与服务之间。

7.1节与7.2节介绍了开源的全链路追踪系统的基本概念与技术框架。本节将讲解具体的使用示例,在以后的业务开发中,可以集成这些框架。

图7.7 Zipkin主页面

(3)为本地服务添加Zipkin的相关依赖:

org.springframework.cloud

spring-cloud-starter-sleuth

2.2.3.RELEASE

spring-cloud-sleuth-zipkin

图7.8 查找Trace信息

(6)单击信息即可进入详情页面,如图7.9所示。

图7.9 Trace的详细信息

图7.9展示了一次请求中Zipkin统计的信息,包括响应时间、http.method、http.path、mvc.controller.class、mvc.controller.method、traceId、spanId和parentId等。

Skywalking实践

Pinpoint与Skywalking都是使用Agent进行采集,其原理都是字节码增强技术。本节将介绍Skywalking与Spring Boot的集成示例。具体步骤如下:

(1)下载Skywalking包。访问

https://www.apache.org/dyn/closer.cgi/skywalking/,选择Skywalking包,如果使用Elasticsearch 7.x版本,则需要下载相关的

版本。本例选择不使用Elasticsearch包,版本是8.0.1。

下载并解压后,目录包含以下几个部分:

bin目录:主要存放启动脚本,包含oapService.sh和webappService.sh等。

config目录:oap服务的配置,包含一个配置文件application.yml。

agent目录:Skywalking的Agent,一般用来采集业务系统的日志。

webapp目录:Skywalking前端的UI界面服务。

直接单击bin目录下的startup.bat或startup.sh文件,即可启动oapService和Webapp服务。

(2)为应用程序配置启动参数。添加VM options为-javaagent:E:\\apache-skywalking-apm-8.0.1\\apache-skywalkingapm-bin\\agent\\skywalking-agent.jar;

将环境变量设置为W_AGENT_NAME=skywalking-test,然后启动本地服务,发送一次服务请求。

(3)打开Skywalking后台的UI页面,“仪表盘”页面可以监控到本地服务和当前端点,“拓扑图”页面用于展示调用的拓扑结构,“追踪”页面用于展示调用链的树状信息,如图7.10所示。

图7.10 Skywalking UI页面

来源:大数据架构师

相关推荐