多租户下分布式链路跟踪方法、系统、设备以及存储介质与流程

文档序号:17474891发布日期:2019-04-20 06:03阅读:207来源:国知局
本发明涉及计算机
技术领域
:,尤其涉及一种多租户下分布式链路跟踪方法、系统、设备以及存储介质。
背景技术
::随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构和容器技术的兴起,看似简单的一个应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成。当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,zipkin分布式跟踪系统就能很好的解决这样的问题。zipkin的设计是基于谷歌的googledapper论文。在zipkin中,每个应用程序向zipkin报告定时数据,zipkinui呈现了一个依赖图表来展示多少跟踪请求经过了每个应用程序,如果想解决延迟问题,可以过滤或者排序所有的跟踪请求,并且可以查看每个跟踪请求占总跟踪时间的百分比。现有技术zipkin存在如下缺点:(1)、不能适应多租户环境,不能根据租户相关的信息查询链路(2)、不能根据链路的价值决定是否保存链路信息,导致链路数据随着系统运行暴增,界面查询响应很慢。技术实现要素:有鉴于此,本发明的目的在于提供一种多租户下分布式链路跟踪方法、系统、设备以及存储介质,能够适用于多租户环境,且优化链路信息的保存以及查询响应。本发明实施例提供了一种多租户下分布式链路跟踪方法,包括:接收应用服务提交的日志数据,将所述日志数据添加至内存缓冲队列;其中,所述日志数据包括租户信息以及链路信息;通过调度处理线程将内存缓冲队列中的日志数据存储在预定的数据结构中;通过多个消费者线程从所述存储结构中获取日志数据,并根据所述日志数据中的链路信息判断日志数据的价值;将有价值的日志数据存入预设的数据库中,以在接收到查询请求时,进行相应日志数据的展示;其中,所述日志数据中的租户信息分离保存在所述数据库的预定字段中。优选地,所述链路信息包括链路耗时信息以及链路错误标识;则当链路的链路耗时大于预设时间阈值或者错误标识为错误时,相应的日志数据具有价值。优选地,所述将有价值的日志数据存入预设的数据库中,以在收到查询时,进行相应日志数据的展示,具体包括:对日志数据中的信息进行分离,将必要的信息保存在第一字段,其余信息完整的保存在第二字段中,以获得处理后的日志数据;将处理后的日志数据中的有价值的日志数据保存在数据库中,以供通过ui界面对数据库中的日志数据进行查询以及展示。优选地,所述数据结构为队列或者数据库。优选地,在将所述日志数据添加至内存缓冲队列之后,还包括:在成功将所述日志数据添加至内存缓冲队列后,生成返回值,并将所述返回值发送至所述应用服务。本发明实施例还提供了一种多租户下分布式链路跟踪系统,包括:接口模块,用于接收应用服务提交的日志数据,将所述日志数据添加至内存缓冲队列;其中,所述日志数据包括租户信息以及链路信息;调度处理模块,用于通过调度处理线程将内存缓冲队列中的日志数据存储在预定的数据结构中;消费者模块,用于通过多个消费者线程从所述存储结构中获取日志数据,并根据所述日志数据中的链路信息判断日志数据的价值;日志数据处理模块,用于将有价值的日志数据存入预设的数据库中,以在接收到查询请求时,进行相应日志数据的展示;其中,所述日志数据中的租户信息分离保存在所述数据库的预定字段中。优选地,所述链路信息包括链路耗时信息以及链路错误标识;则当链路的链路耗时大于预设时间阈值或者错误标识为错误时,相应的日志数据具有价值。优选地,所述日志数据处理模块具体包括:分离单元,用于对日志数据中的信息进行分离,将必要的信息保存在第一字段,其余信息完整的保存在第二字段中,以获得处理后的日志数据;保存单元,用于将处理后的日志数据中的有价值的日志数据保存在数据库中,以供通过ui界面对数据库中的日志数据进行查询以及展示。本发明实施例还提供了一种多租户下分布式链路跟踪设备,包括存储器、处理器以及存储在所述存储器内的计算机程序,所述处理器能够执行所述计算机程序,以实现如上述的多租户下分布式链路跟踪方法。本发明实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在的设备的处理器执行,以实现如上述的多租户下分布式链路跟踪方法。上述实施例中,在遵循opentracing标准的基础上,在协议中增加了必要的租户信息,最终将租户信息分离保存在数据库字段中,供界面查询,实现了多租户环境下的应用。另外,在保存日志数据时,对链路信息的价值进行判断,筛选有价值的链路信息进行入库处理,防止链路数据暴增过快而引起的查询响应慢以及存储压力的问题。附图说明图1是本发明第一实施例提供的多租户下分布式链路跟踪方法的流程示意图。图2是本发明第一实施例提供的一种ui界面示意图。图3是本发明第二实施例提供的多租户下分布式链路跟踪系统的结构示意图。图4是本发明第二实施例提供的多租户下分布式链路跟踪系统的工作原理图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。参见图1,本发明第一实施例提供了一种多租户下分布式链路跟踪方法,包括:s101,接收应用服务提交的日志数据,将所述日志数据添加至内存缓冲队列;其中,所述日志数据包括租户信息以及链路信息。在本实施例中,在多租户技术中,租户(tenant)是指使用系统或计算资源的用户,包含在系统中可识别为指定用户的一切数据,比如在系统中创建的账户与统计信息(accountingdata),以及在系统中设置的各式数据和用户所设置的客户化应用程序环境等。以公有云为例,云服务提供商所设计的应用系统会容纳数个以上的租户在同一个环境下使用。比如亚马逊公司就在其数据中心为上千个企业用户提供虚拟服务器,这些企业就是租户。在私有云的环境中,租户则变成了企业或政府中对it资源占用的各个部门。为了适用于多租户的环境,本实施例在遵循opentracing标准协议的基础上,在协议中增加了相关的租户信息。应用服务提交的日志数据中除了包含原有的链路信息外,还需要进一步包括租户信息,表示该日志数据由哪个租户产生。其中,一般来说,原有的链路信息包括如下:应用服务名、账号、错误标志、spancount(trace中的span的数量,span是zipkin基本工作单元,一次链路调用创建一个span;trace是类似于树结构的span集合,表示一条调用链路)、链路耗时以及时间戳。当然,具体可视场景需求增加或减小相应的信息,这些方案均在本发明的保护范围之内。需要说明的是,在本实施例中,在成功将所述日志数据添加至内存缓冲队列后,需生成返回值并将所述返回值发送至所述应用服务。s102,通过调度处理线程将内存缓冲队列中的日志数据存储在预定的数据结构中。在本实施例中,所述数据结构可以是队列或者是数据库,本发明不做具体限定。s103,通过多个消费者线程从所述存储结构中获取日志数据,并根据所述日志数据中的链路信息判断日志数据的价值。由于链路跟踪的目的是发现那些可能存在问题的链路,因此当链路耗时大于设定的阈值或者链路发生了错误(例如错误标志为错误)才是有价值的链路。为此,在本实施例中,可提取每个链路信息的链路耗时信息以及错误标志信息,以判断每个链路是否有价值。此外,通过多个消费者线程同时并行的提取以及处理所述数据结构中的日志数据,可提高日志数据的处理效率。s104,将有价值的日志数据存入预设的数据库中,以在接收到查询请求时,进行相应日志数据的展示。如图2所示,在本实施例中,在将所述日志数据存入所述数据库中,会分离所述日志数据中的租户信息,并将租户信息保存在数据库的预定字段(如图2中的租户编码字段)中。当用户通过ui界面对所述数据库进行查询时,可根据该预定字段实现基于租户信息的链路查询。当然,也可以通过其他字段进行查询,具体视实际情况而定。其中,在接收到查询请求时,将与查询请求对应的日志数据返回至所述ui界面进行展示,以供用户查看以分析链路的情况,从而发现可能存在的服务异常。综上所述,本实施例中,在遵循opentracing标准的基础上,在协议中增加了必要的租户信息,最终将租户信息分离保存在数据库字段中,供界面查询,实现了多租户环境下的应用。另外,在保存日志数据时,对链路信息的价值进行判断,筛选有价值的链路信息进行入库处理,防止链路数据暴增过快而引起的查询响应慢以及存储压力的问题。在上述实施例的基础上,在本发明的一个优选实施例中,步骤s104具体包括:对日志数据中的信息进行分离,将必要的信息保存在第一字段,其余信息完整的保存在第二字段中,以获得处理后的日志数据。将处理后的日志数据中的有价值的日志数据保存在数据库中,以供ui界面对日志数据进行查询以及界面展示。考虑到zipkin默认的存储结构比较分散,当链路数据随着系统运行暴增时会导致界面查询链路很慢。本实施例在对日志数据进行存储时,对存储结构进行了优化,以优化查询。具体地,本实施例从日志数据中分离出必要的信息,并保存在单独的第一字段中,其余信息则完整的保存在第二字段中,通过合理的信息分离保存单独字段中并加入适当索引以起到提高查询速度的效果。以如下的日志数据为例:{"@timestamp":"2018-03-14t09:03:09.434+00:00","severity":"debug","service":"trace-2","tenantcode":"1008200","accountcode":"richardlu","status":"true","trace":"28b1c8587cbc1ede","span":"8c09a75c740dafa5","exportable":"false","pid":"8460","thread":"http-nio-8080-exec-6","class":"o.s.web.servlet.dispatcherservlet","rest":"dispatcherservletwithname'dispatcherservlet'processinggetrequestfor[/trace-2]"}{"@timestamp":"2018-03-14t09:03:09.445+00:00","severity":"debug","service":"trace-2","tenantcode":"1008200","accountcode":"richardlu","status":"false","trace":"28b1c8587cbc1ede","span":"8c09a75c740dafa5","exportable":"false","pid":"8460","thread":"http-nio-8080-exec-6","class":"o.s.web.servlet.dispatcherservlet","rest":"last-modifiedvaluefor[/trace-2]is:-1"}其中,必要信息为多租户环境下标记调用链路的最基本信息,对应为[应用名称,租户编码,账号,traceid,spanid,status]如:[trace-2,1008200,richardlu,f410ab57afd5c145,b789118fa2019777,true]。其中:trace-2:应用名称,记录了微服务的唯一标志;1008200:租户编码,标示当前调用微服务的租户;richerlu:账号,标示当前调用微服务的账号;f410ab57afd5c145:traceid,标示一条请求链路,一条请求链路中包含一个traceid,多个spanid;b789118fa2019777:spanid,表示一个基本的工作单元,比如:发送一个http请求;true:调用状态,true为正常,false为错误。在本实施例中,将以上必要信息保存为第一字段,并建立gin(generalizedinvertedindex,通用倒排索引),通用倒排索引是一个存储对(key,postinglist)集合的索引结构,其中key是一个键值,而postinglist是一组出线过key的位置,通过gin索引结构可以快速的查找到包含指定关键字的元组,特别适合多值类型的元素搜索,如类似[应用名称,租户编码,账号,traceid,spanid,status]数组中元素的搜索。请参阅图3及图4,本发明第二实施例还提供了一种多租户下分布式链路跟踪系统,包括:接口模块10,用于接收应用服务提交的日志数据,将所述日志数据添加至内存缓冲队列;其中,所述日志数据包括租户信息以及链路信息;调度处理模块20,用于通过调度处理线程将内存缓冲队列中的日志数据存储在预定的数据结构中;消费者模块30,用于通过多个消费者线程从所述存储结构中获取日志数据,并根据所述日志数据中的链路信息判断日志数据的价值;日志数据处理模块40,用于将有价值的日志数据存入预设的数据库中,以在接收到查询请求时,进行相应日志数据的展示;其中,所述日志数据中的租户信息分离保存在所述数据库的预定字段中。优选地,所述链路信息包括链路耗时信息以及链路错误标识;当所述链路耗时大于预设时间阈值或者所述链路的错误标识为错误时,则相应的日志数据具有价值。优选地,所述日志数据处理模块40具体包括:分离单元,用于对日志数据中的信息进行分离,将必要的信息保存在第一字段,其余信息完整的保存在第二字段中,以获得处理后的日志数据;保存单元,用于将处理后的日志数据中的有价值的日志数据保存在数据库中,以供ui界面对日志数据进行查询以及界面展示。优选地,还包括:返回值模块,用于在成功将所述日志数据添加至内存缓冲队列后,生成返回值,并将所述返回值发送至所述应用服务。需要说明的是,上述实施例中的方法,可由服务器或者移动终端通过执行预定的计算机程序来实现。示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段。所述服务器以及移动终端可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述部件仅仅是部分示例,并不构成具体的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备、总线等。所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述基于偏差自校正的改进相似日短期负荷预测设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据移动终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。其中,所述服务器或者移动终端集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1