作为运维人员,大家可能已经习惯了出问题的时候,找日志,看日志,或者打包日志发给研发。那么,大家有没有想过,在软件研发人员的角度,可以怎么理解日志的作用呢——尤其是目前研发人员主导监控埋点,指标监控似乎也要亲研发远运维的情况下,日志系统的未来会是什么样子呢?
最近看到一篇发表在2016年《软件学报》上的综述文章,来自国防科技大学计算机学院李珊珊博士,名叫《大规模软件系统日志研究综述》。今天推荐给大家一读: http://www.jos.org.cn/1000-9825/4936.htm
文章从三个方面做了综述,分别是:
这部分,分别引用了2012-2014年国际会议的三篇不同论文,其中一些分析结论在我看来是很有度量意义的,摘录出来,供大家自我评审参考:
这部分也是业界最热点的部分,因为它直接和工作相关。在综述中,我们可以看到这部分技术的发展也是经历了明显的阶段:
第一阶段,大概是十多年前,将某种单一类型的日志,视为时间序列,与故障的发生做关联。
第二阶段,由现清华大学的徐崴教授开始,当时他应该是在伯克利和谷歌工作,突破点主要是:日志量更大更复杂;离线转在线分析;挖掘的是状态图变化——事实上徐崴教授回国后也在公开场合做过少量AIOps演讲,我印象中有百度机房的磁盘故障分析、openstack集群的故障定位等等。
第二阶段的另一条分支,其实也是目前日志分析的主流,由LogSig为代表,通过算法,将日志文本分为「签名」和「参数」两部分。然后在这个思路基础上,大家开始五花八门的分类或聚类,以及五花八门的工作流关联挖掘——由于综述是16年写的,偏偏AIOps在16年之后爆发,所以之后两年清华大学裴丹教授的FT-tree、犹他大学李飞飞教授的DeepLog/Spell、港中文郑子彬教授的Drain、南京邮电李涛教授的FLAP等都不在综述里。
此外,还有一些研究把日志分析技术,和源代码静态分析技术结合起来,以获取更好的结果。这里就不细说了。
有趣的是最后一段基于日志的检测算法效果评价部分。主要是通过给程序源码注入失效代码的方式来产生数据。相关文献主要结论如下:
综述还按照针对的日志类型做了一个研究统计表,也可以发现,确实针对应用/中间件日志的研究很少:
通过上面两部分的分析,可以得到一个结论:有日志以后能做什么,其实是比较清晰的,最多是算法还不够通用化而已。但更麻烦的是没有日志。所以引出了第三部分:怎么帮研发人员在编程过程中识别哪里该加日志,日志该记什么,也就是日志的增强部分。
这两个问题,分别以多伦多大学袁丁教授的Errlog和LogEnhancer论文为代表。综述中并没有涉及太多,毕竟方向比前两个更新一些。2012年的时候,袁丁还是周媛媛教授的学生——有兴趣的可以把周教授及弟子们的成果都翻翻,他们专攻软件可靠性,包括综述里提到我这没摘录的lprof和SherLog也是他们做的——在2017年,袁丁又指导自己的学生发表了Log20,算是Errlog的升级版。
这一部分综述几乎除了袁丁教授的成果就没怎么提其他的,不过本文自己也补充了一些这方面的调研结果(应该就是他们团队自己的SmartLog摘要),在第3节,这里就不细说了。
综述最后,也提出了后续的一些研究方向: