日志处理方法、装置、计算机设备及存储介质转让专利

申请号 : CN201910816720.8

文献号 : CN110502494B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 欧二强邓鑫鑫沈仁奎

申请人 : 北京思维造物信息科技股份有限公司

摘要 :

本发明实施例公开了一种日志处理方法、装置、计算机设备及存储介质。所述方法包括:分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形成;根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析;如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储;如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储。本发明实施例可以减少日志的存储量同时降低采集数据的失真率。

权利要求 :

1.一种日志处理方法,其特征在于,包括:分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形成;

根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析;

如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链涉及的链路日志进行存储;

如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链涉及的链路日志进行存储;

其中,所述如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链涉及的链路日志进行存储,包括:如果在预设间隔时间内各所述服务节点在工作过程中产生的全部调用链的链路日志数据中均不存在服务节点错误的信息,且计算得到的各所述调用链的消耗时间的变化值均小于设定阈值,则确定各所述服务节点在工作过程中均处于稳定状态,并按照各所述调用链的产生时刻,对各所述调用链涉及的链路日志进行周期性存储。

2.根据权利要求1所述的方法,其特征在于,所述如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链涉及的链路日志进行存储,包括:如果所述服务节点在工作过程中产生的调用链的链路日志数据中记录有服务节点错误的信息,则确定所述服务节点在工作过程中存在异常状态,并对所述调用链涉及的链路日志进行存储;

如果所述服务节点在工作过程中产生的调用链的链路日志数据中不存在服务节点错误的信息,且根据所述链路日志数据,计算得到的所述调用链的消耗时间的变化值大于等于设定阈值,则确定所述服务节点在工作过程中存在异常状态,并对所述调用链涉及的链路日志进行存储。

3.根据权利要求1所述的方法,其特征在于,所述按照各所述调用链的产生时刻,对各所述调用链涉及的链路日志进行周期性存储,包括:根据各所述调用链的链路日志数据,获取各所述调用链的产生时刻;

如果所述调用链的产生时刻与周期存储时刻的时间差大于等于所述预设间隔时间,则存储所述调用链涉及的链路日志,并根据当前系统时间更新周期存储时刻。

4.根据权利要求1所述的方法,其特征在于,所述分别获取至少一个调用链的链路日志数据,包括:

从消息队列中读取日志数据;

根据多条所述日志数据中的链路标识信息,分别对各所述日志数据进行统计整合,形成至少一个调用链的链路日志数据。

5.根据权利要求1所述的方法,其特征在于,所述日志数据通过日志收集器采用全量收集方式收集日志数据,并根据链路标识信息对收集到的日志数据进行统计整合,得到属于一个调用链的日志数据,写入同一消息队列中。

6.根据权利要求2所述的方法,其特征在于,所述调用链的消耗时间的变化值基于如下公式进行计算:

其中,tv为所述调用链的消耗时间的变化值;tcost为所述调用链的产生时刻与结束时刻之间的时间;rv为预设值。

7.一种日志处理装置,其特征在于,包括:链路日志数据获取模块,用于分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形成;

服务节点状态分析模块,用于根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析;

异常存储模块,用于如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链涉及的链路日志进行存储;

稳定存储模块,用于如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链涉及的链路日志进行存储;

其中,所述稳定存储模块,包括:服务节点稳定判断单元,用于如果在预设间隔时间内各所述服务节点在工作过程中产生的全部调用链的链路日志数据中均不存在服务节点错误的信息,且计算得到的各所述调用链的消耗时间的变化值均小于设定阈值,则确定各所述服务节点在工作过程中均处于稳定状态,并按照各所述调用链的产生时刻,对各所述调用链涉及的链路日志进行周期性存储。

8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1‑6中任一所述的日志处理方法。

9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1‑6中任一所述的日志处理方法。

说明书 :

日志处理方法、装置、计算机设备及存储介质

技术领域

[0001] 本发明实施例涉及网络领域,尤其涉及一种日志处理方法、装置、计算机设备及存储介质。

背景技术

[0002] 为了支撑日益复杂的业务和增长的请求,业界大量使用微服务架构。在微服务架构中,通常采用分布式系统来部署微服务。这些微服务可能是由不同的团队使用不同的编
程语言来开发,并部署在了几千台服务器,横跨多个不同的数据中心,从而使整个分布式系
统变得日趋复杂。
[0003] 目前采用分布式链路跟踪系统来解决微服务故障定位难、容量评估难、链路梳理难和性能分析难等问题。具体的,分布式链路跟踪系统通过采集、存储、分析分布式系统中
的追踪(trace)数据、指标数据和日志数据,完成全链路跟踪。
[0004] 现有的日志的采样和存储的方式有:1、全量采集以及全量存储;2、随机采集并存储采集到的全部日志;3、定时采集并存储采集到的全部日志;4、动态流量采集并存储采集
到的全部日志。其中,第1种方法需要占用大量的存储资源,而且后续的分析需要耗费大量
的计算资源。而后3种方法采集到的链路不完整的,甚至部分节点的日志没有被采集,更严
重的是错误的请求没有被采集存储,导致失真率高。

