CN107391353B - 基于日志的复杂软件系统异常行为检测方法 - Google Patents

基于日志的复杂软件系统异常行为检测方法 Download PDF

Info

Publication number
CN107391353B
CN107391353B CN201710553032.8A CN201710553032A CN107391353B CN 107391353 B CN107391353 B CN 107391353B CN 201710553032 A CN201710553032 A CN 201710553032A CN 107391353 B CN107391353 B CN 107391353B
Authority
CN
China
Prior art keywords
log
track
abnormal
template
source code
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
CN201710553032.8A
Other languages
English (en)
Other versions
CN107391353A (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.)
Hegang Digital Technology Co ltd
Original Assignee
Xidian University
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 Xidian University filed Critical Xidian University
Priority to CN201710553032.8A priority Critical patent/CN107391353B/zh
Publication of CN107391353A publication Critical patent/CN107391353A/zh
Application granted granted Critical
Publication of CN107391353B publication Critical patent/CN107391353B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program

Abstract

本发明公开了一种基于日志的复杂软件系统异常行为检测方法,解决现有方法只能分析到系统发生异常时的日志语句,无法根据异常日志语句进行追踪的问题。具体包括:采集系统源代码,将源码转换成以函数为单位的控制流图,抽取日志模板,获取日志打印语句间可达关系;用日志语句间运行逻辑关系对日志消息解析;结合结构化的日志消息和源码控制流图进行日志执行轨迹提取并处理过滤,实现相对准确的、完整的异常检测和定位。本发明分析源码得到日志模板,实验结果更为准确,克服了聚类算法不稳定性的缺陷。抽取日志轨迹,根据异常语句追踪,便于获取导致系统发生异常的根本原因进而解决异常问题。用于分布式复杂软件系统的运行维护。

Description

