1、第26卷第9期2023年9月软件工程 S O F T W A R E E N G I N E E R I N GVol.26 No.9Sep.2023文章编号:2096-1472(2023)09-0048-04DOI:10.19644/ki.issn2096-1472.2023.009.009收稿日期:2 0 2 3-0 2-2 2基于O p e n T e l e m e t r y+J a e g e r的分布式系统调用链路监控方案张爱华1,白金峰2 1.大连东软信息学院网络工程系,辽宁 大连 116023;2.欧普杰科技(大连)有限公司,辽宁 大连 ;摘 要:在分布式系统中,由于各个功能
2、模块的通信网络错综复杂,因此对于单一请求的调用链路监控与分析就显得尤为重要。文章在详细调研大部分分布式系统的通用结构和调用链路特征的基础上,设计了一套通用的分布式系统调用链路监控方案。该系统基于O p e n T e l e m e t r y(开源可观察性框架)对服务进行埋点采样及数据整体搜集,使用J a e g e r(分布式跟踪系统)对数据进行整理分析并进行可视化展示。使用该方案对分布式系统进行监控,可以快速发现系统中存在的链路问题并监控服务健康程度,使分布式系统的运行更加稳定,能给用户带来更好的体验。关键词:分布式系统;链路监控;O p e n T e l e m e t r y;J
3、a e g e r中图分类号:T P 3 9 1 文献标志码:AD e s i g n o f D i s t r i b u t e d S y s t e m C a l l L i n k M o n i t o r i n g B a s e d o n O p e n T e l e m e t r y a n d J a e g e rZHANG Aihua1,BAI Jinfeng2 1.Department of Network Engineering,Dalian Neusoft University of Information,Dalian 116023,China;2.
4、OpenJaw Technology(Dalian)Co.,Ltd.,Dalian 116023,C;A b s t r a c t:In distributed systems,monitoring and analyzing the call link of a single request is particularly important due to the complex communication networks of various functional modules.After a detailed investigation of the general structu
5、re and call link characteristics of most distributed systems,the paper proposes to design a universal distributed system call link monitoring scheme.OpenTelemetry(an open source observability framework)is used for buried point sampling and overall data collection of services,and Jaeger(a distributed
6、 tracing system)is used to organize,analyze,and visualize the data.By using this scheme to monitor distributed systems,it is possible to quickly identify link issues in the system and monitor service health,making the operation of the distributed system more stable and providing users with a better
7、experience.K e y w o r d s:distributed system;link monitoring;OpenTelemetry;Jaeger0引言(I n t r o d u c t i o n)随着互联网移动应用的兴起,一种新的计算机应用系统服务架构-分布式架构应运而生。但是,随着分布式架构方案的使用越来越多,该架构的缺点慢慢显现出来,首当其冲的就是调用链路的问题1。随着分布式系统中服务数量的增加,其相互调用的关系网络也变得错综复杂,无论是系统的开发人员,还是维护人员,都因为无法追踪一个请求的调用链路而犯难。本文针对这一情况,提供了一种通用的调用链路监控方案,细化每一
8、个服务接口的粒度。在本方案中,既可以通过可视化界面的方式查询应用接口的调用流程、错误率、负载强度,又可以通过图示的方式查看系统的调用结构。通过使用本文中提供的监控方案,系统开发人员可以快速第 26卷第 9期张爱华等:基于 OpenTelemetry+Jaeger 的分布式系统调用链路监控方案追踪系统中任意服务的调用步骤、执行的命令或者参数,方便快速排查问题;运维人员可以实时查看系统中每一个服务接口的负载压力与错误率,可以提前预判服务状态。1系统需求(S y s t e m r e q u i r e m e n t s)分布式链路监控系统的主要用户为系统的开发人员和维护人员。图1为系统开发人员
9、的需求。系统开发人员希望使用该系统查看应用的调用链路、接口耗时、调用步骤中的应用信息、参数、环境信息等,还需要查看系统的整体调用网络。图1 开发人员需求F i g.1 D e v e l o p e r r e q u i r e m e n t s如图2所示,系统维护人员希望能够查询系统的调用链路,每个接口的负载状况、错误率等信息。图2 运维人员需求F i g.2 O p e r a t o r r e q u i r e m e n t s2系统设计(S y s t e m d e s i g n)2.1技术路线系统服务端采用B/S架构,前端和后端基于H T T P协议进行通信,数据格式使
10、用J S O N。前端使用的是N o d e J S+R e a c t技术,通过N o d e J S查询S e r v e r端数据,然后结合R e a c t构造的模块化页面展示实现动态响应。系统后端使用的是G o l a n g语言,该语言自身的协程设计使其非常适合应用在处理高并发请求环境中,并且构建后的可执行产物体积小、启动方便。服务埋点以J a v a应用为例,使用的是J a v a语言本身支持的J a v a A g e n t方案,通过J a v a A g e n t挂载到应用本身的J a v a虚拟机(J a v a V i r t u a l M a c h i n e,
11、J VM)中。该方案对应用本身没有任何的代码侵入,业务应用不需要任何改造即可轻松集成A g e n t。E l a s t i c S e a r c h是一款分布式的搜索和分析引擎,该引擎可以使链路监控的数据搜集部分与展示部分解耦1。A g e n t在应用层面搜集到的应用运行数据和 日 志 等 信 息 上 报 给E l a s t i c S e a r c h引擎,引擎对数据进行存储和索引,页面展示部分从E l a s t i c S e a r c h中读取并分析数据,然后展示到页面上。O p e n T e l e m e t r y C o l l e c t o r是一款设备无关
12、性的新兴采集器。在以往的分布式系统度量数据采集方案中使用的采集器一般与技术栈绑定,一旦选择了某个技术栈中的一个工具,则后续拓展必须使用该技术栈下的其他工具。例如,在搜集应用日志时,一旦选择了使用f i l e b e a t,则后续的日志存储只能选择E l a s t i c S e a r c h,日 志 展 示 与 分 析 也 只 能 选 择K i b a n a。O p e n T e l e m e t r y C o l l e c t o r的出现打破了这一局限性,它支持从多个输入端采集数据,然后通过自定义的P r o c e s s o r处理,处理后又可以从多个输出端输出数据,
13、方便随时替换度量数据的搜集器和分析器。J a e g e r是 一 款 新 型 的 链 路 分 析 工 具,它 包 含A g e n t、A n a l y z e r、Q u e r y U I等组件。本文使用J a e g e r的A n a l y z e r和Q u e r y U I组件,其中A n a l y z e r用来分析链路数据和服务的网络结构,Q u e r y U I用来查询和展示分析后的链路和调用网络。P r o m e t h e u s是一款存储应用度量数据的工具,它提供了一种基于时间轴的新型数据存储和管理方案,可以很好地记录某一指标随着时间变化而变化的值2;同时
14、,它还提供一套类似于结构化查询语言(S t r u c t u r e d Q u e r y L a n g u a g e,S Q L),通过使用其提供的查询语言可以方便地从各个维度查询度量数据。2.2系统架构2.2.1整体架构系统的整体架构如图 3所示,系统中存在多个业务应用(B u s i n e s s A p p l i c a t i o n),并且每一个业务应用都挂载了一个A g e n t用来收集应用的度量数据和运行时的状态数据3。A g e n t收 集 数 据 后 会 发 送 给O p e n T e l e m e t r y C o l l e c t o r,C o
15、 l l e c t o r对数据进行处理后,根据不同的数据类型分别发送给J a e g e r C o l l e c t o r搜 集 器 和P r o m e t h e u s数 据 库。J a e g e r C o l l e c t o r对数据做筛选,加标签处理后存入E l a s t i c S e a r c h中等待分析和展示,E l a s t i c S e a r c h中的数据会定时由S p a r k J o b获取并计算调用网络,计算后的结果会再次存储至E l a s t i c S e a r c h中。J a e g e r Q u e r y 服 务 负
16、 责 根 据 用 户 的 需 求 将 数 据 从E l a s t i c S e a r c h和P r o m e t h e u s中取出并通过用户界面(U s e r I n t e r f a c e,U I)进行相应的展示。图3 系统整体架构F i g.3 O v e r a l l s t r u c t u r e o f t h e s y s t e m94软件工程2023年9月2.2.2高可用节点集群方案为保证系统处于高可用状态(如图 4所示),系统中的O p e n T e l e m e t r y C o l l e c t o r、J a e g e r C o
17、l l e c t o r和J a e g e r Q u e r y等组件都可以使用集群化部署,根据系统压力进行水平扩容4。图4 高可用节点集群F i g.4 H i g h a v a i l a b i l i t y n o d e c l u s t e r同时,开源组件E l a s t i c S e a r c h和P r o m e t h e u s也支持高可用的集群化部署,多节点通过访问单一存储系统实现数据一致性,开源组件高可用方案如图 5所示5。图5 开源组件高可用方案F i g.5 H i g h a v a i l a b i l i t y s o l u t i
18、 o n f o r o p e n s o u r c e c o m p o n e n t s3系统实现(S y s t e m i m p l e m e n t a t i o n)3.1节点分配如表1所示,搭建一个最小集群共需要6台机器,可以选择在虚拟机中创建这些机器并分配为固定I P。其中,用来部署E l a s t i c S e a r c h的机器需要分配足够的内存(建议不小于8 G B)和存储(不小于5 0 G B);用来部署P r o m e t h e u s的机器需要分配足够的存储(不小于5 0 G B);用来部署C o l l e c t o r的两台机器需要分配
19、足够的C P U(不小于双核),以满足运算需要。表 1 系统机器分配列表T a b.1 S y s t e m m a c h i n e a l l o c a t i o n l i s t机器I P机器用途备注1 9 2.1 6 8.1 0.1O p e n T e l e m e t r y C o l l e c t o rC P U需要多分配1 9 2.1 6 8.1 0.2J a e g e r C o l l e c t o rC P U需要多分配1 9 2.1 6 8.1 0.3J a e g e r Q u e r y无特殊要求1 9 2.1 6 8.1 0.4E l a
20、s t i c S e a r c h存储、内存多分配1 9 2.1 6 8.1 0.5P r o m e t h e u s存储多分配1 9 2.1 6 8.1 0.6U I&S p a r k J o b无特殊要求3.2应用的配置与部署由于开源组件E l a s t i c S e a r c h和P r o m e t h e u s的部署方案在官网 或 者 网 络 上 有 很 多 相 关 资 料,故 在 此 不 做 赘 述。O p e n T e l e m e t r y C o l l e c t o r的部署重点是配置文件的编写,需要配置C o l l e c t o r的输入监
21、听、数据处理器和输出监听。输入监听使用的是J a e g e r格式数据的监听方案,数据处理器使用S p a n M e t r i c s方案将度量数据与链路数据进行拆分,输出监听分别需要P r o m e t h e u s 和J a e g e r C o l l e c t o r。配置文件的具体内容如图 6所示。图6 O p e n T e l e m e t r y c o l l e c t o r 配置文件F i g.6 C o n f i g u r a t i o n f i l e o f O p e n T e l e m e t r y c o l l e c t o
22、 rJ a e g e r C o l l e c t o r可以使用官网上的二进制文件,然后通过命令行参数的方式直接启动该应用即可,主要的命令行参数包括指定存储类型、索引前缀名称等。将下载好的二进制文件放在/o p t/a p p/j a e g e r/j a e g e r-c o l l e c t o r中,则可以使用图7中的命令启动J a e g e r C o l l e c t o r。图7 J a e g e r 收集器命令行启动参数F i g.7 S t a r t u p p a r a m e t e r s o f J a e g e r c o l l e c t
23、o r c o mm a n d l i n eJ a e g e r Q u e r y 和J a e g e r U I的启动方式与J a e g e r C o l l e c t o r的启动方案类似,这里不再赘述。3.3业务服务A g e n t配置以J a v a应用为例,使用J a v a A g e n t的方案进行配置6。该方案需要准备收集数据的A g e n t.j a r和应用相关的参数配置文件,应用配置文件内容详解如图 8所示。更新参数配置文件后,需要对业务服务的启动命令进行改造,将a g e n t和a g e n t使用的应用参数配置文件加入启动命令中,应用启动参数
24、的修改如图 9所示。05第 26卷第 9期张爱华等:基于 OpenTelemetry+Jaeger 的分布式系统调用链路监控方案图8 A g e n t 应用相关参数配置F i g.8 A g e n t a p p l i c a t i o n r e l a t e d p a r a m e t e r c o n f i g u r a t i o n图9 应用启动参数的修改F i g.9 M o d i f i c a t i o n o f a p p l i c a t i o n s t a r t u p p a r a m e t e r s4系统测试(S y s t e
25、 m t e s t i n g)4.1服务应用A g e n t测试系统采用的是A g e n t挂载到业务应用上的启动方案,所以对A g e n t的测试可通过应用打印的启动日志进行查看7。在应用启动的过程中,可以通过观察应用的输出日志判断A g e n t是否成功挂载到应用上。经测试,A g e n t已经成功挂载到应用上。4.2链路监控系统测试对链路监控系统的测试,可以通过访问应用接口和提升应用接口压力的方案实现。通过访问业务应用的接口,然后在本系统中查看追踪到的链路即可确认链路上报与监控功能是否可用8。经测试,系统的链路监控功能可用,链路监控页面测试结果如图1 0所示。图1 0 链路
26、监控页面测试结果F i g.1 0 T e s t r e s u l t s l i n k m o n i t o r i n g p a g e4.3指标展示测试对系统的指标展示的测试,可以通过给指定应用增加访问压力迫使指标数据出现波动的方案实现。经测试,系统指标展示功能可用。系统指标数据页面测试结果如图1 1所示。图1 1 指标数据页面测试结果F i g.1 1 T e s t i n g r e s u l t s o f i n d i c a t o r d a t a p a g e4.4其他测试除了上述几项重要功能测试,本文还对系统的其他分支功能如链路步骤查询、链路标签查询、
27、链路中某一步骤参数与结果分析、链路对比、服务网络分析等进行测试,测试结果均正常,各项功能均可用。4.5测试结果总结系统共设计了功能性测试用例共3 5个,执行成功3 5个;设计了非功能性测试1 2个,成功执行了1 2个;设计了性能测试共3项,在单节点状态下,服务接口成功率达9 9.9 7%,系统资源占用稳定,没有内存泄漏和C P U占用率过高的情况。5结论(C o n c l u s i o n)本文提出的链路监控方案与传统的链路监控方案相比,对业务应用的侵入几乎可以忽略不计,对业务应用的性能影响非常小。同时,提供了更全面、详细的各项链路指标,方便系统的开发和维护人员快速排查、定位问题。同时,系
28、统的可拓展性非常强,既可以兼容现有比较主流的链路监控插件,也可以支持个性化的链路监控指标配置。参考文献(R e f e r e n c e s)1 李传根.E l a s t i c s e a r c h数据存储策略研究D.重庆:重庆邮电大学,2 0 1 9.2 刘小磊,程伟华,章路进.基于P r o m e t h e u s的云计算资源全链 路 监 控 系 统 J.电 子 设 计 工 程,2 0 2 3,3 1(2):1 7 0-1 7 4.3 张华兵,周英耀,徐磊,等.基于微服务架构的电力信息系统全链路监控技术J.沈阳工业大学学报,2 0 2 2,4 4(4):4 0 9-4 1 4.
29、4 张智强,郭龙,赵雷,等.分布式软件开发与系统集成平台的研究J.物联网技术,2 0 2 0,1 0(6):6 7-7 0,7 5.5 夏刚.数据中心基础设施高可用提升研究与实践J.中国金融电脑,2 0 2 2(5):8 3-8 5.6 李庆民.基于j a v a的软件a g e n t开发环境的分析J.数字技术与应用,2 0 1 7(1):1 8 9.7 K A D A B,KHA L I D M,S HA I KH M S.D i s t r i b u t e d c o o p-e r a t i v e c o n t r o l o f a u t o n o m o u s m
30、u l t i-a g e n t U A V s y s t e m s u-s i n g s m o o t h c o n t r o lJ.J o u r n a l o f S y s t e m s E n g i n e e r i n g a n d E l e c t r o n i c s,2 0 2 0,3 1(6):1 2 9 7-1 3 0 7.8 P O S H T K OH I A,G HA Z N A V I-G HO U S H C H I M B.I m-p l e m e n t i n g p a r a l l e l a n d d i s t r i b u t e d s y s t e m sM.B o c a R a-t o n:C R C P r e s s,2 0 2 2:1 6-2 2.作者简介:张爱华(1 9 8 1-),女,硕士,讲师。研究领域:D e v O p s,网络工程,软件开发。白金峰(1 9 9 7-),男,本科,工程师。研究领域:L i n u x,分布式系统,D e v O p s。15