多维监测指标的异常定位

联合主办方:清华大学、华为、苏宁易购; 协办方:中国计算机学会互联网专业委员会; 承办方:清华大学计算机系、南开大学软件学院、华为可服务性部、苏宁IT总部; 数据提供方:华为、苏宁易购 友情协助:消费者BG云服务部云运维部、华为云OBS产品运维团队 苏宁易购IT总部监控研发中心;

333支参赛队伍竞赛剩余时间-172奖金¥0
  • 描述
  • 评估
  • 奖金
  • 时间线

问题描述

多维度指标的异常定位是AIOps领域的一个典型且有挑战的问题。在互联网服务运维中,当某个总指标(如总流量)发生异常时,需要快速准确地定位到是哪个交叉维度的细粒度指标(如“省份=北京 & 运营商=联通”的流量)的异常导致的,以便尽快做进一步的修复止损操作。由于运维中的指标维度多、每个维度取值范围大,导致异常定位时的搜索空间非常大。本次挑战赛将发布来自互联网公司的脱敏多维度指标数据,诚邀大家共同解决多维度指标异常定位这一AIOps难题!

图1 为多维度、可加和KPI的举例。其中, A, B, C 代表不同维度,a1, b1, a1b1 表示对应维度(或交叉维度)下的属性值(或属性值组合)。

图 1 多维度指标集示意图

解决该问题主要面临三个挑战:

1. 实时性要求高。 如前所述,当KPI总值发生异常时,运维人员希望快速定位到根因,以快速止损或恢复。然而,随着维度的增多和各维度中属性值数目的增加,维度及其属性值组合的数目会急剧增加。因此,当维度较多以及各维度中属性值数目较多时,对算法的计算效率提出了很高的要求。

2. 元素指标之间有关系较为复杂。 如图1所示,KPI维度的属性值存在着可加和关系。例如,KPI总值等于A维度(或B\C维度)下所有元素值之和,属性值为a1的KPI则等于a1b1, a1b2, …等属性值的KPI的加和。此外,不同维度间的属性值也会相互影响。例如,当维度为位置,属性值为 北京 的KPI发生异常时,一般属性值为北京移动、北京联通的KPI也会发生异常,进而属性值为移动、联通的KPI也会发生异常。

3. 要求结果尽可能简洁。 异常定位返回的结果是导致KPI总值发生异常的维度及其属性值集合。该结果会提供给运维人员以尽快核实并修复根因。因此,返回的结果需要尽量简洁、精确。所以,我们需要用尽可能少的维度及其属性值的组合表示出最为全面的根因。

注意:我们假设,一个时刻的异常根因只存在于同一个维度(或交叉维度中)。如图1中,若tx时刻KPI总值异常,那么根因集合可能为{a1,a2}或{a1b1,a2b2},不会出现{a1,b1}、{a1,a2b2}这样元素属于多个维度(或多个交叉维度)的情况。对应到实际案例中,根因集合可能是{省份=北京,省份=广东}或{省份=北京&运营商=联通,省份=广东&运营商=移动},但是不会出现{省份=北京,省份=广东&运营商=移动}。这样假设的原因主要是为了简化问题;其次,实际中我们发现,在一个稳定的系统中,同一时刻异常根因元素属于多个维度(或多个交叉维度)的情况非常少。

更为严谨的表述如下:这样多维度KPI的数据结构称为data cube,如图2表示的是一个3维data cube,3个维度分别为A, B, C。一个data cube对应的低维度子data cube称作cuboid,记作Bi,如BA,BA,B,BA,B,C分别是1维、2维、3维的cuboid,图3表示就是图2中的3维的data cube共包含的7个cuboid。Bi中KPI元素的集合记为E(Bi)。那么,多维度可加和的KPI异常定位问题可以定义如下:当KPI总值异常时,需要快速、准确地查找出导致这次异常的KPI根因集合,要找的集合记为RSet,则RSet⊆E(Bi),表示RSet中的元素同属某一个cuboid。

图 2 一个3维data cube示例

图 3 3维data cube中的cuboid示例

案例示意

如表1所示,交易量是一个具有3个维度(包括省份、机房、交易类型)的KPI。如图4所示,当交易量发生突降时,其根因是属性值组合为“机房A、转账”的KPI。

表1 问题案例的多维度示意

图 4 问题案例的根因示意

数据集及竞赛流程简述

由于不同层级间的属性值存在可加和关系,因此,我们只提供最细粒度的属性值对应的KPI时间序列。如图1中的a1b1c1, a1b1c2, …一个四维度的KPI数据示例见表2。此外,我们会告知KPI总值发生异常的时刻,以便参赛者进行异常定位。异常时刻的形式如表3所示。

