软件系统日志相关研究调研报告

标签:无 1598人阅读 评论(0)
分类:


研究背景

随着软件系统的规模不断变大,逻辑变得更加复杂,故障诊断的难度也越来越大。原因主要有二,一方面,大规模系统中不一定具备细致的监控能力;另一方面,由于一些容错机制的存在,故障有时并不会直观表现出来。所以有必要采用某些故障诊断技术来发现系统的不足。

当前实践中广泛使用的故障诊断技术主要依赖于人工枚举的大量输入,即枚举可能引发错误的各种测试用例,以尽可能地暴露故障的原因和现象,缺乏针对性,效率低、不完备。因此,自动化的故障诊断技术一直是该领域研究热点。自动化的故障诊断技术辅助开发人员定位问题可能的源头、可能出现的地方以及可能的故障类型,为故障诊断的过程进行初筛和预判,可以有效提高故障诊断的效率。

日志特征分析

文献[1]系统和量化地观察了 Apache httpd,OpenSSH,PostgreSQL 和 Squid 等常用开源软件过去 10 年间日志的修改内容和修改历史,对大规模开源软件进行了日志特征分析,对日志的质量和开发者的要求进行评估,分析和总结日志中值得关注的问题以及开发者需要注意的地方,为日志工具或语言支持工具的设计提供启发。

分析表明:

1)      在软件开发中进行日志记录是普遍的,平均 每30 行代码中就有一行是日志;

2)      日志信息对实际部署系统的运行故障调试帮助较大,缩短故障调试时间的加速比为 2.2;

3)      日志代码的更新频率比其他代码要快约1倍;

4)      约四分之一的日志修改是把新的程序变量写入日志;

5)      约一半的日志修改是对日志消息静态文本的修改;

基于日志的故障诊断

基于日志的故障诊断是业界最关注研究最热点的部分,因为它直接和落地应用相关。而基于日志的故障诊断多年来经历了如下几个阶段。

第一阶段:该阶段大概是在十多年前,主要方法是将某种单一类型的日志视作时间序列数据,对该数据进行分析检测,与可能发生的故障进行关联。

第二阶段,由现在的清华大学教授徐崴开始,突破点主要包括:

1)      日志量更大更复杂;

2)      日志分析由离线转为在线分析;

3)      挖掘的是状态图变化。

第二阶段的另一条分支,是通过算法,将日志文本解析为“签名”和“参数”两部分。然后在解析完成的数据集上,大家开始使用各种五花八门的方法,以及各种五花八门的工作流关联挖掘。该类方法是目前日志分析研究的主流。该类方法目前已经被提出很多,包括早一些2011年的LogSig,2016年AIOps爆发之后,清华大学裴丹教授的F2tree,犹他大学李飞飞教授的DeepLog/Spell、港中文郑子彬教授的Drain、南京邮电李涛教授的FLAP等。这些方法都是比较具有代表性的,将日志消息解析为消息类型和参数值两部分,然后采用各自的方法,使用解析后的数据进行训练,分析系统状态。另外,还包括将不同任务的日志进行区分,建立工作流的方法,从而通过故障发生时的任务上下文进行故障原因分析。

此外,还有一些研究把日志分析技术和源代码静态分析技术结合起来,以获取更好的结果。

最后一段基于日志的检测算法效果评价部分,主要是通过给程序源码注入失效代码的方式来制造故障。相关文献主要结论如下:

1)      即使都有log level结构的不同类型日志,在不同系统架构、执行环境上的差异,也会导致日志检测算法效果的巨大波动;

2)      在web应用环境中,资源枯竭和程序异常比较容易检测,而应用相关的则难以应对;

3)      即使著名如apache和MySQL,也只有35.6%-42.1%的错误有日志记录。

日志增强

通过以上两部分介绍了日志特点和基于日志的故障诊断方法后,可以发现,一旦有了日志,我们可以进行各种有价值的分析,很多算法都可以应用于此。但是不能否认的是,目前很多系统的日志并不能满足分析的需求,目前很多日志都是依据程序员的习惯添加的,没有相应的标准。此部分帮助研发人员在编程过程中识别哪里该加日志,日志该记什么。

文献[2]重点研究了日志的自动化添加技术,设计并实现了工具 Errlog。它认为,软件系统的出错情况主要可以分成几类:函数返回错、访存安全检查出错、Switch语句不完备、异常信号处理、输入合法性验证出错、溢出、非正常退出以及其他原因等,如图 1 所示。

image.png