基于日志的复杂软件系统异常行为检测方法
技术领域
本发明属于计算机应用技术领域,主要涉及系统异常行为检测,具体是一种基于日志的复杂软件系统异常行为检测的方法,可用于分布式系统的运行维护。
背景技术
随着分布式系统和云计算技术的不断发展,日志规模变得越来越大而不能手动检测以及无结构而不能自动分析,有些操作者通常是制作临时手稿去查询关键字比如“error”以及“exception”等,但是这种手动检测的方法已经被证明在确定问题的时候是不完整、不精确的。然而,在现有的手动检测方法被证明准确率低、异常检测不完整、处理效率低的情况下,目前为止还没有研究出针对该问题高效的、成熟的解决方案。
海尔公司申请的专利“一种基于系统日志的Web系统异常分析方法和装置”(申请号:2014105458425申请日期:2014.10.15公开号:CN104298586A公开日:2015.01.21),公开了一种基于系统日志的Web系统异常分析方法和装置,方法包括实时获取Web系统内的系统日志;根据Web系统内预先设置的分析工具匹配规则和/或系统异常分析指标,分析系统日志的数据是否满足分析工具匹配规则和/或系统异常分析指标;当系统日志的数据满足分析工具匹配规则和/或系统异常分析指标时,确定系统日志异常,将系统日志存储至系统异常库。该方法通过实时获取并分析系统日志,可以及时确定出发生异常的系统日志的数据,但存在的不足是,该方法只能分析到系统发生异常时的日志语句,难以获取导致该异常的日志轨迹,无法根据异常日志语句进行追踪,不能获取导致该异常的根本原因,不利于解决异常。
北京百度网讯科技有限公司申请的专利“异常日志确定方法和装置”(申请号:201510657417X申请日期:2015.10.12公开号:CN105183912A公开日:2015.12.23),公开了异常日志确定方法和装置。所述方法的具体实施方式包括:对每个日志进行分词处理,生成与各日志对应的权重向量,其中,权重向量包括与之对应的日志中的分词,以及与各分词对应的权重;基于与各日志对应的权重向量确定各日志之间的相似度;基于各日志之间的相似度对各日志聚类形成日志类;以及若日志类中包含的异常日志比例超过预定比例,则日志类为异常日志类,否则日志类为正常日志类。该实施方式实现了异常日志的迅速定位。该方法的不足是:能够确定异常日志类和正常日志类,无法准确区分异常日志语句和导致系统运行异常的日志语句,并且聚类方法具有一定的不稳定性。
南京邮电大学申请的专利“基于日志的智能自适应网络故障定位和分析方法”(申请号:2008101241955申请日期:2008.06.17公开号:CN101325520B公开日:2010.08.18),基于日志的智能自适应网络故障定位和分析方法主要由基于优先级的日志预处理方法、基于时间序列的日志事件聚类分析方法和多维日志统计分析方法组成。海量日志信息首先按照优先级别进行分类存储,然后再根据基于时间序列的日志事件聚类分析方法筛选出关键的事件类型即“策略”的获取,随后再运用多维日志统计分析方法将关键的日志信息呈现在界面上,并触发告警判断机制进行实时告警。
这些方法只能分析到系统发生异常时的日志语句,难以获取导致该异常的日志轨迹,无法根据异常日志语句进行追踪,不能获取导致该异常的根本原因,不利于解决异常。而且有些方法中用到聚类算法,但是聚类方法具有一定的不稳定性。
发明内容
本发明针对上述现有技术的不足,提出一种准确性更高的复杂软件系统异常行为检测方法。
本发明是一种基于日志的复杂软件系统异常行为检测方法,包括如下步骤:
步骤1:分析系统源码:将被检测的复杂软件系统的源码作为输入,使用抽象语法树提取源码中可用信息,获得源码的控制流图和日志模板集,其中日志模板为日志打印语句的结构化定义。其次根据源码的控制流图,可得日志模板之间的可达关系。
步骤2:解析日志语句:对标准化的日志消息进行建模,其信息包括日志行号、级别、时间戳和日志模板信息等;采集被检测的复杂软件系统产生的日志语句,进行有效信息提取,并匹配相应的日志模板,得到完整的日志消息。
步骤3:抽取执行轨迹:结合解析得到的日志消息集合,基于日志模板可达关系进行日志执行轨迹提取,并做相应的处理,得到执行轨迹集合。
步骤4:异常检测:采用异常概率树的方法分析运行轨迹集合,将执行轨迹当作数据序列,根据序列与整个网络之间的相似度来判断序列数据中是否存在异常,结合日志执行轨迹的拓扑结构和出现的次数进行异常指数的计算。
与现有技术相比,本发明的技术优势:
(1)本发明以被检测的复杂软件系统的源码为入口,实现了一种将系统源码解析为控制流图的方法。通过对控制流图的分析,可以准确获取日志打印语句间的可达关系,使日志语句之间的运行逻辑关系更为明确。
(2)本发明将被检测的复杂软件系统的源码作为输入,通过分析日志打印语句得到日志模板,将该系统产生的日志语句与相应的日志模板进行匹配,并将匹配度最高的日志模板与日志语句进行关联,使得实验结果更为准确,同时克服了聚类算法不稳定性的缺陷。
(3)本发明利用日志打印语句间的可达关系对日志语句进行相应的操作,抽取得到该系统的执行轨迹集合,通过对异常语句进行追踪,可以获取导致被检测系统发生异常的根本原因,填补了现有技术难以获取被检测系统异常时的日志轨迹的不足。
(4)本发明通过异常概率树的方法获得完整的异常日志执行轨迹,实现相对准确的、完整的异常检测和定位方法,方便用户对系统进行异常排查和修改。
附图说明
图1是本发明的流程图;
图2是日志模板可达关系图;
图3是函数调用信息的控制流图。
具体实施方式
下面结合附图对本发明做详细描述。
实施例1
随着科学技术的飞速发展,现代化软件系统的规模变得更加庞大,功能更加完善,结构更加复杂。在这种情形下,软件系统一旦发生故障,可能会导致一系列的连锁效应。目前,有些大规模软件系统的异常行为检测主要是依靠人力排查,这种方法定位问题不及时、缺乏针对性、效率低且不完备。现有技术中也存在着在分析日志的基础上进行系统异常行为检测的方法,但是这些方法只能分析到系统发生异常时的日志语句,难以获取导致该异常的日志轨迹,无法根据异常日志语句进行追踪,而且有些方法中用到聚类算法,聚类方法具有一定的不稳定性。
针对上述现状,本发明展开相关研究,提出一种基于日志的复杂软件系统异常行为检测方法,参见图1,包括如下步骤:
步骤1:分析系统源码:将被检测的复杂软件系统的源码作为输入,使用抽象语法树提取源码中可用信息,获得源码的控制流图和日志模板集,其中日志模板为日志打印语句的结构化定义。其次根据源码的控制流图,可得日志模板之间的可达关系。
步骤2:解析日志语句:对标准化的日志消息进行建模,其信息包括日志行号、级别、时间戳和日志模板信息等;采集被检测的复杂软件系统产生的日志语句,进行有效信息提取,并匹配相应的日志模板,得到对应的完整的日志消息。
步骤3:抽取执行轨迹:结合解析得到的日志消息集合,基于日志模板可达关系进行日志执行轨迹提取;对日志执行轨迹进行处理,定义相似度标准,将基本片段部分相同但重复度不同的片段处理为同一类型的日志执行片段。
步骤4:异常检测:采用异常概率树的方法分析运行轨迹集合,将执行轨迹当作数据序列,根据序列与整个网络之间的相似度来判断序列数据中是否存在异常,结合日志执行轨迹的拓扑结构和出现的次数进行异常指数的计算。
本发明以系统源代码为入口,实现了一种将系统代码解析为控制流图的方法,同时提取出源码中的日志模板。关注日志语句之间的运行逻辑关系代替以往研究中多关注日志语义信息,对日志消息建模进行去噪处理,在该模型的基础上对原始日志语句进行解析。结合结构化的日志消息和源码控制流图进行日志执行的提取,对日志执行轨迹进行处理过滤。
实施例2
基于日志的复杂软件系统异常行为检测方法同实施例1,步骤1中分析软件系统源码,获取日志打印语句间的可达关系,具体包括有如下步骤:
1.1定义控制流图、可达关系图和日志模板的表示形式
定义1:带有函数调用信息的控制流图(Control flow graph with functioncalls):带有函数调用信息的控制流图用GF=(VF,EF)表示,其中:
VF表示控制流图中的节点集合{vf1,vf2,...,vfn},其中每个节点是一个基础节点、日志节点或者是函数调用节点。
EF表示控制流图中的连接定点的边集合{(vfi,vfj),(vfk,vfl),...},每条边都由一对有序节点(vfi,vfj)表示,表示是一条控制路径或者是一条从vfi到vfj的函数调用。
定义2:日志模板可达关系图(Reachability graph):GL=(VL,EL)表示日志模板的可达关系图,其中:
V表示图上的节点集合{vl1,vl2,...,vln},其中每一节点表示一个日志模板ls。
E表示V中节点组成的直接可达关系{(vli,vlj),(vlk,vlm),...},每条边都表示一对有序节点的组合(vli,vlj),表明通过控制流路径或者函数调用使得vli和vlj可达。
定义3:日志模板(Log Statement):为系统源代码中日志输出语句通用的抽象结构,日志模板定义为四元组ls=(id,loc,cons,vars)表示,其中:
id为不同日志模板的唯一标识。
loc表示日志模板的位置信息,包含该日志模板位于的源文件信息和行号,其中源文件信息包括包名、类名和函数名。
cons为该日志模板包含的常量信息,即从该模板输出的所有日志语句的相同部分。
vars表示日志模板的变量部分。
1.2使用控制流分析实现被检测的复杂软件系统源码S向GL的转换
具体包括如下步骤:
1.2.1以文件为单位,使用抽象语法树将系统源码转换为AST节点。
1.2.2以函数入口为起点,递归遍历源码S中的所有函数,获得以函数为单位的控制流图Gc=(Vc,Ec)。重复执行该步骤获得被检测的复杂软件系统源码S的控制流图集合CFGs{G1,G2,...,Gn},如图3所示。
1.2.3创建包含函数调用的控制流图GF=(VF,EF),其中VF={G1.VC∪G2.VC∪...∪Gn.VC},EF={G1.EC∪G2.EC∪...∪Gn.EC}
1.2.4给定任意两个
Figure BDA0001344954080000051
Figure BDA0001344954080000052
如果存在从节点
Figure BDA0001344954080000053
到另一节点
Figure BDA0001344954080000054
的函数调用,为GF.EF添加边
Figure BDA0001344954080000055
重复该步骤至所有函数被处理完。
1.2.5为日志模板创建可达关系图GL=(VL,EL),其中
Figure BDA0001344954080000056
LS={ls1,ls2,...,lsm}是日志模板集合。
1.2.6为任意两个节点
Figure BDA0001344954080000057
在图GF上使用Floyd-Warshall算法检测节点
Figure BDA0001344954080000058
和节点
Figure BDA0001344954080000059
是否可达。如果可达,为GL.EL添加边
Figure BDA00013449540800000510
重复该步骤至可达关系图GL上的所有节点被处理,完成日志模板可达关系图的构建,如图2所示,其中1,2,…,11均为日志模板编号。
本发明以复杂软件系统的源码为入口,将系统源码解析为控制流图,通过控制流图获取日志打印语句之间的可达关系,使日志语句之间的运行逻辑关系更为明确,用于日志执行轨迹的抽取。
实施例3
基于日志的复杂软件系统异常行为检测方法同实施例1-2,步骤2中解析日志语句,将匹配度最高的日志模板与日志语句进行关联,具体包括有如下步骤:
2.1定义日志消息和日志的表示形式
定义3:日志消息(Log Message):为一个日志文件中描述特定系统的执行事件的完整的一行信息,日志消息lm用五元组表示为:lm=(ln,tm,lv,pv,ct),其中:
ln表示日志消息在日志文件中的行号,用来进行异常定位。
tm表示日志消息的时间戳。
lv表示日志消息的级别,可为DEBUG、INFO、WARN、ERROR和FATAL。
pv=(ls,tid)表示日志消息的源信息,其中ls为打印该日志语句的日志模板,tid表示输出该日志语句的线程名。
ct表示人工可识别的表达语义的日志语句打印内容。
定义4:日志(Log):日志L=(lm1,lm2,...)表示一组具有
Figure BDA0001344954080000061
关系的有序集合,其中:
Figure BDA0001344954080000062
公式表明L上的二进制关系
Figure BDA0001344954080000063
具有反射性、反对称性和可传递性。
2.2日志解析过程
日志文件中的每个日志消息lm的解析过程包含以下四个步骤:
2.2.1构造一个简单表达式提取lm的ln、tm、lv、pv.tid、ct。
2.2.2通过删除lm.ct中所有的数字和特殊标识构造一个查询指针。
2.2.3使用查询结构搜索该指针并且对获取到的集合进行排序。
2.2.4从获取到的排好序的列表中进行反向查询返回结果,并且将匹配度最高的模板和lm.pv.ls进行关联。
本发明通过分析日志打印语句得到日志模板,将该系统产生的日志语句与相应的日志模板进行匹配,并将匹配度最高的日志模板与日志语句进行关联,使实验结果更为准确,同时克服了聚类算法不稳定性的缺陷。
实施例4
基于日志的复杂软件系统检测方法同实施例1-3,步骤4中的轨迹抽取过程,具体包括有如下步骤:
4.1定义关联日志消息、轨迹、关联轨迹和有效轨迹的表示形式
定义5:关联日志消息(Homologous log message):给定两个日志消息lmi和lmj,如果满足lmi..pv.ls=lmj..pv.ls,则用表示lmi和lmj关联。
通过可以输出日志消息的日志模板得到两个日志消息的关联关系,一对关联日志消息可能来源于两个正在执行的不同线程下的相同日志模板,也可能来源于同一线程下相同日志模板的两次输出,因此本发明定义一个函数CountL(lmi,lmj)用来判定和计算两个日志消息的关联关系:
定义6:轨迹(Trace):一个执行轨迹T为L的子集,仍然满足
Figure BDA0001344954080000064
关系。
定义7:关联轨迹(Homogeneous trace):给定两个轨迹Ti和Tj,如果存在f:Tj→Tj,其中,就说Ti和Tj是关联的,记为Tj≈Tj
类似的,一对关联轨迹可能来自两个正在执行的线程的相同日志片段,也可能来自同一线程中两次执行的相同片段。为了判定和合并任意两个关联轨迹,本发明定义一个有效函数CountT(Ti,Tj)来进行计算:
Figure BDA0001344954080000071
定义8:有效轨迹(Valid trace):给定一个轨迹T和相应的源码S,如果在S和T之间存在关系“imply”,表示为S|-T,称T为有效的。这里“imply”表示T为源码S中获取到的轨迹中的一条。
4.2轨迹抽取过程
该过程的目的为将日志文件切分为任意数量的日志执行轨迹。给定包含n日志消息的日志文件L={lm1,lm2,...,lmn},本发明需要获取L的m条片段TS={T1,T2,...,Tm},其中
Figure BDA0001344954080000072
并且
Figure BDA0001344954080000073
对此,本发明提出一个执行轨迹抽取算法,步骤如下:
4.2.1根据每条日志消息中的tid属性,将L分割为k部分P={P1,P2,...,Pk},
Figure BDA0001344954080000074
4.2.2根据时间戳将日志消息分组。
4.2.3对于P中的每个
Figure BDA0001344954080000075
执行
Figure BDA0001344954080000076
4.2.4执行
Figure BDA0001344954080000077
判断是否
Figure BDA0001344954080000078
若为真,则执行4.2.5,否则执行4.2.6。
4.2.5
Figure BDA0001344954080000079
4.2.6TS=TS∪{T},
Figure BDA00013449540800000710
4.2.7若
Figure BDA00013449540800000711
继续执行4.2.4。
4.2.8若
Figure BDA00013449540800000712
继续执行4.2.3。
本发明利用日志打印语句间的可达关系对日志语句进行相应的操作,抽取得到该系统的运行轨迹集合,通过对异常语句进行追踪,可以获取导致被检测系统发生异常的根本原因,填补了现有技术难以获取导致被检测系统发生异常的日志轨迹的不足。
实施例5
基于日志的复杂软件系统异常行为检测方法同实施例1-4,步骤5中的异常检测,具体包括有如下步骤:
5.1定义异常指数值计算公式
给定一个轨迹的集合T S={T1,T2,...,Tn},每一条轨迹Ti={lm1,lm2,...,lmm}的异常指数值:
Figure BDA0001344954080000081
Figure BDA0001344954080000082
表示Ti的出现次数,在T S中与Ti同源的轨迹的数量:
Figure BDA0001344954080000083
Fa表示T S中所有轨迹的平均出现次数:
Figure BDA0001344954080000084
|Ti|表示Ti的长度,Ti中日志消息的数量;
Figure BDA0001344954080000085
代表轨迹Ti从第一条日志消息到最后一条日志消息的出现概率,其中:
Figure BDA0001344954080000086
5.2异常检测过程
输入:一个轨迹的集合T S={T1,T2,...,Tm}共m条轨迹;阈值freqmax
输出:异常轨迹的集合ATS。
5.2.1初始设置Fa←0;ATS←0;所有的
Figure BDA0001344954080000087
所有的
Figure BDA0001344954080000088
所有的{pi}←0。
5.2.2更新T S中每条Ti
Figure BDA0001344954080000089
值。
5.2.3更新Fa值。
5.2.4更新T S中每条Ti的每条lmj的pi
5.2.5更新每条Ti
Figure BDA00013449540800000810
值。
5.2.6将
Figure BDA0001344954080000091
的所有值从大到小排序。
5.2.7挑选
Figure BDA0001344954080000092
中排序前
Figure BDA0001344954080000093
的Ti,并把挑选中的轨迹Ti加入异常轨迹集合ATS中,完成异常检测。
本发明通过异常概率树的方法获得完整的异常日志执行轨迹,实现相对准确的、完整的异常检测和定位方法,方便用户对系统进行异常排查和修改。
下面给出一个更为详尽的例子,结合附图和实验数据对本发明做进一步的详细描述。
参照图1,本发明的具体实现步骤如下:
步骤1,源码分析获取日志模板间可达关系。
使用控制流分析实现源码S向GL的转换。该过程需要执行以下6个步骤,获得日志模板可达关系图如图2所示:
步骤1.1以文件为单位,使用抽象语法树将系统源码转换为AST节点。
步骤1.2以函数入口为起点,递归遍历源码S中的所有函数,获得以函数为单位的控制流图Gc=(Vc,Ec),如图3所示。重复执行该步骤获得源码S的控制流图集合CFGs{G1,G2,...,Gn}。
步骤1.3创建包含函数调用的控制流图GF=(VF,EF),其中VF={G1.VC∪G2.VC∪...∪Gn.VC},EF={G1.EC∪G2.EC∪...∪Gn.EC}
步骤1.4给定任意两个
Figure BDA0001344954080000094
Figure BDA0001344954080000095
如果存在从节点
Figure BDA0001344954080000096
到另一节点
Figure BDA0001344954080000097
的函数调用,为GF.EF添加边
Figure BDA0001344954080000098
重复该步骤至所有函数被处理完。
步骤1.5为日志模板创建可达关系图GL=(VL,EL),其中
Figure BDA0001344954080000099
GL.VL=LS,LS={ls1,ls2,...,lsm}是日志模板集合。
步骤1.6为任意两个节点
Figure BDA00013449540800000910
在图GF上使用Floyd-Warshall算法检测节点
Figure BDA00013449540800000911
和节点
Figure BDA00013449540800000912
是否可达。如果可达,为GL.EL添加边
Figure BDA00013449540800000913
重复该步骤至图GL上的所有节点被处理。
步骤2,日志语句解析。
表1所示为一条日志模板的结构表。
表1日志模板结构表
Figure BDA0001344954080000101
表2所示为一条日志消息的结构表。
表2日志消息结构表
Figure BDA0001344954080000102
日志文件中的每个日志消息lm的解析过程包含以下四个步骤:
步骤2.1构造一个简单表达式提取lm的ln、tm、lv、pv.tid、ct。
步骤2.2通过删除lm.ct中所有的数字和特殊标识构造一个查询指针。
步骤2.3使用查询结构搜索该指针并且对获取到的集合进行排序。
步骤2.4从获取到的排好序的列表中进行反向查询返回结果,并且将匹配度最高的模板和lm.pv.ls进行关联。
步骤3,日志执行轨迹抽取。
该过程的目的为将日志文件切分为任意数量的日志执行轨迹。给定包含n日志消息的日志文件L={lm1,lm2,...,lmn},我们需要获取L的m条片段TS={T1,T2,...,Tm},其中
Figure BDA0001344954080000103
并且
Figure BDA0001344954080000104
对此,本发明提出一个执行轨迹抽取算法,步骤如下:
步骤3.1根据每条日志消息中的tid属性,将L分割为k部分
P={P1,P2,...,Pk},
Figure BDA0001344954080000105
步骤3.2根据时间戳将日志消息分组。
步骤3.3对于P中的每个
Figure BDA0001344954080000111
执行
Figure BDA0001344954080000112
步骤3.4执行
Figure BDA0001344954080000113
判断是否
Figure BDA0001344954080000114
若为真,则执行第3.5,否则执行第3.6。
步骤3.5
Figure BDA0001344954080000115
步骤3.6TS=TS∪{T},
Figure BDA0001344954080000116
步骤3.7若
Figure BDA0001344954080000117
继续执行步骤3.4。
步骤3.8若
Figure BDA0001344954080000118
继续执行步骤3.3。
步骤4,计算每条轨迹的异常指数值
Figure BDA0001344954080000119
计算方法如下:
Figure BDA00013449540800001110
Figure BDA00013449540800001111
表示Ti的出现次数,在T S中与Ti同源的轨迹的数量:
Figure BDA00013449540800001112
Fa表示T S中所有轨迹的平均出现次数:
Figure BDA00013449540800001113
|Ti|表示Ti的长度,Ti中日志消息的数量;
Figure BDA00013449540800001114
代表轨迹Ti从第一条日志消息到最后一条日志消息的出现概率,其中:
Figure BDA00013449540800001115
步骤5,基于统计学的异常概率树方法过滤异常执行轨迹。
输入:一个轨迹的集合T S={T1,T2,...,Tm}共m条轨迹;阈值freqmax
输出:异常轨迹的集合ATS。
第5.1初始设置Fa←0;ATS←0;所有的
Figure BDA0001344954080000121
所有的
Figure BDA0001344954080000122
所有的{pi}←0。
第5.2更新T S中每条Ti
Figure BDA0001344954080000123
值。
第5.3更新Fa值。
第5.4更新T S中每条Ti的每条lmj的pi
第5.5根据步骤4更新每条Ti
Figure BDA0001344954080000124
值。
第5.6将
Figure BDA0001344954080000125
的所有值从大到小排序。
第5.7挑选
Figure BDA0001344954080000126
中排序前
Figure BDA0001344954080000127
的Ti,并把挑选中的Ti加入ATS中。
经过上述五个步骤,获得hadoop的异常检测实验结果如表3所示。
表3实验结果
指标/方法 PCA SAMP CLSTR 本发明
TP(真正率) 121 176 188 324
FP(假正率) 200 4502 8405 214
FN(假负率) 223 168 156 20
Precision(准确率) 0.3769 0.0376 0.0219 0.6022
Recall(召回率) 0.3517 0.5116 0.5465 0.9419
f-measure(F值) 0.3639 0.0701 0.0421 0.7347
本发明公开了一种基于日志的复杂软件系统异常行为检测方法,解决现有方法只能分析到系统发生异常时的日志语句,无法根据异常日志语句进行追踪的问题。具体包括:采集系统源代码,将源码转换成以函数为单位的控制流图,抽取日志模板,获取日志打印语句间可达关系;用日志语句间运行逻辑关系对日志消息解析;结合结构化的日志消息和源码控制流图进行日志执行轨迹提取并处理过滤,实现相对准确的、完整的异常检测和定位。本发明分析源码得到日志模板,实验结果更为准确,克服了聚类算法不稳定性的缺陷。抽取日志轨迹,根据异常语句追踪,便于获取导致系统发生异常的根本原因进而解决异常问题。用于分布式复杂软件系统的运行维护。