*注意:鉴于实际中该问题场景的数据中往往异常案例很少,参赛者设计算法时需要自行注入一些异常数据以对算法进行评估。竞赛分为以下三个阶段:

1)预赛阶段1:数据中并不包含异常,即只有表2,没有表3。各参赛队伍自行注入异常、设计算法。异常注入的方法可以参考但不限于文献[1]中所用方法。

2)预赛阶段2:2019年3月中旬开始(具体时间视情况而定),定期提供不同的表2和表3,对各参赛队伍的算法进行测试。此时的表2中会包含已经注入的异常点。即预赛阶段只测试算法结果的准确性信息。2019年6月初评选出效果最好的10~20支队伍进入决赛。

3)决赛阶段:为每支队伍提供统一的云计算资源,提供一定时间段的训练数据。要求参赛者运行在给定云资源上的程序与主办者的服务器进行通讯,主办者服务器测试数据则模拟实时数据,每隔固定时间间隔生成新的数据及该时刻是否异常。参赛者程序需在发生异常后的规定时间内输出异常定位结果并返回给服务器。 也就是说,决赛阶段需要测试算法的实时性和准确性信息。

表2 指标集数据示例

表3 总指标异常时刻

常见解决方法

[1] Yongqian Sun, Youjian Zhao, Ya su, et al., “HotSpot:Anomaly Localization for Additive KPIs withMulti-Dimensional Attributes”, IEEE Access, 2018.
https://netman.aiops.org/wp-content/uploads/2018/12/sunyq_IEEEAccess2018_HotSpot.pdf
[2] R. Bhagwan, R. Kumar, and R. o. Ramjee, “Adtributor: Revenue debugging in advertising systems,” NSDI, 2014, pp. 43–55.
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/main-14.pdf
[3] Q. Lin, J. Lou, H. Zhang, and D. Zhang, “idice: problem identification for emerging issues,” ICSE, 2016, ACM,, pp. 214–224.
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/ICSE-2016-1-iDice-Problem-Identification-for-Emerging-Issues.pdf

描述

多维KPI的异常定位测试集2:
数据格式与“多维KPI的异常定位测试集1”一致且数据时间上紧接其后。



关联数据集

数据集名称 文件名称 文件描述 上传时间 操作
4627 多维KPI的异常定位测试集2 2019AIOps_data_test2.zip 多维KPI的异常定位测试集2 2019-05-17 18:27:53 登录后,可下载
还可以输入200个字符loadding评论

我的评论

锤子哥刚刚

相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!

总共0条评论

排序
  • 所有
  • 锤子哥一天前

    相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!

    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • 还可以输入200个字符回复
  • 锤子哥一天前

    相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!

    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • 还可以输入200个字符回复
  • 锤子哥一天前 作者

    相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!

      还可以输入200个字符回复
  • 锤子哥一天前

    相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!

    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • 还可以输入200个字符回复
  • 锤子哥一天前

    相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!

    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • Jia.xu一天前

      蓝鲸的产品肯定Nice

      @他
    • 还可以输入200个字符回复
  • 锤子哥一天前 作者

    相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!相当的Nice,对工作很有用,帮助我减轻了很多不必要的杂活儿,给作者赞一个!有了它,排查系统负载高的进程一目了然,赞!

      还可以输入200个字符回复

参赛规则

参赛对象

大赛面向全社会开放,年满13周岁的个人、高等院校、科研单位、企业、创客团队等人员均可报名参赛。数据集建立及维护过程中能接触到数据的人员不得参赛。

报名方式

每个参赛队伍自行选出一名领队,需完成以下两步:1)请领队在本网站注册账号并进行实名认证:点击“竞赛”中的“多维监测指标的异常定位”–>点击“我要报名”按钮,点击账号头像–>点击页面左侧的“实名认证”并按要求操作;2) 请领队发送成员信息到邮箱 netman_iops@126.com 。等工作人员审核认证信息及邮箱报名信息无误后,会回复邮件,提示报名成功。

邮件格式示例如下:

邮件标题:2019AIOps挑战赛报名_[领队姓名] ,如“2019AIOps挑战赛报名_张三”

邮件主体内容如下:

账号昵称(队伍名称):****

注册邮箱:****

领队姓名:**** , 身份证号:**** ,电话:****,所在单位及部门(若为学生,则写所在学校及院系、年级):****;

队员1姓名:**** , 身份证号:**** ,电话:****,所在单位及部门:****;

队员2姓名:**** , 身份证号:**** ,电话:****,所在单位及部门:****;

提示:

