大数据时代的数据挖掘
上QQ阅读APP看书,第一时间看更新

2.2 系统日志分析的目的

自动化计算(Automatic Computing)是指 IT 系统能够适应不同的商业业务逻辑和硬件环境的一种能力,其中包括计算系统的自动配置(Self-Configuring)、自动修复(Self-Healing)、自动优化(Self-Optimizing)和自动保护(Self-Protecting)[11]。在大型IT系统内,Automatic Computing能够帮助企业节省大量系统管理成本。系统日志是记录生产设备运行过程中产生的数据。比如常见的 Windows Event Logs 和Linux System Logs,记录了操作系统运行状态中的各种异常事件、错误以及软件设置的更改。系统日志和事件的挖掘是实现Automatic Computing的基础和关键。

系统日志和事件的分析目的大概可以分成3类:系统问题诊断、调试与优化、系统安全维护。

2.2.1 系统问题诊断

系统问题诊断通常也叫Problem Determination。它是指判定系统是否发生故障和故障发生的原因。系统故障的发生通常也有互相依赖性和传递性,找出故障的根源叫作故障根源分析(Root Cause Analysis)。在实时运行的生产机上,系统日志是最重要的系统监控和问题诊断数据来源之一。除了操作系统外,常见的其他软件系统,诸如数据库、Web 服务器、Hadoop 系统等,都附带了日志生成模块并产生大量日志数据,以供系统管理员分析和监控。对于系统管理员而言,系统出现的各种错误和异常都发生在过去。要解决过去发生的问题,必然需要知道发生该问题的前后阶段系统在做什么,才能依次找出问题出现的原因。图2-1显示了典型的系统管理员、服务器和用户之间的关系。图2-1中,服务器直接与用户的终端设备交互。系统管理员所做的大部分事情是观察和监测服务器产生的日志,从而不断调整服务器的配置。以Web系统为例,现实中Web系统管理员在解决一个页面无法访问的问题时,首先查看Web服务器的运行日志,如果发现Web服务器日志里出现数据库连接失败的错误记录,就会转向寻找数据库系统的运行日志。通过数据库的运行日志分析,发现数据库在之前某个时刻宕机。要想知道数据库宕机的原因,就继续查询宕机时间段之前数据库的SQL日志记录,找到引发宕机的SQL操作。

图2-1 常见的IT平台与环境

2.2.2 调试与优化

除了生产机的诊断和监控,在软件开发和调试过程中,日志分析是重要的手段之一。例如在多线程程序的调试中,要重现一个共享资源访问引发的Bug,通常需要重现之前的线程调度过程。然而线程的调度是操作系统根据当时的运行状态决定的,之后很难重现完全一致的线程调度过程,更不用说传统的“单步跟踪”等方法了。实际中大部分多线程开发最有效的调试手段都是软件开发人员主动嵌入日志,生成代码,然后通过生成的日志分析和揣测Bug出现的原因。

通过日志记录来跟踪运行程序也被用于各种程序优化软件,如JProfiler[12]。优化软件的目标是找出待优化程序的瓶颈。要找出瓶颈,常见的手段就是在待优化程序代码中主动嵌入可跟踪的日志产生代码。优化软件通过分析运行生成的日志,跟踪待优化程序的每个执行函数消耗的运行时间及内存等参数,从而找到瓶颈。

2.2.3 系统安全维护

在系统安全维护方面,日志分析常用于被动攻击的分析和防御中。通过日志数据的分析,可以断定和寻找攻击源,从而找到有效的抵御措施。比如鉴别DoS(Denial of Service)攻击的最直接办法就是查看服务器的连接请求日志[13]。如果发现在某个时间段内出现大量异常的同一IP地址或者客户端的连接请求,那么即可把此类行为归结为DoS攻击。某些软件系统会把除IP地址外其他更详细的连接请求信息记录在日志数据内。通过进一步的日志分析,还可以对此DoS做更深入的剖析,比如找出对方使用的黑客软件或者经过的路由信息,从而找出有效抵御手段。除DoS攻击以外,Linux 中用户操作命令和权限切换的记录日志也常被用来判定某用户是否企图攻击该系统或试图获取更高的管理权限。

一些病毒防御软件通过分析应用程序调用操作系统的API历史记录来分析应用程序的行为是否正常,从而判定该应用程序是否是病毒(Virus)或者蠕虫(Worm)。这里的API历史记录也是一种系统日志数据。它记录了某应用程序在什么时刻调用了什么API、API的参数和返回结果等数据。例如在Windows系统内,病毒防御软件通过Windows Hook[14]截获应用程序的API调用情况并记录在数据库中。当发现某常规应用程序的API调用日志记录出现异常的模式(比如过于频繁地调用获取磁盘文件目录的 API),而此应用程序并非磁盘扫描或者修复软件,那么就可以怀疑此应用程序在窃取用户个人数据或者企图植入病毒。