Claims (5)

1.一种基于日志的复杂软件系统异常行为检测方法,其特征在于,包含有如下步骤:
步骤1:分析系统源码:将被检测的复杂软件系统的源码作为输入,使用抽象语法树提取源码中可用信息,获得源码的控制流图和日志模板集,其中日志模板为日志打印语句的结构化定义;根据源码的控制流图,可得日志模板间的可达关系;
步骤2:解析日志语句:对标准化的日志消息进行建模,其信息包括日志行号、级别、时间戳和日志模板信息等;采集被检测的复杂软件系统产生的日志语句,进行有效信息提取,并匹配相应的日志模板,得到完整的日志消息;
步骤3:抽取执行轨迹:结合解析得到的日志消息集合,基于日志模板间的可达关系进行日志执行轨迹提取,并做相应的处理,得到执行轨迹集合;
步骤4:异常检测:采用异常概率树的方法分析执行轨迹集合,将执行轨迹当作数据序列,根据序列与整个网络之间的相似度来判断序列数据中是否存在异常,结合日志执行轨迹的拓扑结构和出现的次数进行异常指数的计算。
2.根据权利要求1所述的一种基于日志的复杂软件系统异常行为检测方法,其特征在于,步骤1所述分析系统源码,获取日志打印语句间的可达关系,具体包括有如下步骤:
1.1定义控制流图、可达关系图和日志模板的表示形式
带有函数调用信息的控制流图,定义为GF=(VF,EF)表示;
日志模板可达关系图,定义为GL=(VL,EL)表示;
日志模板:日志模板为系统源代码中日志输出语句通用的抽象结构,定义为四元组ls=(id,loc,cons,vars)表示;
1.2使用控制流分析实现源码S向GL的转换具体包括有如下步骤:
1.2.1以文件为单位,使用抽象语法树将系统源码转换为AST节点;
1.2.2以函数入口为起点,递归遍历源码S中的所有函数,获得以函数为单位的控制流图Gc=(Vc,Ec),重复执行该步骤获得源码S的控制流图集合CFGs{G1,G2,...,Gn};
1.2.3创建包含函数调用的控制流图GF=(VF,EF),其中VF={G1.VC∪G2.VC∪…∪Gn.VC},EF={G1.EC∪G2.EC∪…∪Gn.EC};
1.2.4给定任意两个
Figure FDA0002451670340000021
Figure FDA0002451670340000022
如果存在从节点
Figure FDA0002451670340000023
到另一节点
Figure FDA0002451670340000024
的函数调用,为GF.EF添加边
Figure FDA0002451670340000025
重复该步骤至所有函数被处理完;
1.2.5为日志模板创建可达关系图GL=(VL,EL),其中
Figure FDA0002451670340000026
GL.VL=LS,LS={ls1,ls2,…,lsm}是日志模板集合;
1.2.6为任意两个节点
Figure FDA0002451670340000027
在图GF上使用Floyd-Warshall算法检测节点
Figure FDA0002451670340000028
和节点
Figure FDA0002451670340000029
是否可达;如果可达,为GL.EL添加边
Figure FDA00024516703400000210
重复该步骤至图GL上的所有节点被处理。
3.根据权利要求1所述的一种基于日志的复杂软件系统异常行为检测方法,其特征在于,步骤2所述解析日志语句,将匹配度最高的日志模板与日志语句进行关联,具体包括有如下步骤:
2.1定义日志消息和日志的表示形式
日志消息:日志消息是一个日志文件中描述特定系统的执行事件的完整的一行信息,用五元组表示为:lm=(ln,tm,lv,pv,ct);
日志:日志L=(lm1,lm2,…)表示一组具有
Figure FDA00024516703400000211
关系的有序集合;
2.2日志解析过程
日志文件中的每个日志消息lm的解析过程包含以下四个步骤:
2.2.1构造一个简单表达式提取lm的ln、tm、lv、pv.tid、ct;
2.2.2通过删除lm.ct中所有的数字和特殊标识构造一个查询指针;
2.2.3使用查询结构搜索该指针并且对获取到的集合进行排序;
2.2.4从获取到的排好序的列表中进行反向查询返回结果,并且将匹配度最高的模板和属性lm.pv.ls进行关联。
4.根据权利要求1所述的一种基于日志的复杂软件系统异常行为检测方法,其特征在于,步骤3所述的抽取执行轨迹,具体包括有如下步骤:
3.1定义关联日志消息、轨迹、关联轨迹和有效轨迹的表示形式
关联日志消息:给定两个日志消息lmi和lmj,如果满足lmi..pv.ls=lmj..pv.ls,则用表示lmi和lmj关联;
轨迹:一个运行轨迹T为日志L的子集,仍然满足
Figure FDA0002451670340000038
关系;
关联轨迹:给定两个轨迹Ti和Tj,如果存在f:Tj→Tj,其中,就可以认为Ti和Tj是关联的,记为Tj≈Tj
有效轨迹:给定一个轨迹T和相应的源码S,如果在S和T之间存在关系“imply”,表示为S|-T,就可以认为T为有效的,这里“imply”表示T为源码S中获取到的轨迹中的一条;
3.2轨迹抽取过程
轨迹抽取过程的目的是将日志文件切分为任意数量的日志执行轨迹,给定包含n条日志消息的日志文件L={lm1,lm2,…,lmn},需要获取L的m条片段TS={T1,T2,…,Tm},其中
Figure FDA0002451670340000031
并且
Figure FDA0002451670340000032
Tj∈TS,
Figure FDA0002451670340000033
执行轨迹抽取算法,具体包括有如下步骤:
3.2.1根据每条日志消息中的tid属性,将L分割为k组P={P1,P2,…,Pk},
Figure FDA0002451670340000034
3.2.2根据时间戳对日志消息进行分组;
3.2.3对于P中的每组
Figure FDA0002451670340000035
执行
Figure FDA0002451670340000036
Figure FDA0002451670340000037
3.2.4执行
Figure FDA0002451670340000041
判断是否
Figure FDA0002451670340000042
若为真,则执行步骤3.2.5,否则执行步骤3.2.6;
3.2.5
Figure FDA0002451670340000043
3.2.6TS=TS∪{T},
Figure FDA0002451670340000044
3.2.7若
Figure FDA0002451670340000045
继续执行步骤3.2.4;
3.2.8若
Figure FDA0002451670340000046
继续执行步骤3.2.3。
5.根据权利要求1所述的一种基于日志的复杂软件系统异常行为检测方法,其特征在于,步骤4所述的异常检测,具体包括有如下步骤:
4.1采用异常概率树的方法定义异常指数值计算公式
给定一个轨迹的集合T S={T1,T2,...,Tn},每一条轨迹Ti={lm1,lm2,...,lmm}的异常指数值:
Figure FDA0002451670340000047
Figure FDA0002451670340000048
表示Ti的出现次数,在T S中与Ti同源的轨迹的数量:
Figure FDA0002451670340000049
Fa表示T S中所有轨迹的平均出现次数:
Figure FDA00024516703400000410
|Ti|表示Ti的长度,Ti中日志消息的数量;
Figure FDA00024516703400000411
代表轨迹Ti从第一条日志消息到最后一条日志消息的出现概率,其中:
Figure FDA00024516703400000412
4.2异常检测过程
输入:一个轨迹的集合T S={T1,T2,...,Tm}共m条轨迹;阈值freqmax
输出:异常轨迹的集合ATS;
4.2.1初始设置Fa←0,ATS←0,所有的
Figure FDA0002451670340000051
所有的
Figure FDA0002451670340000052
所有的{pi}←0;
4.2.2更新T S中每条Ti
Figure FDA0002451670340000053
值;
4.2.3更新Fa值;
4.2.4更新T S中每条Ti的每条lmj的pi
4.2.5更新每条Ti
Figure FDA0002451670340000054
值;
4.2.6将
Figure FDA0002451670340000055
的所有值从大到小排序。
CN201710553032.8A 2017-07-07 2017-07-07 基于日志的复杂软件系统异常行为检测方法 Active CN107391353B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710553032.8A CN107391353B (zh) 2017-07-07 2017-07-07 基于日志的复杂软件系统异常行为检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710553032.8A CN107391353B (zh) 2017-07-07 2017-07-07 基于日志的复杂软件系统异常行为检测方法

