做运维监控的异常检测,主要看几个吧。
第一个是skyline项目,最早是2013年由etsy开源的。总体思路是通过各种统计方法来判定avg(last(3))是否异常,然后多数投票。etsy后来内部的v2版没继续开源(但是有分享PPT,加了分解,用了KStest等),但是社区有其他人接手了,一直在维护,添加了诸如通过tsfresh提取特征做标注过滤等等实用功能,包括调整算法次序等各种细微的性能优化点,应该算是这个领域最接近开箱即用的监控体系。见:https://earthgecko-skyline.readthedocs.io/en/latest/overview.html
第二个是numenta的HTM项目,这东西思路比较奇特,说实话搞不太懂。但是他们公司自己说已经在大规模IT环境上用着了。官方提供了一个HTM studio的桌面端,可以很方便试用。另一个不能不提的,就是他们另外有一个项目,叫NAB,利用一些公开数据集,对比各种开源的异常检测算法在公开数据集上的表现(上面说的earthgeocko-skyline也参加了这个对比)。见:https://github.com/numenta/NAB 项目wiki里也对几个开源项目做了点评,尤其是像yahoo的EGADS等比较有名的,建议阅读。NAB的评分设计我觉得也蛮有趣的。它的思想是,异常是一整个窗口的事情,你只要能在窗口的较前位置发现就好,越晚,评分越低。
第三个,就是裴丹教授这五年来陆续发表的系列论文了。最开始是和百度合作的Opprentice,我觉得有点像是skyline的高级版。它也是通过多种统计方法来判定异常,但是这里统计方法的参数均分采样,一下子就变成上百个特征了,然后顺势用RandomForest做个投票。缺点就是有监督,没个专职人工肯定用不起来。Opprentice未开源,但是腾讯去年开源的Metis,在issue里说了主要是借鉴Opprentice思路。不过metis开源阉割太多,见:Tencent/Metis 。接着是和阿里合作的Donut,采用的VAE算法,从有监督走向无监督,上手难度低了下来。Donut是开源的,但只是一个库,还是要自己封装一下,见:https://github.com/haowen-xu/donut ,只是donut主要也就对网站访问量这种指标比较有效。接着是ADS,这个是在原先ROCKA+Opprentice的基础上,改用CPLE半监督学习。好像目前没看到直接的开源。不过ROCKA做指标聚类这事儿,又是另开一摊子,本身也是无数坑待填。裴教授也开了一个类似NAB的算法比赛,不过规则和NAB不一样,他的规则是只认异常开始那一刻往后7个采样点内检测出来的。坦白说,我个人觉得NAB的规则更好一些。
第四个,是Expedia公司开源的adaptive-alerting项目,整个项目也是完整一套监控体系,包括事件处理恢复操作都在内。系统设计主要在如何方便集成不同的异常检测算法和评估方法,然后根据指标的情况来路由和触发重训练等等。目前已经集成的算法倒是比较基础,所以多学习他们wiki文档就行:https://github.com/ExpediaDotCom/adaptive-alerting/wiki/Architectural-Overview