基于海量日志的大规模软件系统异常检测平台的研究与实现
【摘要】:随着云计算技术的日益普及,由成百上千个软件组件组成的大规模系统集中运行在数以千计的计算节点上,在这些大型分布式系统的开发、维护和性能优化过程中,进行异常检测非常重要。大规模软件系统的运行时数据通常被持续地收集并且存储在日志文件中,因而这些软件产生的日志打印语句是完成异常诊断和故障排除的重要资源。然而,系统日志数量和复杂度的飞速增长,导致难以手动分析系统日志来进行异常检测。因此,实现基于海量日志的自动化异常检测方法势在必行。针对以上问题,本文实现了大规模软件系统的异常检测平台,该平台解决了海量日志文件的管理问题,更解决了高复杂度系统中快速检测和定位异常的问题。该平台包含仪表盘、日志管理、应用管理、日志检索和异常检测五个模块,其中异常检测为本文的核心模块。在异常检测模块,我们提出了一种自动化的通用方法,通过解析系统源码和挖掘日志信息进行系统异常检测,使用实验环境下的小规模CloudStack系统和生产环境下的Hadoop系统进行实验,并且和现有的主成分分析法、采样算法和聚类算法这三种算法进行对比,实验结果表明我们的方法能够有效进行异常检测并且优于现有的三种算法。该异常检测算法的实现主要包含以下四个部分:1.源代码分析。该步骤将系统源代码作为输入,使用抽象语法树提取源码中的可用信息,获得源码的控制流图和日志模板集,其中日志模板为对日志打印语句的结构化定义。其次根据源码的控制流图,可得日志模板之间的可达关系。2.日志解析。首先,对标准化的日志消息进行建模,其信息包含日志行号、级别、时间戳以及日志模板信息等;其次,对原始的日志语句进行有效信息提取和日志模板匹配,得到对应的完整的日志消息。3.执行轨迹抽取。该步骤的目的是将由日志消息组成的消息集合分割成若干的执行轨迹片段。为了解决这一问题,本文提出一种执行轨迹抽取算法进行片段切分。首先,结合步骤二解析得到的日志消息集合,基于日志模板可达关系进行日志执行轨迹提取;其次,对日志执行轨迹进行处理,定义相似度标准,将基本片段部分相同但重复度不同的片段处理为同一类型的日志执行片段。4.异常检测。在该步骤中,提出了一种基于异常概率树的新算法实现异常检测。首先,对执行轨迹的异常指数进行定义;其次,将执行轨迹当做数据序列,根据序列与整个网络之间的相似度来判断序列数据中是否存在异常,结合日志执行轨迹的拓扑图结构和出现次数进行异常指数的计算。