论文部分内容阅读
摘要:针对开源云平台系统,该文通过分析系统中的异常处理机制以及日志系统,提出了基于异常信息描述的故障模式提取方法;并过理论分析系统日志能够记录的异常信息特征;系统异常处理机制抛出的异常特征;并结合实验获取日志中能够记录所抛出异常信息的比例,以及提取的异常特征与故障模式的对应关系,从而提出一种基于日志中的异常描述信息,从而进行系统故障诊断。
关键词: 故障模式提取;日志;异常机制;云平台;故障诊断
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2015)20-0204-02
A Fault Mode Extraction Method Based on Fault Exception Mechanism of Code
XIE Qiong
(School of Software Engineering, Tongji University, Shanghai 201804, China)
Abstract:Respect to open source cloud platform, we proposed a system based on the exception handling mechanism and system logging mechanism in which the exception information are recorded. After analyses the features of abnormal information which can be recorded by the system log, the features of anomaly which thrown by system anomaly’s processing mechanism theoretically, we conduct experiments to show the proportion of thrown abnormal information which can be recorded by log, and the corresponding relations between fault mode and fault pattern. Finally we proposed a method to extract information from the log exception description and diagnosis system fault.
Key words:fault mode extract; log; exception mechanism; cloud computing system; fault diagnosis
随着越来越多的个人和企业将信息放在云上,云计算[1]在可靠性、信息安全问题上面临着巨大的挑战。由于计算机固有资源的不可靠性和人为操作失误导致的故障不可避免;同时,由于云计算系统复杂性,使得云计算系统容易因硬件和软件故障,在运行时发生各种失效[2]。因此要获得系统的可靠性保障,故障诊断是一项重要的技术。故障诊断主要包括以下几个步骤:故障定义、故障的描述(故障集提取)、故障检测、故障定位[3]。目前云计算系统故障诊断主要分为三类方法,一、基于性能异常的故障诊断,该方法前期建立正常或故障时的性能模式库,在系统运行时与系统实时性能数据进行对比[5-7];二、端到端的探测技术,在每个节点插入一些探针收集每个模块输出信息,然后每次诊断都从中选择一些合适的探针进行数据分析,故障模式库建立通过故障注入后获取异常特征信息(如注入故障时函数的返回值,每个模块的执行时间)[4];三、心跳机制,通过设置心跳信息判断机器是否运行状况良好,这种诊断方法的诊断粒度低。
1 基于日志中异常信息故障模式提取
1.1 函数异常结构描述
通常入口函数表示某个功能操作开始,以入口函数为起点的调用链上的函数都是与入口函数对应功能操作相关,如果调用链上的函数执行异常,将导致该功能执行失败,即系统发生故障。通过分析函数调用链上抛出的异常信息,获取系统故障的根因。当程序故障被激活后,产生的差错可以有多种形式存在,如:返回码、共享变量、异常等等。在异常得到捕捉之后,程序以不同的方式告知用户错误的发生,如 HTTP 响应消息、日志等。
图1 函数异常结构描述
1.2 异常特征信息与故障模式对应关系
故障模式与异常特征之间的关系:在本文中异常特征主要指的是异常和异常的具体描述信息,采用一个三元组FF表示[FF=]。E表示异常类型,D表示异常的详细信息,O表示激发异常的操作
每入口函数存在一个调用链,从代码结构而言,代码的重用性和可读性,调用链上函数可能只被一个入口函数调用,也可能被多个入口函数调用。当把函数中的一条异常和异常信息作为异常特征信息,此时异常特征信息与故障模式为多对多的关系,在系统诊断过程中获取到的异常特征信息难以确定故障模式。因此在函数中提取异常特征信息时加入功能操作字段,形成异常特征信息三元组FF,使得故障模式与异常特征的关系为一对多的关系,此时获取一条异常特征信息时就能确定一个故障模式。如OpenStack在创建虚拟机操作,一条故障模式为“由于无效请求创建虚拟机失败”,那么其异常特征为<由于输入参数不对创建虚拟机失败;由于网络的格式不对无效的请求;IP无法申请无效的请求>。
1.3 异常特征信息的提取
程序中异常被抛出,如果异常所在函数存在捕捉对应异常机制,或者该函数调用链中函数中存在捕捉对应异常机制,那么该异常能够被捕捉。为了获取系统故障时的异常特征,通常采用故障注入的方法,加速系统的失效。在其发生故障时系统能够抛出异常,以及异常详细信息;因此,通过分析源代码,获取源代码中的抛出异常类型、异常描述信息、诱发异常的操作的对应关系,从而建立异常特征元组FF。获取系统异常特征信息的步骤: Step1:获取故障模式库中某条故障模式j对应功能的入口函数[fin]。
Step2:获取入口函数[fin]调用的函数序列为[{fin,...,fi,...,fn}i∈N]。
Step3:获取每个函数中的抛出的异常以及抛出异常的原因描述
[fein={FF1,...,FFi,...,FFn}i∈N]
Step4:那么一个故障模式对应的异常特征集为[FMin={fein,...,fei,...,fen}i∈N]。
2 实验分析
通过代码分析我们得出的结论为在OpenStack中,系统异常能够被捕获,那么被捕获的异常以及异常描述信息能够通过日志模块,写入到日中。为了验证基于异常提取异常特征的方法,能够覆盖所有由异常引发的故障。利用UnderStand代码分析工具提供的接口,分析OpenStack代码中是否所有的抛出的异常都能够被捕捉。
对于OpenStack而言,抛出异常的代码是以Raise开头,捕获异常的代码以except进行异常捕获。首先获取源代码中能够抛出异常点[Elocal=],[Ec]表示抛出异常类型,[Ei]表示抛出异常所在的函数位置,异常点组成的结合[Eraise];然后获取源代码中所有except代码块所能捕获到的异常点的集合[Eexcept];获取系统中没能捕捉到的异常集合[Eno_exception=Eraise-Eexcept],获得的实验室数据如表1。对于异常处理结构性好的代码,几乎抛出的所有异常都能够被捕捉,从实验数据看OpenStack的异常处理几乎都能被捕捉。
表1 OpenStack代码异常捕捉率
[模块名称\
关键词: 故障模式提取;日志;异常机制;云平台;故障诊断
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2015)20-0204-02
A Fault Mode Extraction Method Based on Fault Exception Mechanism of Code
XIE Qiong
(School of Software Engineering, Tongji University, Shanghai 201804, China)
Abstract:Respect to open source cloud platform, we proposed a system based on the exception handling mechanism and system logging mechanism in which the exception information are recorded. After analyses the features of abnormal information which can be recorded by the system log, the features of anomaly which thrown by system anomaly’s processing mechanism theoretically, we conduct experiments to show the proportion of thrown abnormal information which can be recorded by log, and the corresponding relations between fault mode and fault pattern. Finally we proposed a method to extract information from the log exception description and diagnosis system fault.
Key words:fault mode extract; log; exception mechanism; cloud computing system; fault diagnosis
随着越来越多的个人和企业将信息放在云上,云计算[1]在可靠性、信息安全问题上面临着巨大的挑战。由于计算机固有资源的不可靠性和人为操作失误导致的故障不可避免;同时,由于云计算系统复杂性,使得云计算系统容易因硬件和软件故障,在运行时发生各种失效[2]。因此要获得系统的可靠性保障,故障诊断是一项重要的技术。故障诊断主要包括以下几个步骤:故障定义、故障的描述(故障集提取)、故障检测、故障定位[3]。目前云计算系统故障诊断主要分为三类方法,一、基于性能异常的故障诊断,该方法前期建立正常或故障时的性能模式库,在系统运行时与系统实时性能数据进行对比[5-7];二、端到端的探测技术,在每个节点插入一些探针收集每个模块输出信息,然后每次诊断都从中选择一些合适的探针进行数据分析,故障模式库建立通过故障注入后获取异常特征信息(如注入故障时函数的返回值,每个模块的执行时间)[4];三、心跳机制,通过设置心跳信息判断机器是否运行状况良好,这种诊断方法的诊断粒度低。
1 基于日志中异常信息故障模式提取
1.1 函数异常结构描述
通常入口函数表示某个功能操作开始,以入口函数为起点的调用链上的函数都是与入口函数对应功能操作相关,如果调用链上的函数执行异常,将导致该功能执行失败,即系统发生故障。通过分析函数调用链上抛出的异常信息,获取系统故障的根因。当程序故障被激活后,产生的差错可以有多种形式存在,如:返回码、共享变量、异常等等。在异常得到捕捉之后,程序以不同的方式告知用户错误的发生,如 HTTP 响应消息、日志等。
图1 函数异常结构描述
1.2 异常特征信息与故障模式对应关系
故障模式与异常特征之间的关系:在本文中异常特征主要指的是异常和异常的具体描述信息,采用一个三元组FF表示[FF=
每入口函数存在一个调用链,从代码结构而言,代码的重用性和可读性,调用链上函数可能只被一个入口函数调用,也可能被多个入口函数调用。当把函数中的一条异常和异常信息作为异常特征信息,此时异常特征信息与故障模式为多对多的关系,在系统诊断过程中获取到的异常特征信息难以确定故障模式。因此在函数中提取异常特征信息时加入功能操作字段,形成异常特征信息三元组FF,使得故障模式与异常特征的关系为一对多的关系,此时获取一条异常特征信息时就能确定一个故障模式。如OpenStack在创建虚拟机操作,一条故障模式为“由于无效请求创建虚拟机失败”,那么其异常特征为<由于输入参数不对创建虚拟机失败;由于网络的格式不对无效的请求;IP无法申请无效的请求>。
1.3 异常特征信息的提取
程序中异常被抛出,如果异常所在函数存在捕捉对应异常机制,或者该函数调用链中函数中存在捕捉对应异常机制,那么该异常能够被捕捉。为了获取系统故障时的异常特征,通常采用故障注入的方法,加速系统的失效。在其发生故障时系统能够抛出异常,以及异常详细信息;因此,通过分析源代码,获取源代码中的抛出异常类型、异常描述信息、诱发异常的操作的对应关系,从而建立异常特征元组FF。获取系统异常特征信息的步骤: Step1:获取故障模式库中某条故障模式j对应功能的入口函数[fin]。
Step2:获取入口函数[fin]调用的函数序列为[{fin,...,fi,...,fn}i∈N]。
Step3:获取每个函数中的抛出的异常以及抛出异常的原因描述
[fein={FF1,...,FFi,...,FFn}i∈N]
Step4:那么一个故障模式对应的异常特征集为[FMin={fein,...,fei,...,fen}i∈N]。
2 实验分析
通过代码分析我们得出的结论为在OpenStack中,系统异常能够被捕获,那么被捕获的异常以及异常描述信息能够通过日志模块,写入到日中。为了验证基于异常提取异常特征的方法,能够覆盖所有由异常引发的故障。利用UnderStand代码分析工具提供的接口,分析OpenStack代码中是否所有的抛出的异常都能够被捕捉。
对于OpenStack而言,抛出异常的代码是以Raise开头,捕获异常的代码以except进行异常捕获。首先获取源代码中能够抛出异常点[Elocal=
表1 OpenStack代码异常捕捉率
[模块名称\