根因分析之iDice 文章复现
1 Abstract 原文 给的场景是对于大规模集群的运维,当一条issue被上报的时候,通常会带上一些attribute,比如时间,软件版本,所处的国家,城市,具体在哪个机房,浏览器,操作系统等等。 在平时的时候,每天的上报的issue数量应该是差不多的,但有些时候,报错数量会突然上升,对于运维人员定位到问题所在往往很花时间。背后的问题可能是某个attribute或者某几个attributes的组合,文章称为effective combination。 这里通过三个步骤来从所有的attribute combination中找到最后可能引发报错激增的effective combination。 2 Challenge 想要找到所有effective combination的最暴力的做法就是,枚举所有attribute combination,然后以某种方式来衡量它对于总体issue激增的关系。 这里主要的问题在于搜索空间过大,本文最大的创新在于对搜索空间的剪枝。如果一共有m个attribute,那一共的组合方式就是(2^m - 1)种 3 Approach 文章把整个流程主要分成三个步骤(用做剪枝)和一个结果排序 Impact based Pruning: 基于影响的用户量做剪枝(不含时间信息) Change Detection based Pruning: 基于时间线上的突变来剪枝(时间序列处理) Isolation Power based Pruning: 计算一个类似信息熵增益的值来判断这个attribute combination的区分度 Result Ranking: 计算这个attribute combination对于全局的显著性 3.1 Impact based Pruning 对于一个effective combination而言,它必须影响足够多的用户。所以这里定一个threshold来过滤掉一些不可能的参数组合。(排除时间这个维度) 这里的目的是 寻找closed frequent itemsets,文章里的没有对算法进行详细描述,就说用BFS-based closed itemset mining algorithm。 在复现的时候,我先用了现成的找 frequent itemset 的算法( Apriori /FPMax/ FPGrowt