∣LCS(x,y)∣找到最相似的 fault-free trace 称为 selected fault-free trace ,然后根据 selected fault-free trace 去除掉 faulty trace 中公共的 events 保留不同的 events,保留下来的 non-comment events 用于异常检测模型进行分析。
Probabilitic modeling
异常检测模型的主要目的是判定保留下来的 events 是故障还是误报。
这容易理解:就算测试 trace 中存在和 fault-free trace 序列不同的 events,也不知道是故障引起的还是采集的 fault-free trace 没有覆盖到所有用户行为。
论文中基于隐马尔科夫模型提出了变阶马尔科夫模型 (Variable-order Markov Models, VMMs) 来估计 event 的故障概率。变阶马尔科夫模型可以参考论文:【2004/JAIR】On prediction using variable order markov models。
VMMs 的主要作用是:利用上下文 Sequences 估计之后 Symbolσ 出现的条件概率,可以根据训练数据来拟合模型P^(σ,s),模型优化的对数损失函数为
ℓ(P^,x1T)=−T1i=1∑TlogP^(xi∣x1…xi−1)
简单的 VMMs 不能解决 zero-frequency problem,即存在 sequences 没有出现在训练集中导致学习的模型健壮性并不好。因此论文中使用 PPM (Prediction by Partial Matching) 无损压缩算法来进行优化。
PPM 是一种统计模型技术,主要思想是结合多个固定阶数k∈(0,D] 的上下文模型来构造预测模型,D 表示马尔科夫模型的最大阶数,其包括两种变体: escape 和 exclusion;论文中使用的是 escape 机制,对于训练数据中未出现在序列s 后的 symbols 算法会分配一个均匀概率P^k(escape∣s),对应的出现在s 序列后的概率为1−P^k(escape∣s) 。
对应的条件概率计算计算公式变为:
P^(σ∣sn−D+1n)={P^D(σ∣sn−D+1n),†P^D( escape ∣sn−D+1n)⋅P^(σ∣sn−D+2n),‡
† 表示sn−D+1n 出现在训练序列中;‡ 表示未出现在训练序列中,论文中设定默认D=5,可以根据实际 sequence 长度调整。
📢 注意是使用 N-1 个 fault-free trace 训练 VMMs,1 为 selected fault-free trace。
详细计算过程没有详细说明,需要参考其它文献。
- J. G. Cleary and W. J. Teahan, “Unbounded length contexts for ppm,” The Computer Journal, vol. 40, no. 2 and 3, pp. 67–75, 1997.
- J. Cleary and I. Witten, “Data compression using adaptive coding and partial string matching,” IEEE Trans. on Communications, vol. 32, no. 4, pp. 396–402, 1984.
- A. Moffat, “Implementing the PPM data compression scheme,” IEEE Trans. on Communications, vol. 38, no. 11, pp. 1917–1921, 1990.
Classification of anomalies
模型的异常检测结果可以将 events 划分为以下几种类型:
- Comment events:表示 faulty trace 和至少一条 fault-free trace 中的 events。
- Anomalous events:表示 faulty trace 和 fault-free trace 中不同的 events。可以划分为两种类型:
- Spurious events:在 fault-free 情况下没有发生的 events。(理解为新的 event)
- Missing events:在 fault-free 情况下发生但是在故障注入后未发生的 events。(理解为缺失的 event)
根据 selected fault-free trace,故障 event 诊断:
- 如果 faulty trace 包含 event 且 VMM 条件概率低于一定值ϵSPURIOUS=20%,那么这个 event 是 Spurious;
- 如果 faulty trace 不包含 event 且 VMM 条件概率大于一定值ϵMISSING=80%,那么这个 event 是 Omission;
Failure clustering
为了更好地理解故障模式,可以将实验中注入的异常类型划分为多种故障模式,📢 不是直接将异常 traces 划分为多种异常模式。
论文中首先用一个特征向量来表示每种故障注入的模式:特征向量的维度等于实验中所有 events 数量d∗2,包含两种维度:
- 前d∗1 表示这种故障模式下 Spurious events 出现次数;
- 后d∗1 表示这种故障模式下 Missing events 出现次数;
例如第i 类故障注入实验包含唯一的 events A,B,C,特征向量可以表示为xi=[1,1,0,0,2,3],然后使用聚类算法对这些向量进行聚类。
之后就是对 trace 进行一些统计可视化。…
Experiments
实验配置如下,trace 中包含的 events 数量貌似有点多。
不同方法的比较结果如下,在较低误报率下命中率也较高,100 % 误报率真叫宁可错杀一千,也不漏掉一个!
时间性能统计如下
还有些参数对比实验不再细述,感兴趣的可以参考原文。
Thoughts
- 整体属于另一种 trace 异常检测的思路,将 trace 作为一种时间序列使用马尔科夫链进行建模;
- 仅考虑 events 时序和数量特征还缺少了 trace 的结构特征,后续可以使用 tree/graph-based 方法编码结构特征;
- 方法没有考虑 latency 维度特征,解决不了正常 trace 和 异常 trace 序列相同但是 latency 属性不同的问题。
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梦家博客! 打赏
wechat
alipay