发明内容

[0005] 本发明实施例提供一种日志处理方法、装置、计算机设备及存储介质,可以减少日志的存储量同时降低采集数据的失真率。
[0006] 第一方面,本发明实施例提供了一种日志处理方法,包括:
[0007] 分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形成;
[0008] 根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析;
[0009] 如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储;
[0010] 如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储。
[0011] 第二方面,本发明实施例还提供了一种日志处理装置,包括:
[0012] 链路日志数据获取模块,用于分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形成;
[0013] 服务节点状态分析模块,用于根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析;
[0014] 异常存储模块,用于如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储;
[0015] 稳定存储模块,用于如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储。
[0016] 第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序所述处理器执行所述程序时实现如本发明实
施例中任一所述的日志处理方法。
[0017] 第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一所述的日志处理方法。
[0018] 本发明实施例通过获取全量收集方式统计整合形成的多个调用链的链路日志数据,对调用链关联的服务节点进行状态分析,将存在异常状态的服务节点在工作过程中产
生的调用链进行存储,实现将每个出错的日志数据进行全链存储,保证出错数据均记录下
来,以便后续统计和分析,从而减少日志数据的失真率,并将处于稳定状态的服务节点在工
作过程中产生的调用链进行周期性存储,减少日志数据存储的量,解决了现有技术中全量
采集并全量存储的存储资源消耗大,以及部分采集并存储的日志数据的失真率高的问题,
可以减少日志的存储量同时降低采集数据的失真率。

附图说明

[0019] 图1是本发明实施例一中的一种日志处理方法的流程图;
[0020] 图2a是本发明实施例二中的一种日志处理方法的流程图;
[0021] 图2b是本发明实施例所适用的应用场景的示意图;
[0022] 图2c是本发明实施例二中的一种日志处理方法的流程图;
[0023] 图3是本发明实施例三中的一种日志处理装置的结构示意图;
[0024] 图4是本发明实施例四中的一种计算机设备的结构示意图。

具体实施方式

