出发点:

  • 现代大数据中心,非常庞大,复杂,由分布式系统构成,出现错误是很常见的的,但传统的依赖于人和人定的规则来定位错误不够有效率,且容易出错
  • 为了更好的选择这个问题该由哪个团队解决(分锅)

使用机器学习来自动分析这些复杂的关系,定位问题

  • 挑战:
    • 故障,组件,监控数据一直在变
    • 数据维度很多,来源各种各样
    • 监控数据不全或者不规范
    • 数据不是对所有团队可见
  • 设计目标:
    • 找到正确的团队来寻找根因(任务派发正确)
    • 故障派发要自动且稳健
    • 这个系统不能很大
    • 团队可以给出专家经验,但不决定派给谁
    • 系统必须在不常见的部署组件上很稳健
  • AutoML为啥不行:
    • 对输入数据格式敏感,不好用
    • 如果训练集数据变化很微小,就表现不好
    • 黑盒
    • 训练代价很大

Scout架构

image.jpeg

监控要求:

  • 决定哪份监控的数据与异常事件相关
  • 用数据之前预处理
  • 一些起到帮助的方法:
    • 给监控数据打标签
    • 从异常事件里提取组件(可以用组件之间的拓扑关系)

特征构建与预测

  • 有监督模型与无监督模型并用(有监督模型来判断常见事件,无监督模型来判断不常见事件)
  • 特征构建:
    • 随机森林
      • 每个组件的特征:
        • 事件/告警:统计在过去T时间内的数量
        • 时间序列数据:统计过去T时间内的统计特征:均值,标准差,最大最小值,K分位点
      • 合并多个组件的特征:适配组件采集出的数据
    • Modified Change Point Detection(CPD+)
      • 一个假设:当一个团队需要为某个异常事件负责时,这些组件的数据通常会发生偏移,从一个分布变到另一个分布
      • 虽然没法通过点的变化来判断哪个团队该为此负责,但是可以通过点的变化,来学习这些变化是不是真正的异常

模型选择:

  • 决定异常事件是不是范围内的
  • 决定用RF还是CPD+,通过元学习来判断事件是不是新事件(重要关键词和出现频率)

pipeline:

  • 发生异常事件
  • 提取相关组件,如果不成功,转交传统的派发系统
  • 选择模型
  • 提取特征
  • 分离

数据集:

  • Azure上9个月的数据
  • precision和recall都能做到97%