CN110569399B - 基于pinpoint日志的链路构建方法 - Google Patents

基于pinpoint日志的链路构建方法 Download PDF

Info

Publication number
CN110569399B
CN110569399B CN201911082453.2A CN201911082453A CN110569399B CN 110569399 B CN110569399 B CN 110569399B CN 201911082453 A CN201911082453 A CN 201911082453A CN 110569399 B CN110569399 B CN 110569399B
Authority
CN
China
Prior art keywords
span information
link
pinpoint
log
span
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911082453.2A
Other languages
English (en)
Other versions
CN110569399A (zh
Inventor
胡荣德
陈思成
李开宇
蔡亮
喻川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sichuan XW Bank Co Ltd
Original Assignee
Sichuan XW Bank Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sichuan XW Bank Co Ltd filed Critical Sichuan XW Bank Co Ltd
Priority to CN201911082453.2A priority Critical patent/CN110569399B/zh
Publication of CN110569399A publication Critical patent/CN110569399A/zh
Application granted granted Critical
Publication of CN110569399B publication Critical patent/CN110569399B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及基于pinpoint日志的链路构建方法,包括:步骤1:将pinpoint日志的数据写入kafka集群中,并通过kafka集群将所述的pinpoint日志解析为Span信息;步骤2:在kafka集群中每次读取一条Span信息,并根据该Span信息的事务ID和LRU算法,添加或更新双向链表中的节点;步骤3:当双向链表中的节点数量达到预设的阈值N后,将双向链表中链尾的M个节点移出双向链表,各Span信息根据各自属性中的上游Span信息的ID与上游Span信息关联后,将M个结点构建出Span信息的跟踪树,并通过DFS算法,在跟踪树中遍历出具有相同事务ID的所有Span信息的集合,形成调用链路,将调用链路的数据写入数据库。本发明能够实现直接从pinpoint系统查询和解析链路的数据,并且具有较高效率,还能够实时对数据进行处理。

Description

基于pinpoint日志的链路构建方法
技术领域
本发明涉及数据处理的方法,具体讲是基于pinpoint日志的链路构建方法。
背景技术
pinpoint(APM)为分布式事务跟踪系统(全链路分析工具),基本思想源于GoogleDapper 论文。在实际生产应用中,通过pinpoint系统可跟踪单个事务中的分布式请求,实现应用链路和接口链路的跟踪与监控分析等。
目前构建应用链路和接口链路时,是对系统和应用的信息进行统一监控和分析,对其中的应用链路和接口链路,根据调用的先后顺序实时记录链路关系,最后通过字节码增强技术,将链路关系通过编码存储于HBase表中。当从pinpoint系统的HBase数据库表中查询应用相关数据时,存在以下问题:
1. 效率低下,查询容易超时。
2. 系统经常报错“waitting for n actions to finish”。
3. 不能实时进行数据处理和全链路的监控与分析。
产生以上问题的原因包括:
1. pinpoint系统的底层数据存储为HBase表,如果当前数据量较大,且Hbase表以行主键为唯一索引时,查询目标数据的效率就极为低下。
2. pinpoint系统的底层数据加工采用字节码增强方式。这种方式的优点是方便了开发人员无需修改代码;且可收集到更多精确的数据的优势。缺点是在数据入库、查询的过程需加入编码、解析的步骤,增大了数倍的系统开销,且该技术风险较高,开源团队尚未解决。
发明内容
本发明提供了一种基于pinpoint日志的链路构建方法,可以直接从pinpoint系统查询和解析链路的数据,以及解决对双向链表中活跃结点的判断,编码和解析的效率低下、查询超时、不能实时数据处理的问题。
本发明基于pinpoint日志的链路构建方法,包括:
A.将pinpoint日志的数据写入kafka集群系统(一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据)中,并通过kafka集群系统将所述的pinpoint日志解析为Span信息,其中所述的Span信息为处理相应调用事务的作业,在Span信息中包含了与该事务作业相关的各种数据;
B.在kafka集群系统中每次读取一条Span信息,并根据该Span信息的事务ID和LRU算法(Least Recently Used,最近最少使用算法),添加或更新双向链表中的结点;
C.执行步骤B,直到当双向链表中的结点数量达到预设的阈值N后,将双向链表中链尾的M个结点移出双向链表,各Span信息根据各自属性中的上游Span信息的ID与上游Span信息进行关联后,将所述M个结点构建出Span信息的跟踪树,并通过DFS算法(Depth-First-Search,深度优先搜索算法),在跟踪树中遍历出具有相同事务ID的所有Span信息的集合,形成调用链路,将调用链路的数据写入数据库。同时,为了保证调用链路上结点的完整性,此处M值和N值的设置需尽量满足M个结点出链后双向链表中剩余的结点个数不能过少,例如可以根据经验值设置N-M≥500,同时,由于活跃的结点在后续操作中有很大可能仍会更新,因此活跃的结点不能出链。阈值N的选择可根据数据库的性能,测试后选择效率较高的合适的参数。
本发明通过kafka集群系统,提出了基于LRU(Least Recently Used,最近最少使用算法)思想的实时数据流消费方法,以及基于DFS算法(Depth-First-Search,深度优先搜索算法)对应用链路和接口链路的构建。首次通过实时分析和解析pinpoint日志数据来构建调用链路,由此实现了直接从pinpoint系统查询和解析链路的数据,并且能够实时对pinpoint日志生产和消费、过滤解析和构建调用链路。
进一步的,步骤A所述将pinpoint日志解析为Span信息时,先通过代码从pinpoint日志中过滤出含有Span数据的日志,然后对过滤出的含有Span数据的日志通过正则匹配,组装为所述的Span信息。在组装后的Span信息中,包括有应用名、事务ID、当前Span信息的ID、上游Span信息的ID、应用启动时间、响应时间、接口名和时间等属性。
进一步的,由于同一条链路上的应用或接口所在的Span信息是通过kafka集群系统实时发送的,因此在双向链表中与当前Span信息具有相同事务ID的结点在后续的操作中有极大可能再次被更新,因此在步骤B中,当通过kafka集群系统读取了一条Span信息后,如果在双向链表中没有与该Span信息中的事务ID相同的事务ID,则将该Span信息的内容构建为双向链表的一个新结点;反之,则将该Span信息的内容添加到与该Span信息具有相同事务ID的结点中,并认为所述具有相同事务ID的结点为活跃的结点。
在此基础上,将Span信息的内容添加到双向链表的对应结点后,将该结点的位置更新至双向链表的链首。通过不断的将活跃结点更新到双向链表的链首,使不活跃的结点逐渐移向链尾,由此判断出了各结点的活跃性,当双向链表中达到N个结点后,便将链尾的M个不活跃结点(不再进行更新的结点)移出双向链表进行跟踪树的构建和链路解析。
进一步的,步骤C在根据同一个事务ID遍历Span信息时,从跟踪树的顶点开始,向跟踪树中未被访问的顶点的邻接点进行DFS算法的遍历,直至跟踪树中和顶点有路径相通的子顶点都被访问。因为一个请求可能跟多个服务调用关联,在Span信息中包括有上游的Span信息ID(parentSpanId)和自身的ID(SpanId)字段,因此各Span信息之间能够通过各自具有的上游的Span信息ID和上游的Span信息进行逐级关联,这样形成的一个树形结构就是跟踪树,跟踪树体现了某一请求的服务调用链的状况。本发明中的跟踪树是由Span信息组成的树,且同一个树中的事务ID的后21位是相同的,跟踪树中的一个Span信息就是一次远程过程调用(rpc),因此可以通过DFS(Depth-First-Search,深度优先搜索算法)算法遍历得到具有同一个事务ID的Span信息集合,由此构建出调用链路,用于对应用链路和接口链路的统计分析。
优选的,如果从一个顶点遍历完一个跟踪树后,还有未被遍历的跟踪树,则从未被遍历的跟踪树的顶点开始,再次进行DFS算法的遍历,直至所有的跟踪树均被遍历。
进一步的,步骤C在形成调用链路后,分别统计每条调用链路的各项基本统计值,包括链路名称、调用次数、调用时间、平均响应时间、链上各个结点响应时间、链路调用启动时间和数据入库时间,并对同一个时间段内出现多于一次的链路,对该链路的基本统计值进行合并操作。
本发明基于pinpoint日志的链路构建方法,通过分析pinpoint日志数据的方式来进行调用链路的构建,能够实现直接从pinpoint系统查询和解析链路的数据,并且具有较高效率,还能够实时对数据进行处理。
以下结合实施例的具体实施方式,对本发明的上述内容再作进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段做出的各种替换或变更,均应包括在本发明的范围内。
附图说明
图1为本发明基于pinpoint日志的链路构建方法的流程图。
图2为跟踪树的示意图。
具体实施方式
如图1所示本发明基于pinpoint日志的链路构建方法,包括:
A.将pinpoint日志的数据写入kafka集群系统(一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据)中,并通过kafka集群系统将所述的pinpoint日志解析为Span信息。为了保证实时消费kafka数据,不会造成数据累积和kafka集群消息数据的溢出,根据经验值,本实施例中的kafka集群系统的设置为:
max.poll.interval.ms=50~300秒;
max.poll.records=200~2000;
在解析为Span信息时,先通过代码“logs.indexOf(“Received Span=TSpan”) !=-1”从pinpoint日志中过滤出含有Span数据的日志,即检测在pinpoint日志中如果包含“Received Span=TSpan”信息,则对过滤出的含有Span数据的日志通过正则匹配,组装为所述的Span信息。在组装后的Span信息中包括:
Span{
applicationName, 应用名
transactionId, 事务ID
spanId, 当前Span信息的ID
parentSpanId, 上游Span信息的ID
startTime, 应用启动时间
elapsed, 响应时间
rpc, 接口名
time 时间
}。
B.由于同一条链路上的应用或接口所在的Span信息是通过kafka集群系统实时发送的,因此在双向链表中与当前Span信息具有相同事务ID的结点,在后续的操作中,有极大可能再次被更新,因此根据LRU(Least Recently Used,最近最少使用)的页面置换算法的思想,将该结点的位置更新到双向链表的表头。通过kafka集群系统每次读取一条Span信息,根据该Span信息的事务ID和LRU算法(Least Recently Used,最近最少使用算法)进行判断,如果在双向链表中没有与该Span信息中的事务ID相同的事务ID,则将该Span信息的内容构建为双向链表的一个新结点;反之,则将该Span信息的内容添加到与该Span信息具有相同事务ID的结点中,并认为所述具有相同事务ID的结点为活跃的结点,将该结点的位置更新至双向链表的链首,由此便判断出了各结点的活跃性。
例如,双向链表中原有结点的结构为:事务ID:{span_1,span_2,...span_N},在当前读取的Span信息的内容span_c中,span_c的事务ID与该原有结点的事务ID相同,则将当前读取的Span信息的内容span_c添加到该原有结点中,原有结点结构更新为:事务ID:{span_1,span_2,...span_N,span_c}。
C.执行步骤B,直到当双向链表中的结点数量达到预设的阈值N后,将双向链表中链尾的M个结点移出双向链表,M值和N值的设置需尽量满足M个结点出链后双向链表中剩余的结点个数不能过少,同时,由于活跃的结点在后续操作中有很大可能仍会更新,因此活跃的结点不能出链,本实施例中设置N-M≥500。这样当双向链表中达到N个结点后,便将链尾的M个不活跃结点(不再进行更新的结点)移出双向链表进行跟踪树的构建和链路解析。
因为一个请求可能跟多个服务调用关联,各Span信息通过其具有的上游的Span信息ID(parentSpanId)字段值和上游的Span信息中自身的ID(SpanId)进行逐级关联,这样便将所述M个结点中的所有Span信息分别形成了对应的树形结构,每个树形结构便是一个跟踪树,跟踪树体现了某一请求的服务调用链的状况。本发明中的跟踪树是由Span信息组成的树,且同一个树中的事务ID的后21位是相同的,跟踪树中的一个Span信息就是一次远程过程调用(rpc),因此可以通过DFS算法(Depth-First-Search,深度优先搜索算法),在跟踪树中遍历出具有相同事务ID的所有Span信息的集合。遍历时,从一个跟踪树的顶点开始,向跟踪树中未被访问的顶点的邻接点进行DFS算法的遍历,直至跟踪树中和顶点有路径相通的子顶点都被访问,便完成了这个跟踪树的遍历。如果还有其他跟踪树未被遍历,则从未被遍历的跟踪树的顶点开始,再次进行DFS算法的遍历,直至所有的跟踪树均被遍历完成。
如图2所示的跟踪树,图2中应用A(Span A)为调用链路的起点,因此A的Span信息ID为-1;应用I(Span I)因为和应用A具有相同的事务ID,因此应用I(Span I)本应和应用A在同一棵跟踪树上,但由于实时数据流的原因,应用H丢失了,使得应用I无法通过上游Span信息的ID(parentSpanId)与应用D的Span信息的ID(SpanId)进行匹配关联,因此造成了应用I和应用J构成了一棵跟踪树。在遍历跟踪树时,从位于起点的应用A开始,依次向应用A未被访问的邻接点进行深度优先遍历,直至跟踪树中和应用A有路径相通的顶点都被访问。而应用I没有与应用A有路径相通,因此应用I没有被遍历到。虽然应用I没有通过上游的Span信息ID(parentSpanId)关联在应用A的跟踪树上,但却具有与应用A相同的事务ID,因此认为应用I实际上应与应用A为同一跟踪树,则从应用I开始再向下进行遍历。因此,图2所示的2棵跟踪树上共计有5条应用调用链路,分别为:A-B-E;A-B-F;A-C;A-D;I-J。
通过对跟踪树的遍历,最终形成了调用链路,包含有应用链路和接口链路,通过调用链路分别统计出每条调用链路的各项基本统计值,包括链路名称、调用次数、调用时间、平均响应时间、链上各个结点响应时间、链路调用启动时间和数据入库时间。然后对同一个时间段内出现多于一次的链路,对该调用链路的基本统计值进行合并操作,其中应用链路合并后得到的基本统计值包括:应用链路名称、链路调用次数、调用时间、平均响应时间、链上各个应用响应时间、链路调用启动时间、数据入库时间。
接口链路合并后得到的基本统计值包括:接口链路名称、链路调用次数、调用时间、平均响应时间、链上各个接口响应时间、链路调用启动时间、数据入库时间。
最后将合并了基本统计值后的调用链路的数据写入数据库。

Claims (5)

1.基于pinpoint日志的链路构建方法,其特征包括:
A.将pinpoint日志的数据写入kafka集群系统中,并通过kafka集群系统将所述的pinpoint日志解析为Span信息;
B.在kafka集群系统中每次读取一条Span信息,并根据该Span信息的事务ID和LRU算法,添加或更新双向链表中的结点,具体为:
当通过kafka集群系统读取了一条Span信息后,如果在双向链表中没有与该Span信息中的事务ID相同的事务ID,则将该Span信息的内容构建为双向链表的一个新结点;反之,则将该Span信息的内容添加到与该Span信息具有相同事务ID的结点中,并认为所述具有相同事务ID的结点为活跃的结点;
将Span信息的内容添加到双向链表的对应结点后,将所述对应结点的位置更新至双向链表的链首;
C.执行步骤B,直到当双向链表中的结点数量达到预设的阈值N后,将双向链表中链尾的M个结点移出双向链表,各Span信息根据各自属性中的上游Span信息的ID与上游Span信息进行关联后,将所述M个结点构建出Span信息的跟踪树,并通过DFS算法,在跟踪树中遍历出具有相同事务ID的所有Span信息的集合,形成调用链路,将调用链路的数据写入数据库。
2.如权利要求1所述的基于pinpoint日志的链路构建方法,其特征为:步骤A所述将pinpoint日志解析为Span信息时,先通过代码从pinpoint日志中过滤出含有Span数据的日志,然后对过滤出的含有Span数据的日志通过正则匹配,组装为所述的Span信息。
3.如权利要求1所述的基于pinpoint日志的链路构建方法,其特征为:步骤C在根据同一个事务ID遍历Span信息时,从跟踪树的顶点开始,向跟踪树中未被访问的顶点的邻接点进行DFS算法的遍历,直至跟踪树中和顶点有路径相通的子顶点都被访问。
4.如权利要求3所述的基于pinpoint日志的链路构建方法,其特征为:如果从一个顶点遍历完一个跟踪树后,还有未被遍历的跟踪树,则从未被遍历的跟踪树的顶点开始,再次进行DFS算法的遍历,直至所有的跟踪树均被遍历。
5.如权利要求1所述的基于pinpoint日志的链路构建方法,其特征为:步骤C在形成调用链路后,分别统计每条调用链路的各项基本统计值,包括链路名称、调用次数、调用时间、平均响应时间、链上各个结点响应时间、链路调用启动时间和数据入库时间,并对同一个时间段内出现多于一次的链路,对该链路的基本统计值进行合并操作。
CN201911082453.2A 2019-11-07 2019-11-07 基于pinpoint日志的链路构建方法 Active CN110569399B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911082453.2A CN110569399B (zh) 2019-11-07 2019-11-07 基于pinpoint日志的链路构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911082453.2A CN110569399B (zh) 2019-11-07 2019-11-07 基于pinpoint日志的链路构建方法

Publications (2)

Publication Number Publication Date
CN110569399A CN110569399A (zh) 2019-12-13
CN110569399B true CN110569399B (zh) 2020-03-06

Family

ID=68786039

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911082453.2A Active CN110569399B (zh) 2019-11-07 2019-11-07 基于pinpoint日志的链路构建方法

Country Status (1)

Country Link
CN (1) CN110569399B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111913818B (zh) * 2020-08-07 2022-12-02 平安科技(深圳)有限公司 一种确定服务间依赖关系的方法及相关装置
CN114116368A (zh) * 2020-08-31 2022-03-01 上海阵量智能科技有限公司 用于系统芯片性能监控的数据处理方法和装置
CN115442252A (zh) * 2022-09-01 2022-12-06 北京优特捷信息技术有限公司 一种调用链构建方法、装置、电子设备及可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108462709A (zh) * 2018-03-20 2018-08-28 南京丹迪克科技开发有限公司 一种客户端采集电能质量监测终端测量数据的方法
CN109885840A (zh) * 2019-03-06 2019-06-14 中国计量大学 通过16位Trie树实现空间优化的词典排序方法
CN110321233A (zh) * 2019-04-14 2019-10-11 西安烛龙智能科技有限公司 基于树形存储结构的模型切片传输算法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6704319B1 (en) * 1998-12-21 2004-03-09 Intel Corporation Up-tree topology trace for network route tracing
US20110099229A1 (en) * 2008-04-03 2011-04-28 Chang Ypaul Method for Collaborative Processes Executed among Communities
CN109407978B (zh) * 2018-09-27 2020-07-28 清华大学 高并发索引b+链表数据结构的设计与实现方法
CN110007957A (zh) * 2018-12-17 2019-07-12 阿里巴巴集团控股有限公司 调用链路构建方法、装置及设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108462709A (zh) * 2018-03-20 2018-08-28 南京丹迪克科技开发有限公司 一种客户端采集电能质量监测终端测量数据的方法
CN109885840A (zh) * 2019-03-06 2019-06-14 中国计量大学 通过16位Trie树实现空间优化的词典排序方法
CN110321233A (zh) * 2019-04-14 2019-10-11 西安烛龙智能科技有限公司 基于树形存储结构的模型切片传输算法

Also Published As

Publication number Publication date
CN110569399A (zh) 2019-12-13

Similar Documents

Publication Publication Date Title
US11868373B2 (en) Method and apparatus for monitoring an in-memory computer system
CN110569399B (zh) 基于pinpoint日志的链路构建方法
WO2021164465A1 (zh) 智能预警方法与系统
CN112035404B (zh) 医疗数据监控与预警方法、装置、设备及存储介质
KR100996771B1 (ko) 정보 캐싱 시스템 및 이를 사용하는 장치, 데이터 캐싱 방법, 및 능동적 캐싱 방법
CN110502509B (zh) 一种基于Hadoop与Spark框架的交通大数据清洗方法及相关装置
CN104090889A (zh) 数据处理方法及系统
CN106293891B (zh) 多维投资指标监督方法
CN105243147A (zh) 一种MySQL数据库慢查询日志的管理方法及系统
CN108228322B (zh) 一种分布式链路跟踪、分析方法及服务器、全局调度器
CN102063449A (zh) 提高数据库中数据对象统计信息可靠性的方法及装置
CN105630934A (zh) 一种数据统计方法及系统
CN111767327A (zh) 数据流间具有依赖关系的数据仓库构件方法与系统
CN108268468B (zh) 一种大数据的分析方法及系统
CN103425564A (zh) 一种智能手机软件使用预测方法
CN116911671A (zh) 一种数据资产运营效能评估方法及系统
CN106919566A (zh) 一种基于海量数据的查询统计方法及系统
CN117555969A (zh) 基于Hive的血缘信息管理方法、装置及计算机设备
CN108924002B (zh) 一种性能数据文件的解析方法、装置、设备及存储介质
CN114706881A (zh) 一种基于数据库中间件针对高危查询sql的方法
CN110414813B (zh) 指标曲线的构建方法、装置及设备
CN113742313A (zh) 数据仓库构建方法、装置、计算机设备和存储介质
CN109032578A (zh) 基于数据库sql代码生成方法及系统
US11907097B1 (en) Techniques for processing trace data
CN110705736A (zh) 宏观经济预测方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant