回到主页

目录

▶︎
all
running...

Online System Problem Detection by Mining Patterns of Console Logs

Abstract:

1. INTRODUCTION(介绍)

【被忽略的控制台日志】

如今,互联网服务通常在由数千台服务器组成的数据中心中运行。在这些级别中,非故障停止性能故障很常见,甚至可能预示着严重的即将发生的故障。因此,运营商希望尽快得到此类问题的通知。尽管存在各种监视工具,但是每个应用程序中已经可用的监视常常被忽略:简陋的控制台日志。

【在线控制台日志分析很难】

控制台日志的作者和实际操作人员不同,内容不友好,不利于分析,更别提在线分析了!

【前文离线分析检测很有有意义,而后本文是描述如何是在线工作】

作者之前的工作在将统计机器学习和信息检索应用于控制台日志分析[28]问题上显示了良好的前景。具体来说,源代码分析从控制台日志恢复结构,异常检测技术推断哪些消息集可能指示操作问题。然而,那篇文章的工作是一种离线算法,该算法检查一个多天操作会话的整个日志,而操作人员需要了解这些问题的发生。

【本文第一个贡献】
【本文第二个贡献】

[28]中使用的相同标记数据集上对本文的技术进行实证评估
在一个203台机器集群上使用开源应用程序Hadoop File System (HDFS)[1]运行48小时中,产生的2400万行自由文本日志。本文成功地识别了业务问题的异常情况;几乎在所有评价方面,都匹配或超过了离线方法的检测精度,检测延迟较小。 说明本文方法适合在线使用!

【本文的其余部分章节安排】
【在线日志分析】
【基于路径的分析(Path-based analysis)】

本文从控制台日志收集跟踪信息,而不是检测应用程序,因此本文必须处理噪声跟多的数据,而不是由检测产生的数据,本文的分析技术也适用于路径数据

【利用数据挖掘技术解决计算机系统问题】

在频繁模式挖掘[7]这一活跃的研究领域中,我们对序列模式挖掘技术尤为感兴趣,它将频繁发生的有序子序列作为模式进行挖掘

本文扩展了这些技术,以解决在第五节中描述的独特问题的挑战

本文的频繁模式分析侧重于异常检测

3. CONSOLE LOG PREPROCESSING(控制台日志预处理)

本小节回顾了能用于本文中的线上方法,必要的预处理如下:

【日志解析】
【确定事件踪迹】

本文的检测技术依赖于分析踪迹,踪迹是与同一程序对象相关的事件集

例如,一组引用同一文件的打开、定位、写入和关闭的消息将构成该文件的事件踪迹

然而,在事件流中,不同类型和引用不同变量集的事件都是交错的。从流中提取踪迹的一种方法是按事件的特定字段分组,这是流数据处理的典型操作
——问题是如何自动确定分组?

【表示事件踪迹】

消息数向量是事件踪迹的压缩表达,但是在线上场景中使用该方法时存在有两个问题

本文使用消息数向量来表示会话,我们将会话定义为表示系统中单个逻辑操作的事件踪迹中的一个子集事件,并且预测的持续时间来进行限制。第四节中展示如何自动发现会话

4. TWO-STAGE ONLINE ANOMALY DETECTION(两阶段在线异常检测)

本文通过设计一种两阶段检测方法来权衡这个问题:

图2清楚地显示了为什么需要两阶段方法:

解释频繁模式和PCA结合的好处:

下面详细描述每个阶段

5. STAGE 1: FREQUENT PATTERN MINING(阶段一:频繁模式挖掘)

正如第3节中定义的,事件踪迹是报告相同标识符的一组事件。进一步定义:

作者将定义频繁模式的会话及其持续时间分布特点:

条件(1)保证模式覆盖普通情况,因此它可能是一种正常行为。条件(2)保证在短时间内检测到模式。我们定期挖掘归档数据以寻找频繁模式。这些模式用于过滤在线阶段中的正常事件。

我们不能应用一般的频繁序列挖掘技术,因为:

5.1 A. Combining time and sequence information(A.结合时间和序列信息)

本文新方法结合了时间和事件序列信息,采用三步迭代的方法进行准确的模式检测。简而言之:

1.使用时间间隔在每个执行跟踪中查找第一个会话(粗略的)
在这一步中,对于每个执行的追踪程序,我们首先扫描每个事件,直到找到这样一个事件, 其后一个事件的时间间隔长度是执行序列开始以来持续时间的10倍以上(时间间隔大小是一个可配置参数)。 我们将该间隔之前的所有事件视为一个会话(由MCV表示)。

这种分割可能非常不准确:由于会话的交错,可能会在会话中包含不相关的事件,并且由于会话持续时间的随机性,可能会在会话中丢失事件。在下一步发现频繁模式时,可以容忍这种不准确性

2.识别显著会话
这里提出一种在一个会话中包含所有事件的模式。在真实环境的大多数情况下,由于会话的分段方式:发生在很短的时间内的会话有高概率(虽然不总是)表明该会话代表一个单一的逻辑操作,特别是当支持度很高的情况下

我们使用两个标准来选择显著的模式:

我理解的是因为一个踪迹包含多个会话,所以可以按照1,找出每个踪迹的所有会话(预处理阶段,所以不用管TmaxT_{max}),然后按照2计算所有会话MCV的几何中心点,然后找到距离最近并且满足支持度大于0.2M0.2M的会话当做频繁(模式/会话),这也承接上文说明了这里“不能应用一般的频繁序列挖掘技术”

3.使用频繁会话细化结果并计算持续时间统计信息
步骤2中的模式基于粗分段的会话,并且可能不能反映该类型的所有会话的正确持续时间分布:

频繁的模式应该是稳定的。但是,为了适应操作环境的变化,我们将检测器中使用的模式更新为周期性(这个更新不频繁)的离线过程(即检测器使用所发现的模式,但从不在线更新它们)。这样既可以保持在线检测的简单性,又可以避免瞬态异常现象对模式的影响。(注:我理解的是入瞬态的异常模式代表短时间内突然出现的频繁模式,所以既然不经常更新,就不会在频繁模式中加入瞬态的异常模式)

5.2 B. Estimating distributions of session durations(B.估计会话持续时间的分布)

为了实现及时的在线检测,需要知道任何给定的模式需要多长时间才能完成。为此,作者估计每个模式的会话持续时间分布。基于这个分布,我们计算每个模式的截止时间TcutT_{cut}(例如,分布下99.95%满足的时间)。在此之后,该模式的大多数会话将完成。

为了选择一个适合这些的数据分布,首先观察图像3可以发现:

为了估计分布参数,我们采用了[4]中提出的基于Kolmogorov-Smirnov (KS)统计[10]的最大似然拟合方法和拟合优度检验相结合的方法

对于只取整数值的持续时间,考虑概率分布形式是p(x)=Pr(X=x)=Cxβp(x)=Pr(X=x)=Cx^{-\beta}的情况。不难得出,归一化常数由下式计算:
C(β,xmin)=(i=0(i+xmin)β)1(1)C(\beta,x_{min})=(\sum_{i=0}^{\infty}(i+x_{min})^{-\beta})^{-1}\dots(1)
假设已知xminx_{min}(xminx_{min}估计的方法的讨论在后面),最大似然估计量(Maximum Likelihood Estimator,MLE)的尺寸参数β\beta可以近似用下式得出:(注:后面的公式推导都可以在参考文献[4]中找到)
β^1+n[i=1nlnxixmin0.5]1(2)\hat\beta\approx1+n[\sum_{i=1}^nln\frac{x_i}{x_{min}-0.5}]^{-1}\dots(2)
其中xi,i=1nx_i,i=1\dots n是持续时间值xixminx_i\ge x_{min}时的观察值

为了估算xminx_{min},我们选择一个值,

【图3(c)和(d)】分别为模式1和模式2的经验分布(图中圆形的点)和拟合幂律模型(图中的实线)。由模型可知,幂律分布的CDF是p(x)=Pr(X<x)p(x)=Pr(X<x)可以用下式得到:
Pp(x)=1.0C(β,x)/C(β,xmin)(3)P_p(x)=1.0-C(\beta,x)/C(\beta,x_{min})\dots(3)
其中C(β,x)C(\beta,x)在式(1)中定义,然后对于η1.0w\eta\ge1.0-w,最大分布ηth\eta^{th}百分位的值xηx_\eta满足以下公式:
Pp(xη)=(η(1.0w))/w(4)P_p(x_\eta)=(\eta-(1.0-w))/w\dots(4)
其中Pp(x)P_p(x)在公式(3)中定义。我们在第7节中给出了模式1和模式2混合分布的估计的99.90th99.95th99.99th99.90^{th}、99.95^{th}和99.99^{th}百分位,以及对检测精度的改进

5.3 C. Implementation of Stage 1(C.阶段一的实现)

基于模式的检测器从日志解析器中接收事件流

在逻辑上尝试将所有事件集匹配到所有模式。这里使用最朴素的全匹配法,因为

具体的处理方法:

注意,因为TcutT_{cut}通常比TmaxT_{max}小得多,所以该方法可以对大多数事件实现快速检测

检测规则:

这种方法背后的直觉是,只要我们能够合理地确定事件不属于任何被监视的频繁模式,它就会被传递到基于PCA的检测器,称之为非模式事件

6. STAGE 2: PCA DETECTION(阶段二:PCA检测)

从阶段1传递的非模式事件向量的噪声明显比频繁模式大。噪声来自未捕获的交错、持续时间的高度变化和真实的异常。为了从这些噪声数据中发现真正的异常,我们使用了一种基于统计异常检测方法,即PCA检测器,它在从控制台日志和许多其他系统[28]、[13]中进行离线问题检测时是比较准确的。

与频繁模式挖掘一样,主成分分析的目标是发现统计上占主导地位的模式,从而识别数据内部的异常

主成分分析可以通过自动选择一个(小的)坐标集来反映原始坐标之间的协变,从而捕获高维数据中的模式。一旦我们从归档和定期更新的数据中估计出这些模式,我们使用它们来转换传入的数据,使异常模式更容易检测。

PCA检测也有一个模型建立阶段和一个在线检测阶段:

在实际部署中,模型可以定期更新。请注意,由于此阶段的数据比较混杂,并且非模式数据的依赖于工作负载,因此PCA的模型更新周期通常比频繁模式挖掘的模型更新周期短。

7. EVALUATION(评价)

本文使用:

为了将本文的在线方法与[28]中提出的离线算法直接进行比较:

作者相信这个数据集是一个很有代表HDFS集群

[28]中,数据集中所有的踪迹都被标记为正常或异常,并且大多数异常都有分类/解释。这为评估本文的结果提供了依据:

请注意,标记过程不考虑任何踪迹的持续时间。本节后面展示这种省略的效果

为了模拟系统操作员将如何使用本文的技术,使用以下两步方法来评估本文的方法:

需要设置两个参数:

7.1 A. Stage 1 Pattern mining results(A.阶段1模式挖掘结果)

阶段1的目标是删除与正常应用程序行为相对应的频繁模式

举例说明表的意思,该表显示模式1是分配一个写入块所对应的事件序列。踪迹中的20.3%事件被分类为属于此模式的实例,因此将被过滤掉,不会传递到阶段2。此模式的持续时间分布的99.9、99.95和99.99的百分位数分别为11秒、13秒和20秒。我们选择这些高百分位数值是因为我们希望大多数正常会话在这些间隔内完成。
注意, 即使是模式持续时间的99.99的百分位数也明显小于TmaxT_{max}。这一点很重要,因为检测延迟是基于模式持续时间或TmaxT_{max}(以较短的值为准)。由于篇幅的限制,本文仅将TcutT_{cut}设置为每个模式的99.95的百分位值来显示检测结果。其他值的结果类似

具体解释相关模式:

7.2 B. Detection precision and recall(B.检测精度和召回率)

[28]中获得每个事件跟踪的label/abnormal label

在我们的数据集中,有575,319条事件踪迹,其中16,916条被标记为异常

正如第5节的B小节中所描述的,我们使用了一个相当复杂的模型来估计会话的持续时间。如果我们假设是一个简单的高斯分布,那么表I中模式1的99.95%的TcutT_{cut}估计为5.3,模式2的估计为4.0,不到本文建模的分布拟合估计的结果时间TcutT_{cut}的一半。使用高斯分布推导的截止时间,假警报的数量增加了45%,精度从86%下降到80%。

因此,持续时间分布估计(第5节的B小节)增加的复杂性较小,而召回率和准确率要高得多

7.3 C. Detection latency(c.检测延迟)

检测延迟(在第5节中定义)捕获检测的及时性,这是在线方法的一个关键目标。

回想一下,最小化检测延迟的困难源自这样一个事实:在发生特定事件或一组事件之前,不可能总是标记踪迹异常。 例如,表I模式1中的分配块消息仅仅表示操作序列的开始;检测器必须缓冲事件并等待进一步的事件。直到模式1的最后一个事件(例如,三个预期接收消息中的最后一个),才会对该消息作出最终决定。然后,包含此分配块事件的跟踪的检测时间就是从发出分配块事件到检测结果生成的时间。

7.4 D. Comparison to offline results(D.与离线结果比较)

8. DISCUSSION(讨论)

在线检测的局限性
在线检测的一个明显的局限性是,我们无法捕获跨事件在很长时间内的相关性。

例如,正如在第7节的A小节中所讨论的,表I中的模式1和2之间存在巨大且不可预测的时间间隔,因此我们必须将它们分成两种模式。然而,这种分离的结果是我们失去了观察模式1中的事件与模式2中的匹配事件之间的相关性的能力,这可能会影响我们捕获一类新的操作问题。(例如,模式1中的事件指示有多少数据节点开始写;在模式2中,每个这样的节点都应该有一个相应的结束写入事件。)
这是在线检测固有的局限性,因为需要检测延迟。这可以通过记住更长的历史(可能以更紧凑/聚合的形式)来解决,尽管这会使检测器的设计更加复杂。
因此,我们提出了一种不同的方法:通过利用相对廉价的计算周期,我们可以对存档数据定期执行脱机检测,以发现违反此类未捕获约束的异常。

用例

9. CONCLUSIONS AND FUTURE WORK(结论,未来工作)

结论:

作为未来的工作:

10. REFERENCES(参考文献)

[1] D. Borthakur. The hadoop distributed file system: Architecture and design. Hadoop Project Website, 2007.

[4] A. Clauset, C. Shalizi, and M. Newman. Power-law distributions in empirical data. SIAM Review, 2009.

[9] Hellerstein J L , Ma S , Perng C S . Discovering Actionable Patterns in Event Data[J]. Ibm Systems Journal, 2002, 41(3):475-493.

[21] K. Rieck and et al. Computation of similarity measures for sequential data using generalized suffix trees. In NIPS’2007. MIT Press, Cambridge, MA, 2007.

[28] Xu W , Huang L , Fox A , et al. [ACM Press the ACM SIGOPS 22nd symposium - Big Sky, Montana, USA (2009.10.11-2009.10.14)] Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles - SOSP "09 - Detecting large-scale system problems by mining console logs[J]. 2009:117.

11. 附录

11.1 分类算法的评估方法

  1. 几个常用的术语
    这里首先介绍几个常见的 模型评价术语,现在假设我们的分类目标只有两类,计为正例(positive)和负例(negative)分别是:

1)True positives(TP): 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数(样本数);
2) False positives(FP): 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数;
3) False negatives(FN):被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数;
4) True negatives(TN): 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数。 
评价指标图

上图是这四个术语的混淆矩阵。
1)P=TP+FN表示实际为正例的样本个数。
2)True、False描述的是分类器是否判断正确。
3)Positive、Negative是分类器的分类结果,如果正例计为1、负例计为-1,即positive=1、negative=-1。用1表示True,-1表示False,那么实际的类标=TF*PN,TF为true或false,PN为positive或negative。
4)例如True positives(TP)的实际类标=1*1=1为正例,False positives(FP)的实际类标=(-1)*1=-1为负例,False negatives(FN)的实际类标=(-1)*(-1)=1为正例,True negatives(TN)的实际类标=1*(-1)=-1为负例。

  1. 评价指标
    1. 正确率(accuracy)
      正确率是我们最常见的评价指标,accuracy = (TP+TN)/(P+N),正确率是被分对的样本数在所有样本数中的占比,通常来说,正确率越高,分类器越好。
    2. 错误率(error rate)
      错误率则与正确率相反,描述被分类器错分的比例,error rate = (FP+FN)/(P+N),对某一个实例来说,分对与分错是互斥事件,所以accuracy =1 - error rate。
    3. 灵敏度(sensitive)
      sensitive = TP/P,表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力。
    4. 特效度(specificity)
      specificity = TN/N,表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力。
    5. 精度(precision)
      精度是精确性的度量,表示被分为正例的示例中实际为正例的比例,precision=TP/(TP+FP)。
    6. 召回率(recall)
      召回率是覆盖面的度量,度量有多个正例被分为正例,recall=TP/(TP+FN)=TP/P=sensitive,可以看到召回率与灵敏度是一样的。
    7. 其他评价指标
      计算速度:分类器训练和预测需要的时间;
      鲁棒性:处理缺失值和异常值的能力;
      可扩展性:处理大数据集的能力;
      可解释性:分类器的预测标准的可理解性,像决策树产生的规则就是很容易理解的,而神经网络的一堆参数就不好理解,我们只好把它看成一个黑盒子。
    8. 查准率和查全率反映了分类器分类性能的两个方面。如果综合考虑查准率与查全率,可以得到新的评价指标F1测试值,也称为综合分类率:F1=2×precision×recallprecision+recallF1=\frac{2 \times precision \times recall}{precision + recall}
      为了综合多个类别的分类情况,评测系统整体性能,经常采用的还有微平均F1(micro-averaging)和宏平均F1(macro-averaging )两种指标。宏平均F1与微平均F1是以两种不同的平均方式求的全局的F1指标。其中宏平均F1的计算方法先对每个类别单独计算F1值,再取这些F1值的算术平均值作为全局指标。而微平均F1的计算方法是先累加计算各个类别的a、b、c、d的值,再由这些值求出F1值。由两种平均F1的计算方式不难看出,宏平均F1平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均F1平等考虑文档集中的每一个文档,所以它的值受到常见类别的影响比较大。