1 队伍成员共同使用一个注册账号提交结果,领队需在官网实名认证,并发送成员信息到指定邮箱,形式如上,即为报名成功。

2 一个队伍中只有领队需要在网站注册账号,成员无需且不得以任何形式注册其他账号,否则将取消整个队伍成绩。

3 领队身份实名认证需要在网站提交身份证信息,认证通过之后才可进行后续的提交测试结果等操作。

4 队伍提交结果以注册账号为准。

5 账号昵称即为队伍名称。

注意事项

(1) 报名时间:即日起至 预赛阶段1 结束前。

(2) 参赛队伍不限制参赛人数。

(3) 每支参赛队伍需要确定一位领队,并由领队在大赛平台上注册一个账号,并上传个人身份证信息,进行认证。

(4) 要在比赛中排名并获得奖品,每位参赛者(个人及领队)提供个人信息,即发送邮箱的报名信息请按照示例填写完整。

(5) 如果一个人参加多个队伍,与该人员关联的所有队伍都将被取消资格。

(6) 参赛队员必须遵守并签署《竞赛选手报名协议》

竞赛流程

本次大赛最终将以决赛成绩结合答辩表现,加权计算总成绩,决出最终的大奖。

本次竞赛分为三个阶段:

1 预赛阶段1:2019年3月中旬前,提供一段时间的真实数据,各参赛队伍自行构造异常、设计算法、完成算法程序。

2 预赛阶段2:2019年3月中旬-6月初,定期提供测试数据集(包含异常信息),测试各队程序的准确性,每次测试后,系统会按照评测指标实时反馈分数,并更新榜单排名。2019年6月初将评选出进入决赛的队伍,我们将对最终前25的队伍进行代码检查,以防有作弊行为。

3 决赛阶段:2019年6月底,为每支队伍提供统一的云计算资源,提供一定时间段的训练数据,测试数据则模拟实时数据(每隔固定时间间隔生成新的数据及该时刻是否异常),算法需在发生异常后的规定时间内产生结果, 即 测试算法的实时性和准确性。为保证比赛的公平性,主办方会检查每个决赛队伍的代码中是否有作弊行为。最终于2019年7月初举办决赛研讨会,对测试结果和答辩效果加权计算总成绩,决出最终的大奖。

预赛截止及决赛队伍审核

1 预赛截止时间:北京时间 2019年6月初,具体时间届时再通知。

2 决赛名额确定:预赛成绩排名前10~20的队伍将进入决赛(届时视情况再定),为了保证公平性,我们将对最终前20的队伍进行代码检查。

3 预赛代码提交:请排行榜排名前20的队伍将预赛代码于6月初(具体时间待定) 发送到 netman_iops@126.com。邮件主题名为:2019iops挑战赛预赛代码-队伍名称。内容:队伍名称,注册邮箱,队伍id(排行榜显示),两个及以上的手机联系方式(便于后期代码检查)。代码:请以附件压缩包的方式发送。接收到自动回复即为发送成功。过期发送的代码视为无效。

4 预赛代码审核机制:预赛代码我们将采用double check的方式,双人确定无误后,视为有效代码。

奖项设置

以下提及金额为税前金额

冠军(1名):100,000人民币,颁发获奖证书

亚军(1名):30,000人民币,颁发获奖证书

季军(若干名):10,000人民币,颁发获奖证书

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FAQ

1 预赛阶段1 发布的数据,整个竞赛阶段都是用这个场景下的数据吗?后续的数据维度数目、属性值等会改变吗?
答:预赛阶段只使用这个场景下的数据,维度数目、属性值等不变。但是决赛阶段可能会换场景,维度数目、属性值等可能都会改变。

2 预赛阶段1 发布的数据集里面是否包含异常?
答:预赛阶段1 的数据是实际数据,可能含有一些异常及噪声,这个数据只是辅助大家设计算法用的;后续测试阶段(预赛阶段2)的数据会明确告知哪些时间点KPI总值是异常的,参赛者只队这些给定时间点的异常进行定位即可,即不需要参赛者对KPI总值进行异常检测。

3 已经报名的团队,若要人员调整变动,最晚什么时候可以变动,该怎么操作?
答:已经报名的团队,若要人员调整变动,最晚要在 预赛阶段1 结束前(约2019年3月中旬)变动;变动方式是,重新发送一封报名邮件到netman_iops@126.com,邮件内注明具体变动信息即可。

4 什么时候截止报名?
答:预赛阶段1 结束(月2019年3月中旬)之前报名均可。

