共计 1435 个字符,预计需要花费 4 分钟才能阅读完成。
技术编辑:芒果果丨发自 思否编辑部
SegmentFault 思否报道丨公众号:SegmentFault
微软最近开源了 Lumos,这是一个 Python 库,用于自动检测和诊断“web 规模”应用程序中的度量回归。
在一篇技术论文中,公司研究人员声称,Lumos 已经在 Skype 和微软的开发团队的数百万次会话中进行了部署,从而使工程师能够检测到数百项指标变化,并拒绝数千个由异常检测器检测出的错误警报。
Lumos 优化检测过程,将误报率降低 90%以上
在线服务的运行状况通常是通过随时间跟踪关键性能指标(KPI)来监测的。这些方面的回归需要跟进,因为它们可能表明存在重大问题,从而导致成本增加和潜在的用户流失。但是,跟踪每个 KPI 回归的根本原因非常耗时,因为单个异常可能需要数天或数周的时间进行调查。
Lumos 是一种新颖的方法,它包含了现有的特定领域的异常检测器,但将误报率降低了 90%以上。它通过提供最重要变量的优先列表来解释度量值的变化,从而消除了确定变化是由于人口变化还是产品更新的过程。
该库还具有更广泛的目的,即通过比较对照和治疗数据集,同时又与时间序列成分保持不可知关系,从而了解任意两个语料之间的度量差异(包括偏见)。
该论文的合著者表示:“(Lumos)为产品所有者提供了有关其应用程序的人口统计变化的关键见解,并且……它为服务所有者确定了改善其工程系统的机会。(Lumos)使工程师花费在诊断度量回归上的时间更少,而将更多的时间用于构建令人兴奋的功能。”
对比数据集,提供诊断度量回归的假设
Lumos 利用 A / B 测试的原理来比较成对的数据集。每个数据集都是表格数据集,其中行对应于样本,列值包括感兴趣的度量,如表示 KPI 的变量,描述总体(如平台、设备类型、网络类型和国家),并提供诊断度量回归的假设。附带的配置文件指定了运行工作流的超参数 (变量) 和数据集中哪些列对应于度量、不变量和假设列的详细信息。
Lumos 首先验证数据集之间度量中的回归是否具有统计意义。然后进行总体偏差检查和总体偏差归一化,以考虑两个数据集之间的总体变化。如果在数据被归一化之后,度量中没有统计上显著的回归,度量中的回归可以用总体的变化来解释。但是如果度量中的增量具有统计学意义,那么这些特征就会根据它们对目标度量中增量的贡献进行排名。
微软的研究人员说,Lumos 作为主要的工具,用于监测与微软的电话、会议和公共交换电话网服务(PSTN)的可靠性相关的数百项指标。它运行在 Azure Databricks 上,该公司的基于 Apache spark 的大数据分析服务,根据优先级、复杂性和度量类型配置了多个工作。并且作业异步完成,以至于每当检测到异常时,它都会触发 Lumos 工作流,如果库确定异常是合法问题,就会引发事件警报。
开发时间节省 65% 至 95%,Lumos 不能保证捕捉所有服务回归
参与研究的成员称:“Lumos 将开发时间节省了 65% 至 95%。我们有 15 个主要指标,每个指标都根据关键维度进行监控,比如平台、租户、会议类型(连接、拨号和创建呼叫),结果是我们为一个指标跟踪了数千个时间序列。我们每天有数百万个呼叫分支,每个分支都会产生数百个遥测字段,作为 Lumos 的输入。”
微软的研究人员也提出了警告,Lumos 并不能保证捕捉所有服务回归,并且如果没有足够的数据量就无法提供意见。为了解决这个问题,他们计划专注于扩展对连续度量的支持,使用多变量特征进行特征排序,并引入特征聚类以解决特征排名中的多重共线性问题。