Publications (2)

Publication Number Publication Date
CN107391353A CN107391353A (zh) 2017-11-24
CN107391353B true CN107391353B (zh) 2020-07-28

Family

ID=60334531

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710553032.8A Active CN107391353B (zh) 2017-07-07 2017-07-07 基于日志的复杂软件系统异常行为检测方法

Country Status (1)

Country Link
CN (1) CN107391353B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110389874B (zh) * 2018-04-20 2021-01-19 比亚迪股份有限公司 日志文件异常检测方法和装置
CN111290870A (zh) * 2018-12-07 2020-06-16 北京京东尚科信息技术有限公司 一种检测异常的方法和装置
CN110175085B (zh) * 2019-04-19 2020-11-27 同济大学 一种利用图分析的Hadoop系统异常原因诊断方法及装置
CN111831542B (zh) * 2019-04-23 2022-04-05 华为技术有限公司 Api应用调测方法及装置、存储介质
CN110389883B (zh) * 2019-06-27 2023-08-01 西安联乘智能科技有限公司 一种基于多线程的模块日志实时监控系统
CN110958267B (zh) * 2019-12-17 2022-01-04 北京工业大学 一种虚拟网络内部威胁行为的监测方法及系统
CN111190873B (zh) * 2019-12-24 2022-08-16 同济大学 一种用于云原生系统日志训练的日志模式提取方法及系统
CN111949480B (zh) * 2020-08-10 2023-08-11 重庆大学 一种基于组件感知的日志异常检测方法
CN113434357B (zh) * 2021-05-17 2023-04-11 中国科学院信息工程研究所 基于序列预测的日志异常检测方法及装置
CN113485901B (zh) * 2021-07-06 2022-11-22 中国工商银行股份有限公司 基于日志和指标的系统评价方法、装置、设备和介质
CN115086016B (zh) * 2022-06-14 2024-04-16 中国银行股份有限公司 一种网络异常行为的检测方法、装置、设备及存储介质
CN115604003B (zh) * 2022-10-14 2024-04-05 浙江工业大学 一种基于程序日志数据的系统异常检测方法
CN115617953A (zh) * 2022-11-15 2023-01-17 成都九洲电子信息系统股份有限公司 一种网络业务链路故障智能诊断方法及系统
CN115934940A (zh) * 2022-11-30 2023-04-07 南京晓庄学院 一种基于互联网信息技术的管理软件安全维护系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103077347A (zh) * 2012-12-21 2013-05-01 中国电力科学研究院 一种基于改进核心向量机数据融合的复合式入侵检测方法
CN105100718A (zh) * 2015-07-29 2015-11-25 西安冉科信息技术有限公司 一种基于视频摘要的智能视频分析方法
CN105653427A (zh) * 2016-03-04 2016-06-08 上海交通大学 基于行为异常检测的日志监控方法
CN106095955A (zh) * 2016-06-16 2016-11-09 杭州电子科技大学 基于业务流程日志和实体轨迹配对的行为模式挖掘方法
CN106502907A (zh) * 2016-10-28 2017-03-15 中国科学院软件研究所 一种基于执行轨迹追踪的分布式软件异常诊断方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8463991B2 (en) * 2010-09-28 2013-06-11 Pure Storage Inc. Intra-device data protection in a raid array

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103077347A (zh) * 2012-12-21 2013-05-01 中国电力科学研究院 一种基于改进核心向量机数据融合的复合式入侵检测方法
CN105100718A (zh) * 2015-07-29 2015-11-25 西安冉科信息技术有限公司 一种基于视频摘要的智能视频分析方法
CN105653427A (zh) * 2016-03-04 2016-06-08 上海交通大学 基于行为异常检测的日志监控方法
CN106095955A (zh) * 2016-06-16 2016-11-09 杭州电子科技大学 基于业务流程日志和实体轨迹配对的行为模式挖掘方法
CN106502907A (zh) * 2016-10-28 2017-03-15 中国科学院软件研究所 一种基于执行轨迹追踪的分布式软件异常诊断方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《CLUSEQ: Efficient and Effective Sequence Clustering》;Jiong Yang,Wei Wang;《Proceedings 19th International Conference on Data Engineering》;20031231;全文 *
《基于海量日志消息的软件系统异常检测技术研究与实现》;张晓菁;《中国优秀硕士学位论文全文数据库》;20170315;全文 *

