告警优化的三招六式
来源:华为云SRE确定性运维专刊(第二期)
SRE工程师的重要工作之一是通过构建智能运维平台,结合专家经验,对告警实现精准降维打击,减少99%的无效告警、手工重复工作。在海量告警的场景下,告警处理的极简智能不仅可以提升SRE人均运维效率,更可以提升工作幸福感。
随着业务量持续增长,软件架构不断演进和重构,功能特性和性能目标也经常变化。告警由各种复杂的黑盒、白盒的监控信息与判断条件交叉组成,会随着业务的演进一起变化。某个低频告警可能随时变成一个高频告警,需要SRE工程师快速制定临时应对措施,并且同步寻找根因以便彻底解决问题。
伴随着华为云的规模增长,告警也在规模增长,每天都有成千上万的告警等待Oncall处理,为降低海量告警带来的副作用,我们经过艰苦卓绝的优化实践,减少了99%的无效告警。经验总结如下:
一、告警过多的危害
1、Oncall压力过大,每天工单量>10,每小时都会触发不影响业务的告警,会影响个人工作效率,影响团队稳定性。
2、“狼来了”效应,会导致Oncall忽略真正影响业务的告警。
3、告警对监控系统和业务系统存在性能压力,需要设置Cgroup限制CPU和内存的使用配额。当告警过多时,会导致OOM或者CPU超限,引起告警进程被kill等系列问题。
二、告警优化的责任方
SRE工程师是告警秩序的管理者,使复杂告警简单化、通俗化,给Oncall输出简单、准确、有效、可处理的告警。
三、告警优化的三招六式
分析告警要从小的角度出发,把少量的告警信息抽象化,找出其中的本质,找出告警的主要矛盾和矛盾的主要方面,这样容易入手。这几个矛盾解决了,松开了复杂的信息,又会出现另外的复杂交叉聚合,以此方法依次解开,逐步就理顺了告警。
第一招:巴莱多定律,即2/8法则
在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的,因此又称二八定律。
如果所有告警都同等紧急,就意味着他们也同等不紧急。华为云部分服务存在紧急告警占比较大情况,紧急告警与非紧急告警的比例需符合2/8法则。
第二招:充分必要条件
告警应该是故障的充要条件,即告警后能推出故障,故障后能推出告警。华为云存在大量告警无法推出故障,只能从故障推出告警,相关人员以此免于被问责和处罚,是一种“政治正确”。
第三招:告警优化哲学
» 每个紧急告警都应该是可以具体操作的;
» 如果紧急告警不需要立即执行该操作,可以等到第二天早上再执行,那它就不应该成为紧急告警;
» 每个紧急告警的恢复都应该需要智力分析,如果某个告警只是需要一个固定的机械动作,那它就不应该成为紧急告警;
» 处理一个告警仅需要固定的机械动作,那么这个动作应该被安全地自动化执行;
» 处理告警的操作如果只具备短期效果,那么还要考虑长期方案;
» 如果SRE存在忽略告警的情况,说明这个告警与故障之间无必然关联,需寻找其它告警做聚合分析。
第一式:(告警)我是谁,我从哪里来
我是谁:要清晰了解每一个监控的逻辑,通过分析监控代码,分析告警表达式的与、或、非逻辑判断代码输出,画出告警逻辑图;
我从哪里来:告警的来源系统和传递路径要清晰了解;
第二式:集群/主备形态的告警优化建议
云服务虚拟机一般都是集群/主备形态,理论上单点故障不会引起集群故障,大部分告警可以通过软件工程+系统工程方法自愈。
» 首先应针对集群业务功能点做黑盒监控,生成紧急告警,确保先于用户发现问题;
» 其次将白盒监控告警降级到重要或者提示,降低Oncall并发处理压力;
» 最后利用故障自愈平台,针对确定性告警做确定性自动分析、自动恢复、自动关单措施。
第三式:利用SRE智能运维平台进行告警降量
华为云SRE构建的智能运维平台,可以从闪断、震荡、汇聚、相关性分析、自动屏蔽等多个维度对告警进行优化降量,从而减少单位时间内海量重复告警,避免了对SRE的干扰。
» 闪断告警:如果一告警源的同一告警产生时间与清除时间的间隔小于指定时间,则该告警称为闪断告警,该时间段称为闪断周期。
» 振荡告警:指定时间内,同一告警源的同一告警交替产生/恢复的次数(产生并恢复统计为1次)大于指定值时,则称该告警为振荡告警。
» 汇聚告警:指定时间内,同一条件(4要素)产生的告警次数大于指定值时,则可以汇聚;4要素信息有16种组合,其中4种可以通过汇聚降量,1种可以优化监控降量,2种需要结合自愈分析降量,其它组合可以根据需求开发能力。
» 告警触发次数:在服务依赖复杂情况下,经常有连锁反应导致监控异常,而业务却是正常态。适当增加告警触发次数为连续2-5次,可以有效降低告警误告率。
» 告警自动屏蔽:指定时间内,指定条件产生的告警,根据规则被屏蔽。SRE不会关注被屏蔽的告警,屏蔽后的告警将不在“当前告警”或“事件列表”中显示。自动屏蔽一般只屏蔽白盒告警,不屏蔽黑盒告警,用于减少变更导致的确定性告警。
» 告警自动清除:不能自动恢复的告警,需要手工清除。建议在告警恢复后,系统发送告警清除通知到监控平台,实现告警自动清除,减少手工重复工作。
第四式:周边服务/组件连通性告警化建议
典型的不确定性告警,在服务链很长的情况下,根据SRE云服务分权分域标准,通常有以下几类问题:
» 对其它服务不具备可操作性;
» 依赖链条很长,无法独立快速定位其它服务故障根因;
» 无法完全确定自身服务功能异常点范围;
因此,针对上述问题,需要通过确定性动作优化。通过对告警审视,选择如下告警优化措施:
» 升级到War Room告警,通过短时间投入各服务SRE人员定位根因,解决风险;
» 告警触发敏感度调低,可以增大告警失败次数、超时时长、容量阈值;
» 降级到次要/提示,作为故障的辅助判断依据。
第五式:过载类告警优化建议
总体思路:通过闪断+汇聚+监控脚本优化解决短期问题,通过自动扩容+产品优化解决长期问题。
» CPU利用率告警:CPU是可挤压类资源,通常认为CPU利用率告警本身无法处理,要处理引起该告警的进程代码问题,或者通过纵向扩容、横向扩容解决问题。
» 内存利用率告警:内存在极端情况下OOM会引起OS的reboot。如果内存不是随时间线性增长,可以考虑横向扩容、纵向扩容。华为云部分服务的内存随时间线性增长,并且无法短期内解决,可以分时分批逐个重启进程释放内存,保护OS不重启。在集群模式下,可以做到不影响业务,并且做到自动化处理。
» 磁盘利用率、网络IO超限告警:分析告警频率、业务行为、故障影响等因素。如引起业务异常,需要考虑扩容网络带宽、更换高IO磁盘、针对单租户/IP/实例进行Qos限流等措施。如业务无影响,并且无法扩容网络带宽及换盘,可以考虑做告警闪断规则解决尖峰问题。
第六式:从告警处理人的角度分析,哪些告警可以被优化
SRE专家需要定期分析Oncall团队的工作量及告警工单回填情况,结合告警优化的三招六式,使用项目管理工具,结合质量管理理念,做好团队告警优化工作。
如果有以下几类情况,告警是可以优化的:
» 平均每天每个oncall处理告警超过10单;
» 查看告警的维护经验不存在;
» 查看告警回填信息,该告警没有经过Oncall智力分析
(例如已知问题修复中、告警自动恢复、历史告警自动清除等);
» 告警不是自己服务的问题,无法处理;
» 告警操作是重复机械的;
» 没有用户报障,并且判断告警对业务没有影响;
» 已经有黑盒拨测紧急告警替代,告警意图重复;
» 告警无法处理,找最牛的技术专家,SRE和产品开发都无法处理该告警。
总结
SRE工程师的重要工作之一是通过构建智能运维平台,结合专家经验,对告警实现精准降维打击,减少99%的无效告警、手工重复工作。在海量告警的场景下,告警处理的极简智能不仅可以提升SRE人均运维效率,更可以提升工作幸福感。
参考文献:《SRE:Google运维解密》[美] Bet syBeyer(贝特西•拜尔),Chris Jones,Jennifer Petoff,NiallMurphy等著,孙宇聪译
拓展阅读:华为云SRE确定性运维专刊(第二期)
- 点赞
- 收藏
- 关注作者
评论(0)