一种基于代码异常机制的故障特征提取方法

2015-10-19 15:27谢琼
电脑知识与技术 2015年20期
关键词:云平台日志故障诊断

谢琼

摘要:针对开源云平台系统,该文通过分析系统中的异常处理机制以及日志系统,提出了基于异常信息描述的故障模式提取方法;并过理论分析系统日志能够记录的异常信息特征;系统异常处理机制抛出的异常特征;并结合实验获取日志中能够记录所抛出异常信息的比例,以及提取的异常特征与故障模式的对应关系,从而提出一种基于日志中的异常描述信息,从而进行系统故障诊断。

关键词: 故障模式提取;日志;异常机制;云平台;故障诊断

中图分类号: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 anomalys 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代码异常捕捉率

[模块名称\&[Eraise]数量\&[Eexcept]数量\&捕获率\&Nova\&3165\&2967\&93.74%\&Glance\&765\&757\&98.9%\&Cinder\&1615\&1615\&100%\&Keystone\&817\&817\&100%\&neutron\&1404\&1404\&100%\&]

由异常提取的异常特征信息的验证,采用故障注入的方法,抽取各个模块故障模式库中的故障模式,注入该故障模式所表示的故障,收集日志中的错误信息,查看错误信息是否对应该故障的异常特征。通常的日志字段都包括日志的时间、日志等级、日志信息的具体描述;系统故障信息通常能够在ERROR等级的日志中找到。

图2 OpenStack函数中run_instance的一个异常点

以上为run_instance中的一段代码,该段代码中的异常类型BuildAbortException,在该代码中对应的异常类型具体描述为变量msg对于的值。对于异常函数BuildAbortException()或者异常函数BuildAbortException(msg)获取函数中的参数作为异常的具体描述信息。据此从代码获取的错误行为特征为:

对于该异常点而言,注入故障收集到的日志信息如图3所示:

图3 向系统中注入故障后的日志信息

从日志中获取的异常特征为,其结果与代码分析结果一致。系统故障诊断结果分析,以OpenStack创建虚拟机为入口函数,通过分析源代码,得到该入口函数调用链上的异常抛出点的个数为83个(其覆盖的功能模块主要为nova和keystone模块)。通过故障注入实验,获取错误的日志信息,从日志信息中提取出相应的异常特征元组,与通过代码分析获取的特征元组一致。

3 结束语

程序错误行为的分析可以指导软件开发人员如何准确地处理软件中可能发生的错误,辅助可靠性研究人员在软件差错注入过程中合理地生成差错集合。本文提出了一种基于异常代码结构的异常特征提取方法,对于开源的系统而言,可以通过分析源代码的方法提取系统的异常特征,减少提取故障模式的执行难度。

参考文献:

[1] Mell P, Grance T. The NIST Definition of Cloud Computing, NIST Special Publication 800-145, 2011.

[2] Jhawar R, Piuri V. Fault tolerance management in IaaS clouds[C]//Satellite Telecommunications (ESTEL), 2012 IEEE First AESS European Conference on. IEEE, 2012: 1-6.

[3] 单锦辉, 徐克俊, 王戟. 一种软件故障诊断过程框架[J]. 计算机学报, 2011, 34(2): 372-373.

[4] Nguyen H, Shen Z, Tan Y. Fchain: Toward black-box online fault localization for cloud systems[C] //Proc IEEE 33rd International Conference on Distributed Computing Systems, 2013: 21-30.

[5]S harma B, Jayachandran P, Verma A. Cloudpd: Problem determination and diagnosis in shared dynamic clouds[C]//Proc 43rd IEEE/IFIP International Conference on Dependable Systems and Networks, 2013: 1-12.

[6] Jia Z, Chen R, Xing X. SFDCloud: top-k service faults diagnosis in cloud computing[J]. Automated Software Engineering, 2014, 21(4): 461-488.

[7] Mi H, Wang H, Yin G. Performance problems diagnosis in cloud computing systems by mining request trace logs[C]//Proc IEEE Network Operations and Management Symposium.

猜你喜欢
云平台日志故障诊断
一名老党员的工作日志
扶贫日志
游学日志
高职院校开展基于云平台网络教学的探索与思考
企业云平台建设研究
基于云平台的高职院校开放性职业培训工作体系建设研究
因果图定性分析法及其在故障诊断中的应用
基于LCD和排列熵的滚动轴承故障诊断
基于WPD-HHT的滚动轴承故障诊断
高速泵的故障诊断