云系统中的告警质量调研和告警优化策略
本文发表于DSN2022(CCF-B),作者为杨天益(香港中文大学博士研究生),相关工作为华为-港中文联合实验室研究中产出。原文链接Characterizing and Mitigating Anti-patterns of Alerts in Industrial Cloud Systems
摘要
告警对于云系统异常时人工接入处理的及时性至关重要。告警的质量会显著影响云系统可靠性和云服务商的业务收入。在实践中,由于云系统海量的告警数据中存在一些没有信息量的、错误的、有误导性的告警,使得oncall的工程师无法快速定位根因和修复故障。我们将这些无效的告警的称为“告警的anti-pattern”。为了更好地理告警的anti-pattern,并提供可操作的措施来治理anti-pattern,本文首次对工业云系统中治理告警的anti-pattern的实践进行了实证研究。我们研究了业界领先的云服务商华为云的告警策略和告警处理过程,研究结合了两年内数百万个告警的定量分析,以及对18名经验丰富的运维工程师的调查。因此,我们总结了四种单独的anti-pattern和两种集体的anti-pattern。我们还总结了当前治理告警anti-pattern的四种措施,以及告警策略配置的一些建议。最后,我们建议探索告警质量(QoA)的自动评估,包括告警的指示性、精度和可操作性作为未来的研究方向,帮助自动检测告警的anti-pattern。我们的研究结果对于优化云监控系统和提高云服务的可靠性具有重要价值。
云系统中海量的告警数据中存在一些没有信息量的、错误的、有误导性的告警。我们统称这些问题为告警的反模式(反模式),本文主要是针对告警的反模式进行实证分析,并针对实际告警治理的实践给出一些分析和建议。
针对告警的反模式,本文研究了以下四个研究问题:
- 告警中存在哪些反模式?
- 这些反模式是如何影响运维诊断告警的?
- 目前运维人员对于无效告警的应对方式是什么?
- 目前如何避免无效告警?
告警中的反模式
-
单个告警产生的反模式
- 告警描述笼统不清晰,导致运维人员无法得到明确的结论,影响分析
- 告警严重性不准确,导致运维人员把时间浪费在处理不重要的告警上。而且由于云系统的迭代更新,严重性也会随之改变
- 不合适的/过期的告警生成规则。比如系统会对底层基础架构和上层业务都进行监控并生成告警,虽然底层告警可能是某些故障的根因,但是由于容错机制的存在,底层的告警一般对服务质量不会有太大的影响。
- 闪断和震荡告警。持续很短时间,或者反复在正常和异常直接切换,通常是因为告警策略太敏感
- 告警风暴
- 重复告警:由相同告警策略生成,比如下图中haproxy的告警占到了大约30%
一个告警风暴例子中的重复告警
- 级联告警:由于模块依赖和调用关系,由告警传播生成
现有对反模式的回应
当告警数量比较少的时候,运维人员一般会手工处理每个告警,但是当短时间内生成告警数量较多的时候,通常会有以下几种方式:
- 告警屏蔽:对于噪声类告警,设置规则屏蔽瞬时告警、反复切换的告警和重复告警
- 告警聚合:对于非噪声类告警, 对告警进行聚合
- 告警相关性分析:
- 告警策略的依赖:比如一个源告警会出发生成另一个告警,运维人员会更关注源告警
- 根据云服务的拓扑进行相关性分析
- 检测新出现的告警:采用在线LDA的方式。用LDA主题模型,新兴告警通常在过去一段时间没有出现过,topic表现会不一样
防止出现反模式告警
-
华为云采取了一些告警规约并且定期对告警策略进行回顾,主要从下面三个方面来考虑:
- 监控对象是什么?和服务质量强相关的数据应该被监控
- 什么时候生成告警?
- 告警的属性对诊断是不是有帮助?
-
如果严格遵守告警规约,可以有效地减少无效告警,但是是否遵守告警规约依赖于人工检查。
未来研究方向
- 告警质量评估 (QoA) 的几个维度
- 告警的指示性。这个告警是否可以代表一个故障
- 准确性。告警能否正确反映异常的严重性
- 可处理性。告警能否被有效地处理,与告警目标和告警属性有关
- 未来工作:
- 结合人工知识和机器学习方法从上述三个角度来评估告警,比如基于人工知识来从上面三个角度给出标注,然后采用机器学习模型来学习,形成闭环。
- 对于以上三个属性,可以考虑使用human-in-the-loop的方式训练模型。具体来讲,运维工程师在处理告警时对告警质量的三个维度分别进行打分,有了这些分数之后,再使用多模态学习将告警质量分数与当时系统的监控指标进行融合学习,从而得到一个自动化判断告警质量的模型,并在系统运行时不断优化此模型。
(左)严格的告警生成策略
(中)自动化告警质量检测,不断利用人的标注训练机器学习模型
(右)对低质量的告警及时优化处理