根据错误分类找到其故障原因,更容易针对性地确定日志添加位置。进一步地,又将错误分为两类:程序检测到的错误与程序未检测到的错误。程序检测到的错误即异常,如代码库检查异常、系统调用返回值异常等,它们有可能会被异常处理程序正确处理,也有可能无法正确处理从而导致失效;程序未检测到的错误,如不正确的变量值等,开发人员无法事先预测,最终会导致系统失效。当程序检测到的错误时,可能有 3 种处理结果:一是程序发现该异常后提前退出;二是程序正确处理该异常;三是程序不能正确处理该异常从而导致失效。不管是哪种 情况,在程序检测到错误的位置添加日志是较好的选择,因为即便进入正确的异常处理程序,异常处理的过程也可能是有漏洞的(目前,针对异常处理程序的测试极少),其他两种情况就更需要系统日志。Errlog在这些分析的基础上,采用了基于控制流和数据流的分析方法去识别程序中潜在的日志添加点,并自动添加日志。LogAdvisor[3]利用机器学习的方法总结软件开发中已有日志行为的上下文特征,经过特征减重和噪声控制处理后,建立了良好的日志预测模型。通过集成于IDE中,可在软件开发过程中在线地为程序员提供是否需要加日志的建议。

Zhou等人设计了 LogEnhancer[4],通过对日志内容进行增强,减小软件不确定分支的数目,从而降低分支临界条件判断和错误重现的难度,提高诊断效率。具体来说,假定有一段包含多个分支的代码,存在较多的分支语句使得该程序难以调试,这时,将条件变量写入到日志信息中去,就能通过日志信息中条件变量的值判断之前条件语句的判断结果,从而消除一段不确定分支。需要指出的是,即使采用了 LogEnhancer,大部分的日志行为还是需要由开发人员来决策。目前,大规模软件的日志虽然量大,但日志里包含的信息量并不充分,开发者通常需要 添加更多程序运行时的动态信息来理解故障发生的原因,即频繁地更新日志,向日志消息中不断加入新的程序变量。研究自动对日志信息进行增强的方法,可以极大地降低开发者的工作量,提升代码调试的效率。为了帮助开发人员理解日志,文献[5]提出了一种控制台日志的可视化方法,展示了系统中每个日志实体所记录的信息量以及实体之间的联系,并能够对比分析不同应用或者同一应用下的不同配置的日志结构,增强了日志的展现能力。

文献[6]为提高系统日志的展示能力给出了一组建议,包括区分引发日志的事件类型、设计 分层的日志编码体系、合理分类日志信息、设计日志功能时要考虑信息的密度等。文中还提出了一种度量日志信息熵的方法。

后续研究方向

1)      日志的评价打分标准和工具欠缺

2)      日志的上下文分析,在关联模式以外需要辅以语义分析

3)      日志的增强方面,还比较重规则,不够智能化

4)      多事件日志与故障的关联方面,实践不足

参考文献

[1] Yuan D, Park S, Zhou Y. Characterizing logging practices in open-source software. In: Proc. of the 2012 Int’l Conf. on Software Engineering. 2012. 102112. [doi: 10.1109/ICSE.2012.6227202]

[2] Yuan D, Park S, Huang P, Liu Y, Lee MM, Tang X, Zhou Y, Savage S. Be conservative: enhancing failure diagnosis with proactive logging. In: Proc. of the 10th Symp. on Operating Systems Design and Implementation (OSDI). 2012. 293306.

[3] Zhu J, He P, Fu Q, Zhang H, Lyu MR, Zhang D. Learning to log: Helping developers make informed logging decisions. In: Proc. of the 37th Int’l Conf. on Software Engineering. 2015. [doi: 10.1109/ICSE.2015.60]

[4] Yuan D, Zheng J, Park S, Zhou Y, Savage S. Improving software diagnosability via log enhancement. In Proc. of the 16th Int’l Conf. on Architectural Support for Programming Languages and Operating Systems. 2011. 314. [doi: 10.1145/2110356.2110360]

[5] Rabkin A, Xu W, Wildani A, Fox A, Patterson D, Katz R. A graphical representation for identifier structure in logs. In: Proc. of the Workshop Managing Systems via Log Analysis and Machine Learning Techniques. 2010.

[6] Salfner F, Tschirpke S, Malek M. Comprehensive logfiles for autonomic systems. In: Proc. of the 18th Int’l Parallel and Distributed Processing Symp. 2004. [doi: 10.1109/IPDPS.2004.1303243]

 


查看评论

暂无评论

发表评论
  • 评论内容:
      
首页
团队介绍
发展历史
组织结构
MESA大事记
新闻中心
通知
组内动态
科研成果
专利
论文
项目
获奖
软著
人才培养
MESA毕业生
MESA在读生
MESA员工
招贤纳士
走进MESA
学长分享
招聘通知
招生宣传
知识库
文章
地址:北京市朝阳区华严北里甲22号楼五层 | 邮编:100029
邮箱:nelist@iie.ac.cn
京ICP备15019404号-1