Also Published As

Publication number Publication date
CN107391353A (zh) 2017-11-24

Similar Documents

Publication Publication Date Title
CN107391353B (zh) 基于日志的复杂软件系统异常行为检测方法
CN107147639B (zh) 一种基于复杂事件处理的实时安全预警方法
Wienand et al. Detecting incorrect numerical data in dbpedia
CN106294762B (zh) 一种基于学习的实体识别方法
He et al. A directed acyclic graph approach to online log parsing
US20160253229A1 (en) Event log analysis
Abd-El-Hafiz A metrics-based data mining approach for software clone detection
CN107111609A (zh) 用于神经语言行为识别系统的词法分析器
CN110011990A (zh) 内网安全威胁智能分析方法
Jain et al. A review of unstructured data analysis and parsing methods
CN111651340A (zh) 告警数据规则挖掘方法、装置及电子设备
Makanju et al. Fast entropy based alert detection in super computer logs
Zhang et al. An efficient log parsing algorithm based on heuristic rules
CN109189840B (zh) 一种流式在线日志解析方法
Said et al. Data stream outlier detection approach based on frequent pattern mining technique
CN113535458B (zh) 异常误报的处理方法及装置、存储介质、终端
Sheluhin et al. Monitoring anomalous states of computer systems by intellectual analysis of data of system journals
CN117501275A (zh) 用于分析由大量单独消息组成的数据的方法、计算机程序产品和计算机系统
CN115757062A (zh) 一种基于句嵌入以及Transformer-XL的日志异常检测方法
CN115274121A (zh) 健康医疗数据的管理方法、系统、电子设备及存储介质
Korzeniowski et al. Discovering interactions between applications with log analysis
Ghosh et al. An empirical study of a hybrid code clone detection approach on java byte code
CN111565192A (zh) 基于可信度的内网安全威胁多模型协同防御方法
Schäfer et al. Experiments on code clone detection and machine learning
Kompalli et al. Efficient mining of data streams using associative classification approach

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
TR01 Transfer of patent right

Effective date of registration: 20230518

Address after: Building 1, Science and Technology Innovation Service Center, No. 856 Zhongshan East Road, High tech Zone, Shijiazhuang City, Hebei Province, 050035

Patentee after: Hegang Digital Technology Co.,Ltd.

Address before: 710071 Taibai South Road, Yanta District, Xi'an, Shaanxi Province, No. 2

Patentee before: XIDIAN University

TR01 Transfer of patent right