5 预赛阶段2 怎么提交测试结果?
答:就在竞赛页面。原来的“我要报名”按钮,报名时点击过后就变成了“提交结果”(只有实名认证通过的才有权限提交)。什么时候放出测试数据会在群里通知大家,到时测试结果就在这提交。

6 预赛阶段2 具体怎么进行?
答:1)关于时间方面。将分3次开放测试数据。三次测试成绩单独排名,进入决赛的评选以第三次测试为准、并辅以源代码检查,前两次测试供大家调试、优化算法。
第一次测试:发布数据时间: 3.22日 中午 12:00,结束时间: 4.18日 24:00;
第二次测试:发布数据时间: 4.19日 中午 12:00,结束时间: 5.16日 24:00;
第三次测试:发布数据时间: 5.17日 下午 18:00,结束时间: 5.26日 24:00。
2)关于提交结果。在三次测试持续时间内,各参赛队伍每天可以多次(前两次此时每天最多5次、第三次测试每天仅限1次)提交结果,如无格式错误,请等待5~10分钟,会显示本次结果得分。“排行榜”中会显示提交过的最高得分。注意:结果文件的格式要符合竞赛“评估”中的要求。
3)关于数据。整个预赛阶段的数据都是采集自某真实系统,预赛阶段1 中公开的数据,是基于真实系统采集的原始数据,未经过人工平滑、注入异常等操作;预赛阶段2 将公开的数据,则是基于真实数据进行了人工注入异常。数据的时间上,预赛阶段2与预赛阶段1 的数据连续,且三次测试数据依次连续。
4)关于异常注入。异常注入的规则借鉴论文《HotSpot: Anomaly Localization for Additive KPIs With Multi-Dimensional Attributes》中的Ripple effect规则。
5)关于结果评估。请详细审阅本竞赛中 问题“描述”和“评估”相应部分。

7 关于决赛环境
答:决赛环境目前正在搭建,初步拟定规则如下,欢迎大家讨论提意见、建议,我们会继续完善:

1)选手需要准备的内容:
①. 一个Docker镜像,其中包含了选手的程序和所有需要的环境。
②. Docker镜像将会通过以下参数启动Container:“docker run -i –cpu= –memory= –storage-opt size= -v :/data –ipc=private ”。

2)选手程序需要做什么:
①. `/data`中会按时序出现各个时间点的数据。格式和预赛相同,每个时间点对应的数据文件名为’{timestamp}.csv’(例如‘1536827700.csv’)。
②. 在发生异常的时间点,监控程序会向选手程序的stdin写入一行,内容为发生异常的时间戳。
③. 选手程序需要在接受到stdin输入的限定时间内输出根因结果。内容为一行,格式和预赛提交格式相同:‘{timestamp},{root_cause string}’(例如‘1501475700,a1&b2;a3&b4’)。注意需要换行和刷新缓冲区。超时的输出会被忽略。

3)监控程序会做什么:
①. 保证`/data`中按时间顺序依次出现各个时间点的数据。
②. 在异常数据到来的时候,向选手程序的stdin写入一行,内容为发生异常的时间戳。
③. 接受选手程序输出的按规定格式的根因结果。只有在后续时间点数据出现之前的结果才有效,否则会被直接忽略。

4)每个选手程序拥有的计算资源:
一台虚拟机器: 8 Cores,64GB RAM,200GB Storage。

* 主办方保留对比赛规则进行更新的权利。

上传的结果文件

刷新
文件名称 文件描述 上传时间 文件大小 分数 计算状态 错误信息 操作

注册

请输入正确的邮件格式

密码长度6-20位

两次输入密码不匹配,请重新输入

昵称已被占用,请重新输入

点击[注册],即代表你同意 《iOps注册协议》
注册

注册协议

【首部及导言】

为有效利用QQ号码资源,维护用户合法权益,特制订《QQ号码规则》(以下简称“本规则”)。请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款,以及开通或使用某项服务的单独协议,并选择接受或不接受。限制、免责条款可能以加粗形式提示您注意。

除非您已阅读并接受本规则所有条款,否则您无权申请或使用QQ号码。您申请或使用QQ号码的行为即视为您已阅读并同意受本规则的约束

一、【规则的范围】

1.1 本规则是腾讯制定的关于获取和使用QQ号码的相关规则。本规则适用于腾讯提供的需要注册或使用QQ号码的全部软件和服务。

1.2 本规则属于腾讯的业务规则,是《腾讯服务协议》不可分割的组成部分。

1.3 您通过QQ号码使用腾讯的软件和服务时,须同时遵守各项服务的单独协议。

二、【QQ号码的性质】

QQ号码是腾讯创设的用于识别用户身份的数字标识。QQ号码的所有权属于腾讯。

三、【QQ号码的获取】