上海浦东发展银行 徐卫
监控告警系统作为数据中心运维之眼,良好的监控告警系统帮助运维人员快速发现定位问题,提高故障处理速度,减轻运维工作的压力。一般场景下,为了实现告警收敛,运维人员在监控告警系统服务端预埋静态规则,维护海量的规则探针。在复杂场景下,如果继续沿用这种方法,由于系统缺少先决知识库,收敛效果会折扣。为了解决该问题,本文研究发现受控节点机器上的agent-Plugins 插件有可编辑、可弹性扩展的特点,根据场景需要下发特定场景的业务处理脚本,从而在场景执行中动态产生收敛规则。兼顾高灵活性、容易掌控、可重用性的需求,引入Java 成熟的规则引擎Drools 实现海量收敛规则快速匹配,实现告警的快速收敛的能力。在笔者维护的生产系统中引入该算法,并付诸技术实现。全文跟踪浦发银行数据中心2021 年1 ~12 月生产脱敏告警数据,并从多评价维度检验算法投入前后的告警收敛效果。从实验数据看,新算法适用浦发银行数据中心的多种运维应用场景,有着广泛的应用前景。
随着移动互联的发展,IT 网络基础设施维护和管理成本的与日俱增,面对随时可能发生的各类商业应用活动、网络服务故障,运维监控系统已逐渐覆盖各大金融机构和互联网企业。爆发式增长的应用、网络服务致使运维监控系统的告警数量增长迅速,这给移动金融产品的可用性、可靠性和用户体验带来巨大挑战。运维监控系统已成为产品可用性和良好用户体验的有力保证,并对留存用户、保证用户权益、保证企业收益和维护企业品牌有着重要的意义。
告警收敛是运维监控领域的重要研究方向,一个监控指标的变化可能触发告警的蝴蝶效应,引发重大告警风暴,给运维管理员带来严重灾难。如何实现告警收敛,已经成为摆在金融科技运维从业人员面前较紧迫的研究任务。
为了实现告警收敛,同业的监控系统一般采取在监控系统的服务端预埋规则,包括组合业务风暴窗口,告警指标,告警连续峰值次数判断等维度,减少告警量,从而实现告警收敛。
一般场景下,在监控系统的服务端预埋配置规则,简单直观,容易管理。但是,近年来随着移动互联网崛起,在商户营销、手机权益、红包秒杀等复杂业务场景下,对于运维管理员提出更高的要求,需要应用运维管理员配置“大而重”的规则,有时甚至二次开发,管理员工作重心太多放到预埋规则的配置和个性化维护上。笔者分析,预埋规则面临很多技术挑如下,为了简化表述,这里算法名取名“老算法”。
(1)预埋规则难以找到平衡点。预埋规则粒度较粗可能带来大量的冗余告警,粒度较细可能造成运维人员维护量较大。
(2)预埋规则对于后续的告警根因分析中数据不完整。完成一笔业务可能需要横跨多个应用系统,应用链路上每个IT 单元出现问题都会引发业务故障,强制放弃链路中的某个IT 单元数据可能造成最终分析来源数据不完整。
(3)预埋规则内生冲突。规则之间存在数据重叠度和业务冲突,无法通过技术校验,最终发生无需收敛的反而收敛,需要收敛的未收敛的情况。
(4)预埋规则维护工作量较大。随着数字业务扩展,服务器数量迅速增长,对于服务器的各类预埋规则的维护将同步增长。运维人员投入、硬件内存开销都不小。
为了帮助运维管理员降低配置维护工作量,本文经过研究发现,挖掘受控节点机器上的agent-Plugins 插件有可编辑、可弹性扩展的特点,当受控节点有重大变更行为的时候(比如数据库HA 切换,发起重大跑批任务),agent-Plugins 将事件组装成标准报文,以接口调用的方式发送消息监控系统的服务端,从而确保服务端感知变化,形成动态规则从而实现后续告警的进一步收敛。这种策略将原先集中于监控系统服务端静态规则配置并匹配的任务进行分而治之,由分布式的受控节点侧的agent-Plugins 并行完成,对传统的预埋配置规则的方案有较大程度改善,为了简化表述,这里算法名取名“新算法”,主要优势如下。
(1)利用受控节点主动上报自身状态,在复杂场景下提高了收敛精准率;(2)利用受控节点间关联拓扑关系提高告警收敛效率,降低不必要的告警消息;(3)利用报文接口通用的技术优势,满足受控节点上报自身状态接口开发符合语言门槛多样性的需求;(4)利用受控节点上报自身状态的数据大集中优势,经过机器学习,可一定程度上丰富服务端预埋规则库,提高后续告警收敛的精准率。
对新、老算法进行理论上的比较,包括收敛规则匹配时间复杂度、规则维护时间复杂度、复杂场景支持。假设监控节点数量为n,老算法采用规则逐笔匹配,因此匹配时间复杂度为O(n), 新算法的规则引擎底层算法是平衡二叉排序树算法,因此n 个节点的二叉排序树的高度为log(n+1),匹配时间复杂度为O(logn)。注:从时间复杂度表达式进行比较,无具体计量单位。详细如表1 所示。
表1 两种算法的指标比较分析表Tab.1 Comparison and analysis of indicators of the two algorithms
本文算法提到的规则引擎采用Java 版的开源规则引擎,适用Rete 算法对所写的规则求值。为了详细阐述算法框架流程,这里用流程图方式表述(如图1 所示)。
图1 收敛算法规则引擎推理架构图Fig.1 Reasoning architecture of convergence algorithm rule engine
规则引擎推理步骤如下:
(1)管理员通过平台向受控节点下发agent-Plugins插件,专用于特定业务场景;(2)受控节点特定业务场景开始时,向监控系统(服务端)发送通知报文,用于表明节点状态或事件;(3)监控系统(服务端)调用规则引擎的External Component 组件,重新建告警收敛规则;(4)规则引擎更新规则库(Rules Repository);(5)监控系统(服务端)产生告警,通过独立通道上报告警消息;(6)将初始数据(Fact)输入到工作内存模块(Working Memory);(7)适用Pattern Matcher 匹配器将规则库(Rules Repository)的规则(Rule)和数据(Fact)比较;(8)如果执行规则存在冲突(Conflict),同时激活了多个规则,将冲突的规则放入冲突集合;(9)解决冲突,将激活的规则有序存入Agenda;(10)执行Agenda 的规则;(11)重复(7)~(10),直到执行完毕Agenda 的所有规则。
本文以浦发数据中心原始脱敏告警数据为研究对象,数据时间分布为2021 年1 ~6 月,7 ~12 月(注:手工剔除新增业务、投产服务器带来的告警数),并从日均告警量(如图2 所示,横坐标表示月份,其中7 ~12 月份采用新算法,1 ~6 月份采用老算法,纵坐标标识日均告警笔数),日均电话通知告警量(如图3 所示,横坐标表示月份,其中7 ~12 月份采用新算法,1 ~6 月份采用老算法,纵坐标标识日均通知电话通数)两个统计维度进行比对,以下是实验数据柱状图。
图2 单位月内日均告警量(以“万笔”计,保留2 位小数)Fig.2 Average daily alarm volume per unit month (calculated by "10000 strokes", with 2 decimal places reserved)
图3 单位月内日均电话通知量(以“通”计)Fig.3 Average daily telephone notification volume per unit month (calculated by "communication")
为了进行数据分析,对周期内(半年)日均电话通知量平均值、日均告警量平均值演算过程如表2 所示。
表2 数据计算过程表Tab.2 Data calculation process
从计算统计结果看,考虑到统计学中的可接受误差5%,得到单位月内日均告警量下降15%~20%,单位月内日均电话量下降30%~35%。
从7 ~12 月数据看,由于11/12 月接近年底,商家营销活动越来越多,发卡银行的持卡人消费行为升级,恰逢双十一保障、年终大促、年终跨年结算等机构侧的重要工作安排,对于带来的告警如果继续沿用老算法对于一线运维管理员将是“海陆空”全方位轰炸,引入新算法后在监控系统服务侧动态产生自定义抑制规则,实现告警收敛,运维管理员收到的实时电话告警量下降明显。
由于agent-Plugins 有着强大的可编辑能力,自定义插件可以横向扩展,弹性较强,且对于插件的开发语言选择上并没有过多硬性要求,推荐使用Python/Shell/C/Go/Java,且引入了成熟的规则引擎框架Drools,保障了处理性能,因此上述应用算法有着广阔的应用前景,给一线运维管理员带来福音。
随着信息化高速发展,国内外各大互联网机构均自主研发部署高度集成化、先进性、安全性、开放性、可扩展性、高效性和高可靠的运维监控系统,近年来国内传统金融企业启动数字化转型,并开始大规模的“新基建”建设,当网络、设备、服务发生异常时,运维监控系统势必会产生大量的告警信息,增加了网络运维的压力,降低了运维工作者的幸福感,因此告警收敛包括后续对告警信息的分析、合并和丢弃在实际运维工作中显得尤为关键。
目前告警收敛的方法具有多维度、多方案的特点,任何一种单一的告警收敛方法都具有自身的局限性,实际运维场景需要兼顾算法效率、系统维护复杂度和实际情形,告警收敛领域具有很大的研究潜力。
告警收敛是不断丰富发展的,本文提出的基于agent-Plugins 可编辑能力,并引入了规则引擎实现告警收敛就是一种有益的探索,目前应用于企业内的年终结算场景,日常数据库HA 切换,双11 红包活动峰值场景,已经显示出一定的效果。后续研发团队将探索引入大数据等优秀的智能算法,进一步实现场景告警收敛,提高一线运维工作者的获得感,实现运维工作的人性化目标,为金融企业的数字化转型做贡献。
引用
[1] 邢村.论监控中心典型的异常告警及事故处理方法[J].中国科技纵横,2016(19):169-170.
[2] 马小波,柴宗弘.一种告警监控系统及方法:中国,CN20151076 1866.9[P].2016-03-23.
[3] 国悦婷.运维监控系统告警收敛的算法研究与应用[D].武汉:华中科技大学,2017.
[4] 钱雁.IDC网络监控系统告警有效性提升研究[J].电信技术, 2016(1):51-54.
[5] 张骁睿,刘晓茹.一种应用于通信行业实现告警同步和清除机制的方法:中国,CN201911050574.9[P].2020-05-12..