千万级实时并发计算设计

本文简单介绍一个系统监控AI异常检测实时告警计算的架构

数据归一化

由于数据采集工具多样性,自然导致数据格式的多样性,所以需要对数据格式进行统一。比如对数据库层面的监控、对应用层面的监控,主机的监控,网络的监控,每种监控采用的方式不一样,工具不一样,采集出来的数据格式也会不一样,作为告警引擎中心,需要对监控采集值的格式进行转换,统一格式。当采集端把数据传输过来的时候,先通过一个数据转换的应用(代理)把数据处理成统一的格式。又由于网络环境的不一,同时加上安全要求,还需要对不同的环境提供不同的接收方式,一种是通过接口的方式,通过Nginx进行负载均衡,当接入的数据量上来之后,能够很方便地对代理应用进行扩容,监控采集端把采集值通过调用接口的方式传过来即可。另一种是通过kafka的方式,利用kafka自身带有负载均衡的特点,所以数据量上来之后,也是能够很方便地对代理应用进行扩容。

数据中心

监控采集值经过归一化之后会存入数据中心,采集值作为时序数据,采用时序数据库influxDB来来存储实时数据,不同的业务指标,设置不同的保存时效,一般保存一天的。采用HBASE存储历史数据,不同的业务指标同样对应着不一样的保留策略,一般保存3个月的。利用es存储指标的标签信息,该数据类型一般更新较小。

检测算法

检测算法的选择需要结合监控指标来决策,不同的监控指标适用不同的算法,比如周期性和非周期指标,平稳性和急巨变化性指标(徒增突降短时间内频繁出现)。从时序数据常规的变化中找到异常点,达到检测目标,需要对每个指标的业务规则进行专家经验的总结,通过学习以前一段时间内的数据波动规律来判断当前点的好坏。对于周期性或者变化较为平稳的时序数据,可以去学习它的周期性、趋势变化、斜率变化、振幅变化、甚至包含是否发生了突变等等;对于非周期或者变化较大的数据,可以学习它的一个正常的动态波动范围。在时序数据的异常检测中表现效果不错的算法有神经网络LSTM、S-H-ESD、3-sigma、Arima、Isolation Forest等,结合统计学和现代深度学习的检测手段,能够达到90%的准确率。

3sigma算法比较适用于测算在无规律的上下波动数据中明显超出历史波动范围的异常点,这样的时序数据符合正态分布,在下图中的数据呈现一种无规律状态,可以通过3sigma进行异常点的判定,计算出均值mean和标准差std,然后计算其上下阈值:[mean - 3 * std, mean + 3 * std],不在该范围内的可简单地认定为异常点。

S-H-ESD比较适合用来处理振动范围大模糊周期特征的时间序列,将原始序列进行拆解,分为趋势、周期以及余项,拆解后的余项符合正态分布,所以即可通过残差的方式来进行异常点的判定。

IsolationForest适合用于非周期性时序数据的异常检测,建立合适的特征,也能够有不错的表现。

Arima算法能够将周期性实现数据映射到线性模型中,然后建立异常度,最后便可进行异常点的判定,虽设计简单,但效果甚好。自回归积分滑动平均模型Arima比较适用于周期性数据的检测,比如序列的突增或者掉零,或者出现小范围的波谷变动等。

离线模型计算

为不同的业务指标适配合适的检测算法之后,需要进行算法模型的计算、更新,模型的时效性也是根据业务指标来确定,不同的业务指标对模型参数更新频率要求也都不同,有的可能一天更新一次也能接受,有的可能需要一个小时半小时就得更新一次,甚至更短,但对于机器资源充分的情况下,一般都是跑完一批之后,即可进行一下轮模型的迭代,这样既能保证模型的快速更新,也能让机器资源得到充分的利用。训练模型使用的多少数据合适,对于应用、访问量、网络等监测,一般取从当前往前14天的数据用来计算最新的模型参数,当然不同的业务类型有着不一样的取法,需要结合具体业务具体考量,同时还要考虑同比环比等因素。

把需要进行模型更新计算的指标加入加入计算队列,用zookeeper分布式队列来实现计算任务的有序均发,模型计算好之后,放入Redis,Redis采用集群模式,并且进行主从备份。

在线异常检测

监测指标的采集值经过归一化之后,push到kafka,经过kafka的负载均发到在线异常计算消费组件,根据指标唯一性到Redis取出对应的模型,判定是否异常。

告警处理

实时在线检测计算判定出异常点之后,接下来需要进行一系列的处理,在处理中重要一点就是压缩,压缩能够起到减少对数据库的压力、能够除去毛刺的影响、能够减少对业务人员或者运维人员的不必要通知、提高准确性等作用。根据不同的业务指标类型,应用不同的压缩配置,比如六个连续采集周期内产生四个异常点才产生一条有效告警,经过处理后的异常点才会通知达到相应人员处。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值