CN110569399B - 基于pinpoint日志的链路构建方法 - Google Patents
基于pinpoint日志的链路构建方法 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
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(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在形成调用链路后,分别统计每条调用链路的各项基本统计值,包括链路名称、调用次数、调用时间、平均响应时间、链上各个结点响应时间、链路调用启动时间和数据入库时间,并对同一个时间段内出现多于一次的链路,对该链路的基本统计值进行合并操作。
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)
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)
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)
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 | 阿里巴巴集团控股有限公司 | 调用链路构建方法、装置及设备 |
-
2019
- 2019-11-07 CN CN201911082453.2A patent/CN110569399B/zh active Active
Patent Citations (3)
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 |