[0025] 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便
于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0026] 实施例一
[0027] 图1为本发明实施例一中的一种日志处理方法的流程图,本实施例可适用于采集日志数据并进行存储的情况,该方法可以由本发明实施例提供的日志处理装置来执行,该
装置可采用软件和/或硬件的方式实现,并一般可集成计算机设备中,例如,服务器等。如图
1所示,本实施例的方法具体包括:
[0028] S110,分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形成。
[0029] 调用链用于描述从接收到客户端发起请求到响应客户端的过程关联的服务节点的调用路径。示例性的,将一个资源的调用路径封装成一个节点,组成一个树状的结构形成
一个完整的调用链。
[0030] 链路日志数据记录有调用链中涉及的调用过程中的服务节点的数据,用于确定服务节点的状态。
[0031] 全量采集方式可以是指将服务集群中每个服务节点的日志文件均进行收集。通常,日志文件用于记录服务节点响应请求的操作数据。实际上,服务节点的日志文件仅会记
录自身的操作数据,而一个调用链通常包括多个不同服务节点之间的调用关系,从而,需要
对日志文件进行解析,从中查询统计出属于一个调用链的日志数据,并进行整合,形成一个
调用链的链路日志数据,最终统计出多个调用链的链路日志数据。
[0032] S120,根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析。
[0033] 服务节点用于提供设定服务,实现设定功能。示例性的,服务节点包括一个服务实例。服务节点可以部署在容器中,或者可以部署在一台独立的计算机设备上。一台独立的计
算机设备上可以仅部署有一个服务节点,或者部署有多个服务节点。
[0034] 调用链关联的服务节点可以是指,在调用链的调用结构中,存在调用关系的服务节点,例如,调用其他服务节点的服务节点,或者被调用的服务节点。
[0035] 服务节点的状态分析,用于判断服务节点在调用的工作过程中是否出现异常。如果服务节点出现异常状态,则在异常状态下产生的调用链需要全部存储。如果服务节点稳
定运行,则在稳定状态下产生的全部调用链无需全部存储,可以选择部分调用链进行存储,
节省存储空间,避免存储资源浪费。示例性的,对服务节点在稳定状态下产生的调用链进行
周期性存储。
[0036] 实际上,一个调用链中存在多个服务节点之间的相互调用,需要判断每个服务节点的状态。同时,服务节点可以在前一时刻出现错误,但在后一时刻正常工作,由此,在前一
时刻得到产生的调用链存在异常数据,需要进行存储,而后一时刻得到产生的调用链不存
在异常数据,可以不需要进行存储。从而,需要判断服务节点是否在产生调用链的工作过程
中出现异常状态。综上,需要在产生该调用链的工作过程中存在调用关系的各服务节点进
行状态分析,以判断产生的该调用链是否进行存储。
[0037] 服务节点的状态,可以通过对调用链的链路日志数据进行分析确定。例如,通过分析调用链的整体状态确定在产生该调用链的工作过程中各服务节点的状态,对链路日志数
据进行分析可以得到包括下述至少一项:调用链关联的服务节点信息、调用链的产生时刻
到结束时刻之间的时间长度(即消耗时间)、调用链关联的各服务节点的完成状态和整体完
成状态等信息,基于前述信息确定各服务节点的状态。
[0038] S130,如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储。
[0039] 异常状态用于描述在产生调用链对应的工作过程中,任一服务节点出现的异常,示例性的,异常状态包括错误信息和波动状态。
[0040] 示例性的,服务节点的请求超时,服务节点的状态值在正常范围之外,以及服务节点的日志数据遗失等现象中的至少一项存在时,表明该服务节点存在异常状态。
[0041] 可以理解的是,在产生一条调用链的工作过程中,存在调用关系的至少一个服务节点存在异常状态,该调用链涉及的链路日志需要全部存储,以便后续进行链路梳理、定位
故障位置、错误原因分析和容量评估等。
[0042] 可选的,所述如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储,包括:如果所述服务节点在工作过程中产生的调用
链的链路日志数据中记录有服务节点错误的信息,则确定所述服务节点在工作过程中存在
异常状态,并对所述调用链进行存储;如果所述服务节点在工作过程中产生的调用链的链
路日志数据中不存在服务节点错误的信息,且根据所述链路日志数据,计算得到的所述调
用链的消耗时间的变化值大于等于设定阈值,则确定所述服务节点在工作过程中存在异常
状态,并对所述调用链进行存储。
[0043] 其中,服务节点错误的信息用于确定服务节点出现故障。调用链的消耗时间实际是指调用链的产生时刻到结束时刻之间的时间,用于表示从接收到客户端的请求,直到向
客户端反馈请求结果之间的时间。
[0044] 链路日志数据中记录有服务节点错误的信息表示在产生调用链对应的工作过程中,存在至少一个服务节点存在故障。根据所述链路日志数据,计算得到的调用链的消耗时
间的变化值大于等于设定阈值表示调用链的消耗时间变化较大,也即在产生调用链对应的
工作过程中,服务节点接收到的请求的数量突变(变大或变小),也即流量突变程度较高,此
时,服务节点在处理请求的过程中发生出错的概率较高。通常,调用链的消耗时间的变化值
用于表征调用链的波动情况。
[0045] 可以理解的是,将存在服务节点错误的调用链以及服务节点存在较高概率出错对应的调用链全部进行存储,最大程度上将出错的以及疑似出错的服务节点产生的调用链进
行存储,保证全部出错的请求均属于调用链的存储覆盖范围内,以便后续故障定位、分析和
统计。
[0046] 通过将记录有服务节点错误的信息的链路日志数据隶属的调用链以及较为波动的调用链进行存储,保证全部出错的请求均属于调用链的存储覆盖范围内,降低采集日志
数据的失真率。
[0047] 可选的,所述调用链的消耗时间的变化值基于如下公式进行计算:
[0048]
[0049] 其中,tv为所述调用链的消耗时间的变化值;tcost为所述调用链的产生时刻与结束时刻之间的时间;rv为预设值。
[0050] 具体的,tcost为调用链的产生时刻与结束时刻之间的时间,也即调用链的消耗时间。调用链的产生时刻可以是指接收到客户端发送的请求的时刻,结束时刻可以是指,向客
户端反馈请求结果的时刻。
[0051] 预设值是根据需要进行设定的初始值,可以根据服务节点的运行进行更新,还可以根据用户的需求,随时进行设定。实际上,当待响应的请求变多时,调用链的消耗时间变
长,通常,时间变长的程度是有限的,连续多个调用链的消耗时间逐步增加,如果当前调用
链的消耗时间相较于前一调用链的消耗时间没有变化,但还根据初始的预设值进行判断
时,得到的结果为当前调用链对应的请求量的波动较大,当前调用链被存储,但实际上,当
前调用链对应的请求量的波动情况相较于前一调用链是平稳的,此时,当前调用链无需存
储,如果将平稳的无需存储的调用链进行存储,则增加了存储资源的消耗。从而,可以根据
前一波动的调用链的消耗时间更新预设值,实现减少波动判断错误导致增加存储资源的消
耗,以减少存储资源的浪费。
[0052] 示例性的,预设值的更新方式可以是:在调用链的消耗时间的变化值大于等于设定阈值时,将调用链的消耗时间作为更新后的预设值,后续根据更新后的预设值进行调用
链的消耗时间的变化值判断。
[0053] 通过调用链的消耗时间的变化值的计算,准确评价调用链对应的请求量的波动情况,从而将请求量高同时存在出错概率较高的服务节点产生的调用链进行存储,增加调用
链的存储覆盖范围内,保证调用链的存储覆盖范围覆盖有全部出错的请求,从而,降低日志
数据的采集失真率。
[0054] S140,如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储。
[0055] 各服务节点在工作过程中均处于稳定状态表明,在产生该调用链的工作过程中各服务节点均不存在异常状态。此时,该调用链可以选择存储或者不存储。可以统计处于稳定
状态的各服务节点在工作过程中产生的全部调用链,并从全部调用链中选择部分调用链进
行存储,例如随机选择设定数目的调用链,设定数据小于全部调用链的数目。可选的,选择
小于全部调用链数目的设定数目的调用链进行存储。选择方式可以是随机选择,还可以是
按照设定周期采样选择,此外,还可以根据设定规则进行选择,对此,本发明实施例不做具
体限制。
[0056] 可以理解的是,服务节点的稳定状态判断,实际上判断一段连续时间内的多个产生调用链的工作过程中,各服务节点是否均处于稳定状态,如果确定服务节点均处于稳定
状态,则从多个调用链的选择部分调用链进行存储,通常部分调用链的少于该连续时间内
产生的调用链的数量。
[0057] 可选的,所述如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储,包括:如果在预设间
隔时间内各所述服务节点在工作过程中产生的全部调用链的链路日志数据中均不存在服
务节点错误的信息,且计算得到的各所述调用链的消耗时间的变化值均小于所述设定阈
值,则确定各所述服务节点在工作过程中均处于稳定状态,并按照各所述调用链的产生时
刻,对各所述调用链进行周期性存储。
[0058] 其中,调用链的消耗时间的变化值小于设定阈值,表示调用链的消耗时间几乎无变化,也即在产生调用链对应的工作过程中,服务节点接收到的请求的数量几乎无变化,此
时,出错的概率较低。该工作过程产生的调用链可以无需存储。
[0059] 可以将消耗时间波动较小的连续多个调用链,按照产生时刻进行排序,周期性选择一个调用链进行存储,保证存储稳定的调用链,又不会过多占用存储资源。
[0060] 通过获取在一段时间内产生的全部调用链,并在确定这些调用链均由处于稳定状态的各服务节点在工作过程中产生时,按照设定间隔时间周期性存储调用链,实现同时存
储部分稳定调用链,在减少调用链的存储量的同时,采集稳定的调用链,避免出现稳定的调
用链均不存储的情况,从而降低日志数据采集的失真率。
[0061] 可选的,所述按照各所述调用链的产生时刻,对各所述调用链进行周期性存储,包括:根据各所述调用链的链路日志数据,获取各所述调用链的产生时刻;如果所述调用链的
产生时刻与周期存储时刻的时间差大于等于所述预设间隔时间,则存储所述调用链,并根
据当前系统时间更新周期存储时刻。
[0062] 周期存储时刻可以是指上一次进行存储的系统时刻。通常,周期性存储是指,在与上次存储的系统时刻的时间差为预设间隔时间的系统时刻,存储一次调用链,由此,每隔预
设间隔时间就会存储一次调用链,从而实现周期性存储。其中,预设间隔时间可以根据需要
进行设定,示例性的,间隔时间为1秒,此外还可以是其他时间,对此,本发明实施例不作具
体限制。
[0063] 链路日志数据记录有服务节点接收到客户端发送的请求的时刻,该时刻即为调用链的产生时刻。相应的,链路日志数据记录有服务节点向客户端发送请求结果的时刻,该时
刻即为调用链的结束时刻。
[0064] 通过配置周期存储时刻,以及预设间隔时间,作为周期性存储的依据,实现间隔预设间隔时间存储一次调用链,减少调用链的存储量,降低存储资源的消耗量。
[0065] 此外,可选的,在如果所述服务节点在工作过程中产生的调用链的链路日志数据中不存在服务节点错误的信息,且根据所述链路日志数据,计算得到的所述调用链的消耗
时间的变化值大于等于设定阈值,则确定所述服务节点在工作过程中存在异常状态,并对
所述调用链进行存储之后,还包括:根据当前系统时间更新周期存储时刻。
[0066] 可以理解的是,在存储波动程度高的调用链之后,若后续产生的调用链的波动程度较低,可以按照周期性存储的方式进行处理。而且,消耗时间的变化值大于等于设定阈值
的调用链不同于存在服务节点错误的链路日志数据隶属的调用链,消耗时间的变化值大于
等于设定阈值的调用链,也即波动变化大的调用链,是疑似包含出现故障的服务节点,在波
动变化大的调用链产生前后产生的调用链可能是处于稳定状态的服务节点产生的,不会导
致其他调用链出错,由此,可以更新周期存储时刻,以减少稳定状态的服务节点产生的调用
链的存储。
[0067] 本发明实施例通过获取全量收集方式统计整合形成的多个调用链的链路日志数据,对调用链关联的服务节点进行状态分析,将存在异常状态的服务节点在工作过程中产
生的调用链进行存储,实现将每个出错的日志数据进行全链存储,保证出错数据均记录下
来,以便后续统计和分析,从而减少日志数据的失真率,并将处于稳定状态的服务节点在工
作过程中产生的调用链进行周期性存储,减少日志数据存储的量,解决了现有技术中全量
采集并全量存储的存储资源消耗大,以及部分采集并存储的日志数据的失真率高的问题,
可以减少日志的存储量同时降低采集数据的失真率。
[0068] 实施例二
[0069] 图2a为本发明实施例二中的一种日志处理方法的流程图,本实施例以上述实施例为基础进行具体化,将所述分别获取至少一个调用链的链路日志数据,具体化为:从消息队
列中读取日志数据;根据多条所述日志数据中的链路标识信息,分别对各所述日志数据进
行统计整合,形成至少一个调用链的链路日志数据。如图2a所示,本实施例的方法具体包
括:
[0070] S210,从消息队列中读取日志数据。
[0071] 消息队列用于在消息的传输过程中保存消息。日志数据用于作为待处理的数据存储在消息队列中,等待读取以及处理。
[0072] 在消息队列的机制中,消息生产者(Producer):发送消息到消息队列。在本实施例中,日志收集器为消息生产者。
[0073] 消息消费者(Consumer):从消息队列接收消息。在本实施例中,实现日志处理方法的计算机设备为消息消费者。例如,计算机设备可以是配置有数据抽取、转换和加载系统
(Extraction‑Transformation‑Loading,ETL)的设备。
[0074] 消息队列(Queue):一个先进先出的消息存储区域。消息按照顺序发送接收,一旦消息被消费处理,该消息将从队列中删除。
[0075] 其中,消息队列可以采用主题(Topic)机制进行消息传递:一种支持消息多个订阅者的机制。
[0076] S220,根据多条所述日志数据中的链路标识信息,分别对各所述日志数据进行统计整合,形成至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全
量采集方式收集到的日志数据进行统计整合形成。
[0077] 链路标识信息用于标识日志数据所属的调用链。示例性的,链路标志信息包括Trace ID、Span ID和Parent ID。示例性的,可以采用雪花算法(Snowflake)生成链路标识
信息。在本实施例中,接收到客户端发送的请求,为该请求成一个全局链路标识信息,即
Trace ID,通过链路标识信息可以串联起整个调用链,一个链路标识信息代表一次请求。除
了TraceID外,还需要Span ID和Parent ID用于记录调用父子关系。每个服务实例会记录下
Span ID和Parent ID,通过Span ID和Parent ID可以串联形成一次完整调用链的父子关
系。整个调用过程中每个请求都要附加透传链路标识信息,由此,要查看某次完整的调用链
则只要根据链路标识信息查出所有调用记录即可。
[0078] 对日志数据进行统计整合,用于将属于一个调用链的日志数据统计出来,并整合到一起形成链路日志数据。
[0079] 可选的,所述日志数据通过日志收集器采用全量收集方式收集日志数据,并根据链路标识信息对收集到的日志数据进行统计整合,得到属于一个调用链的日志数据,写入
同一消息队列中。
[0080] 其中,日志收集器用于获取各服务节点的日志文件。日志文件通常记录有服务节点的产生不同调用链的多个工作过程,需要进一步解析,从日志文件中获取一条条日志数
据。并进一步基于日志数据的链路标识信息,将相同链路标识信息的日志数据整合到一起,
统计形成不同组的日志数据,一个组即为一个调用链。分别将属于一个调用链的全部日志
数据分别写入一个消息队列中,方便后续读取和处理。具体可以通过哈希(Hash)取模算法,
将具有相同Trace ID的日志数据聚合到同一个主题中,即实现将属于一个调用链的全部日
志数据分别写入一个消息队列中。
[0081] 通过日志收集器采集日志数据并进行统计整合,按照调用链对日志数据进行分类,得到各调用链的日志数据,同时,将属于调用链的日志数据,写入消息队列中,作为日志
数据进行存储,等待读取,方便后续以调用链的维度进行日志数据的处理,缩短调用链的存
储判断的时间,提高调用链的存储判断的效率。其中,写入方式可以是逐一写入,也可以是
同时写入。
[0082] 需要说明的是,日志数据中没有调用链的结束标识信息。读取消息队列中的日志数据的方式是监听消息队列中的日志数据,每当消息队列中写入一条日志数据,就会被消
费者监听到,并被消费者读取。如果在接收到属于一个调用链的多个日志数据之后,在预设
时间段内,未再次接收到属于该调用链的任一日志数据,此时,确定该调用链的全部日志数
据均读取完成。
[0083] 在本实施例中,日志收集器采用全量收集方式,读取全部服务节点的全部日志文件,获取日志数据,此时得到的日志数据量大,会导致消息队列的负载过高。可以将日志数
据按照链路标识信息,分发到不同消息队列中,合理分配消息队列,实现动态扩容,而且,按
照链路标识信息将属于一个调用链的日志数据聚合到一起存储到同一消息队列中,避免了
一个调用链的日志数据分散到不同消息队列中,导致后续日志数据无法快速聚合到一起,
也难以确定调用链的日志数据是否从消息队列中全部读完,从而降低日志数据的聚合复杂
度,减少日志数据的工作量,提高日志数据的聚合效率,以及提高整体调用链的日志数据的
存储效率。
[0084] S230,根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析。
[0085] 具体的,可以将收集到的属于一个调用链的全部链路日志数据进行数据处理,得到该调用链关联的全部服务节点信息、调用链的消耗时间、调用链关联的各服务节点的完
成状态和整体完成状态等离线数据处理结果。此外,还可以对链路日志数据进行实时统计
分析,得到整个服务集群的每秒查询率(Query Per Second,QPS)(如平均每秒查询率),整
个服务集群中各服务节点的QPS,以及服务节点的响应时间等实时数据处理结果。实时数据
处理结果可以随着日志数据一起进行存储,具体的,可以根据时间单位(如秒或分钟等)进
行存储,而且存储所占据的资源小。
[0086] S240,如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储。
[0087] 可选的,所述如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储,包括:如果所述服务节点在工作过程中产生的调用
链的链路日志数据中记录有服务节点错误的信息,则确定所述服务节点在工作过程中存在
异常状态,并对所述调用链进行存储;如果所述服务节点在工作过程中产生的调用链的链
路日志数据中不存在服务节点错误的信息,且根据所述链路日志数据,计算得到的所述调
用链的消耗时间的变化值大于等于设定阈值,则确定所述服务节点在工作过程中存在异常
状态,并对所述调用链进行存储。
[0088] 可选的,所述调用链的消耗时间的变化值基于如下公式进行计算:
[0089]
[0090] 其中,tv为所述调用链的消耗时间的变化值;tcost为所述调用链的产生时刻与结束时刻之间的时间;rv为预设值。
[0091] 在本实施例中,线上的服务集群的稳定性通常大于99.95%,即存在服务节点错误的情况不多,相应的,存在错误数据的日志数据的占比不高,也即,存储下来的数据量不会
很大,但是为了排除错误,故障定位,调用链的全部链路日志数据是不可或缺的,需要全部
存储。
[0092] 另一方面,部分客户端在不同时段的不稳定性的因素不同,变动的变化程度不同,具体可以通过配置中心调整设定阈值和预设值,降低存储的日志数据。
[0093] S250,如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储。
[0094] 可选的,所述如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储,包括:如果在预设间
隔时间内各所述服务节点在工作过程中产生的全部调用链的链路日志数据中均不存在服
务节点错误的信息,且计算得到的各所述调用链的消耗时间的变化值均小于所述设定阈
值,则确定各所述服务节点在工作过程中均处于稳定状态,并按照各所述调用链的产生时
刻,对各所述调用链进行周期性存储。
[0095] 可选的,所述按照各所述调用链的产生时刻,对各所述调用链进行周期性存储,包括:根据各所述调用链的链路日志数据,获取各所述调用链的产生时刻;如果所述调用链的
产生时刻与周期存储时刻的时间差大于等于所述预设间隔时间,则存储所述调用链,并根
据当前系统时间更新周期存储时刻。
[0096] 在一个具体的例子中,如图2b所示,多个日志收集器203分别获取服务节点201的日志文件202并进行解析,得到日志数据写入消息队列204中。本机设备205通过从消息队列
204中读取需要的日志数据,并统计整合成至少一个调用链的链路日志数据,进行存储判
断。配置中心206用于根据用户的输入配置在调用链的链路日志数据的存储判断过程中的
配置参数,例如,预设值、设定阈值和预设间隔时间等。本机设备205在调用链的链路日志数
据的存储判断过程中对链路日志数据进行处理,得到离线数据处理结果207,以判断服务节
点在工作过程中产生的调用链的链路日志数据中是否存在服务节点错误的信息,以及调用
链的消耗时间的变化值与设定阈值的大小比较。此外本机设备205还可以进行实时数据处
理得到QPS和/或响应时间等实时数据处理结果208。并将离线数据处理结果、实时数据处理
结果和整个调用链的全部链路日志数据共同存储,以便进一步继续后续处理209,如进行查
询、分析和监控等。
[0097] 需要说明的是,本机设备205可以处理得到实时数据处理结果208进行存储,也可以不获取也不存储实时数据处理结果208,具体可以根据需要进行设定,对此,本发明实施
例不作具体限制。
[0098] 其中,本机设备205可以是流式计算服务器,采用流式计算方法读取消息队列中的日志数据并进行相应处理。具体的,流式计算方法将大量数据平摊到每个时间点上,连续地
进行小批量的传输,数据持续流动,计算得到的记过可以立刻发送到其他系统进行实时展
示和后续处理。
[0099] 本机设备205通过本发明实施例提供的任一所述的日志处理方法,可以减少日志数据的存储量,同时降低日志数据的失真率,而且存储的日志数据均是以调用链的形式进
行整体存储,可以保证宏观数据完整,同时,可以简单高效的综合全量采集、随机采集和定
时采集的优点。
[0100] 在一个具体的例子中,如图2c所示,日志处理方法具体可以包括:
[0101] S2001,分析调用链的链路日志数据。
[0102] S2002,对链路日志数据进行数据处理。
[0103] S2003,根据数据处理结果,判断是否存在服务节点的异常状态的数据,如果是,则执行S2004;否则执行S2007。
[0104] 判断是否存在服务节点的异常状态的数据,也即判断服务节点在工作过程中是否存在异常状态。
[0105] S2004,对异常状态的数据进行处理。
[0106] 数据处理可以根据需要进行设定,例如,数据处理包括实时数据处理,得到QPS和响应时间。
[0107] S2005,存储调用链的全部链路日志数据。
[0108] S2006,结束。
[0109] S2007,计算调用链的消耗时间的变化值。
[0110] S2008,判断调用链的消耗时间的变化值是否超过设定阈值,如果是,则执行S2009,否则执行S2011。
[0111] S2009,根据调用链的产生时刻与结束时刻之间的时间更新设定阈值。
[0112] 将设定阈值设定为调用链的产生时刻与结束时刻之间的时间,也即将设定阈值设定为调用链的消耗时间。
[0113] S2010,根据当前系统时间更新周期存储时刻。
[0114] 将周期存储时刻设置为当前系统时间。实际上,在本实施例中的周期性存储方法中,在每次存储的同时,均会将周期存储时刻设置为当前系统时间。由此,根据实时更新的
周期存储时刻,在与更新后的周期存储时刻之间的时间差为预设间隔时间时,将本次调用
链存储,从而实现间隔预设间隔时间存储一次调用链。
[0115] S2011,判断调用链的产生时刻与周期存储时刻的时间差是否大于等于预设间隔时间,如果是,则执行S2010,否则执行S2006。
[0116] 调用链的产生时刻与周期存储时刻的时间差大于等于预设间隔时间时,表明该调用链符合周期性存储条件,需要存储。
[0117] 示例性的,服务节点的QPS为100(一秒钟有100次请求),即一分钟有6000次请求,对应形成有6000条调用链的日志数据。
[0118] 若采用全量采集以及全量存储方式,此时的存储量为6000条调用链的日志数据。
[0119] 若采用定时采集以及存储方式,且每1秒采集一次,此时的存储量为60条调用链的日志数据,但是存储的数据失真率会较高。
[0120] 若采用随机采集以及存储方式,且一分钟随机采集100次,此时的存储量为100条调用链的日志数据,但是存储的数据失真率会较高,且不具有确定性。
[0121] 而本发明实施例提供的方法中:若设定阈值为10%、预设值为20ms和预设间隔时间为1s,当该调用链的消耗时间的变化值超过10%的请求占请求总量的5%,此时仅需要存
储:6000*5%+60=360条调用链的日志数据,仅为全量采集6%,实现在降低失真率的同时
减少了存储量。
[0122] 本发明实施例通过消息队列中读取日志数据,实现消息传递过程中的解耦和复用,同时,实现异步消息传递以及消峰,减少系统压力,提高系统稳定性,同时基于链路标识
信息,统计整合形成多个调用链的链路日志数据,可以准确获取调用链的全部日志数据,保
证日志数据在调用链维度下进行分析和存储,提高日志数据处理的效率。
[0123] 实施例三
[0124] 图3为本发明实施例三中的一种日志处理装置的示意图。实施例三是实现本发明上述实施例提供的日志处理方法的相应装置,该装置可采用软件和/或硬件的方式实现,并
一般可集成计算机设备中,如服务器等。
[0125] 相应的,本实施例的装置可以包括:
[0126] 链路日志数据获取模块310,用于分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形
成;
[0127] 服务节点状态分析模块320,用于根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析;
[0128] 异常存储模块330,用于如果所述服务节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存储;
[0129] 稳定存储模块340,用于如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程中产生的全部调用链中选择部分调用链进行存储。
[0130] 本发明实施例通过获取全量收集方式统计整合形成的多个调用链的链路日志数据,对调用链关联的服务节点进行状态分析,将存在异常状态的服务节点在工作过程中产
生的调用链进行存储,实现将每个出错的日志数据进行全链存储,保证出错数据均记录下
来,以便后续统计和分析,从而减少日志数据的失真率,并将处于稳定状态的服务节点在工
作过程中产生的调用链进行周期性存储,减少日志数据存储的量,解决了现有技术中全量
采集并全量存储的存储资源消耗大,以及部分采集并存储的日志数据的失真率高的问题,
可以减少日志的存储量同时降低采集数据的失真率。
[0131] 进一步的,所述异常存储模块330,包括:服务节点异常判断单元,用于如果所述服务节点在工作过程中产生的调用链的链路日志数据中记录有服务节点错误的信息,则确定
所述服务节点在工作过程中存在异常状态,并对所述调用链进行存储;如果所述服务节点
在工作过程中产生的调用链的链路日志数据中不存在服务节点错误的信息,且根据所述链
路日志数据,计算得到的所述调用链的消耗时间的变化值大于等于设定阈值,则确定所述
服务节点在工作过程中存在异常状态,并对所述调用链进行存储。
[0132] 进一步的,所述稳定存储模块340,包括:服务节点稳定判断单元,用于如果在预设间隔时间内各所述服务节点在工作过程中产生的全部调用链的链路日志数据中均不存在
服务节点错误的信息,且计算得到的各所述调用链的消耗时间的变化值均小于所述设定阈
值,则确定各所述服务节点在工作过程中均处于稳定状态,并按照各所述调用链的产生时
刻,对各所述调用链进行周期性存储。
[0133] 进一步的,所述服务节点稳定判断单元,包括:周期存储时刻更新子单元,用于根据各所述调用链的链路日志数据,获取各所述调用链的产生时刻;如果所述调用链的产生
时刻与周期存储时刻的时间差大于等于所述预设间隔时间,则存储所述调用链,并根据当
前系统时间更新周期存储时刻。
[0134] 进一步的,所述链路日志数据获取模块310,包括:日志数据统计整合单元,用于从消息队列中读取日志数据;根据多条所述日志数据中的链路标识信息,分别对各所述日志
数据进行统计整合,形成至少一个调用链的链路日志数据。
[0135] 进一步的,所述日志数据通过日志收集器采用全量收集方式收集日志数据,并根据链路标识信息对收集到的日志数据进行统计整合,得到属于一个调用链的日志数据,写
入同一消息队列中。
[0136] 进一步的,所述调用链的消耗时间的变化值基于如下公式进行计算:
[0137]
[0138] 其中,tv为所述调用链的消耗时间的变化值;tcost为所述调用链的产生时刻与结束时刻之间的时间;rv为预设值。
[0139] 上述数据存储装置可执行本发明实施例任一所提供的日志处理方法,具备执行的日志处理方法相应的功能模块和有益效果。
[0140] 实施例四
[0141] 图4为本发明实施例四提供的一种计算机设备的结构示意图。图4示出了适于用来实现本发明实施方式的示例性计算机设备12的框图。图4显示的计算机设备12仅仅是一个
示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0142] 如图4所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件
(包括系统存储器28和处理单元16)的总线18。计算机设备12可以是挂接在总线上的设备。
[0143] 总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举
例来说,这些体系结构包括但不限于工业标准体系结构(Industry  Standard 
Architecture,ISA)总线,微通道体系结构(Micro Channel Architecture,MCA)总线,增强
型ISA总线、视频电子标准协会(Video Electronics Standards Association,VESA)局域
总线以及外围组件互连(Peripheral Component Interconnect,PCI)总线。
[0144] 计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0145] 系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可
移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不
可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以
提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性
光盘(例如紧凑磁盘只读存储器(Compact Disc Read‑Only Memory,CD‑ROM),数字视盘
(Digital Video Disc‑Read Only Memory,DVD‑ROM)或者其它光介质)读写的光盘驱动器。
在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储
器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程
序模块被配置以执行本发明各实施例的功能。
[0146] 具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如系统存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它
程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程
序模块42通常执行本发明所描述的实施例中的功能和/或方法。
[0147] 计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使
得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解
调器等等)通信。这种通信可以通过输入/输出(Input/Output,I/O)接口22进行。并且,计算
机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local Area 
Network,LAN),广域网(Wide Area Network,WAN)通信。如图所示,网络适配器20通过总线
18与计算机设备12的其它模块通信。应当明白,尽管图4中未示出,可以结合计算机设备12
使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁
盘驱动阵列、(Redundant Arrays of Inexpensive Disks,RAID)系统、磁带驱动器以及数
据备份存储系统等。
[0148] 处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明任意实施例所提供的一种日志处理方法。
[0149] 实施例五
[0150] 本发明实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请所有发明实施例提供的日志处理方法:
[0151] 也即,该程序被处理器执行时实现:分别获取至少一个调用链的链路日志数据;其中,所述调用链的链路日志数据通过对全量采集方式收集到的日志数据进行统计整合形
成;根据所述链路日志数据对各所述调用链关联的服务节点进行状态分析;如果所述服务
节点在工作过程中存在异常状态,则对所述服务节点在工作过程中产生的调用链进行存
储;如果各所述服务节点在工作过程中均处于稳定状态,则从各所述服务节点在工作过程
中产生的全部调用链中选择部分调用链进行存储。
[0152] 本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读
存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或
器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具
有一个或多个导线的电连接、便携式计算机磁盘、硬盘、RAM、只读存储器(Read Only 
Memory,ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,
EPROM)、闪存、光纤、便携式CD‑ROM、光存储器件、磁存储器件、或者上述的任意合适的组合。
在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被
指令执行系统、装置或者器件使用或者与其结合使用。
[0153] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但
不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是
计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者
传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0154] 计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、无线电频率(RadioFrequency,RF)等等,或者上述的任意合适的组
合。
[0155] 可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,
还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以
完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部
分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在
涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括LAN或WAN——连
接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网
连接)。
[0156] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、
重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行
了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还
可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。