变更校验系统依据需要使用的业务场景提供各种业务规则;依据已提供的各种业务规则和阈值组成校验方案;依据升级范围或者配置变更范围生成具体的校验目标和校验时间段;基于规则计算引擎依据方案和目标判断是否要生成告警,如果符合规则条件,则发送告警给对应的接收人。架构图如附图下所示,
整个系统由5大模块组成:
规则模块:基于实际用到的业务场景,提供计算各种最小粒度的规则,比如带宽突增计算规则,并提供可配置该规则的相关参数,比如该规则计算的范围(哪些域名,主机组等),该规则计算的阈值(突增达到多少告警)等,实现规则通用于某一个业务场景,减少规则的数量
方案模块:一个方案是由多个规则组合起来,方案是多个规则集合,对应一个具体的场景,根据该场景需要从规则模块选择适合的规则组合起来,并根据该场景设置该规则的相关参数,比如场景为缓存服务器升级,该升级可能影响到带宽,如果带宽突增达到20%需要告警出来,那么选择带宽突增规则,并设置计算阈值为20%。方案提供了灵活的规则集合配置,并且是预先制定好的,可重复使用。
任务模块:一个任务是依赖于某个方案创建的,在这个方案基础上配置要校验的范围,要校验的时间,要发送告警的邮箱等。
数据采集模块:该模块是cdn监控自有的模块,会周期性的对cdn相关的指标进行采集,业务类的指标比如流量,带宽,状态码,请求数等,质量类的指标比如响应时间,首包时间,下载速率等等,采集上来的指标数据存储在Prometheus里面。(该模块属于cdn自有的,在系统中不详细进行介绍)
规则计算模块:该模块是针对每个任务所配置的规则,结合具体的采集数据,阈值,范围进行规则计算。
- 规则模块
该模块的配置如下图所示,
因为该模块是公用的,所有方案都可以选择所有的规则,因此,该模块由系统管理员统一配置。可以配置语法,参数,适用的范围类型,图表分析等内容。其中语法和参数确定了该规则的内容,每个规则只有一条语法,是规则引擎执行的核心,符合promql语法,参数是提供灵活设置的,在方案中可以设置具体值,使用的范围类型限制了该规则可以使用的场景,比如该规则可以使用在域名,主机组,资源组等范围。如图2所示的规则,提供了一条边缘带宽突降的计算规则,相关规则参数(统计维度,带宽门槛,统计周期,阈值)在方案中配置。
- 方案模块
方案模块的配置如下图所示,
该模块所有人都可以配置,一个方案可以配置满足某个业务场景,把跟这个业务场景相关的规则添加进来,方案是一系列规则的集合,并根据业务场景设置这些规则的相关参数,如下图所示,
是在方案中配置边缘带宽合并统计突降这条规则的具体参数,在该场景下,这条规则需要过滤掉带宽小于100M,每分钟执行一次计算,计算5分钟之前的带宽突降跟现在比较,带宽降低超过10%则要告警。不同的使用者可以配置属于自己的方案,这个方案有自己场景所需要的规则集合,并且设置这些规则的独立参数。
- 任务模块
任务模块的配置如下图所示,
该模块是在方案模块的基础上创建起来的,补充了方案缺少的执行范围,执行时间段,告警接收人等数据。每个任务是某个方案的具体实例。任务配置了具体的校验范围,比如某次变更是针对某个域名做了修改,那么校验范围可以选择该域名,或者某次升级是针对某个运营商,那么校验范围可以选择该运营商。执行时间段是在该时间范围内,规则引擎会周期性地去执行规则计算,如果规则执行结果满足配置的阈值,那么会发送告警通知给配置的告警接收人。
- 规则计算模块
规则计算引擎基于thanos-rule⼆次开发。集群化组成,每个rule node采⽤⼀致性哈希,独⽴计算分配任务,实现校验均衡。API⽅式提交的任务,Rule集群组件均可响应,并映射到数据库任务配置中。规则计算模块会把任务中所有的规则周期性执行输出结果,如果结果是需要告警的,那么会把告警推送到Prometheus中,任务模块会拉取Prometheus中对应的告警,发送给告警接收人。如果某个rule node停止上报心跳了超过一定的时间,已经存活的rule node会自动抢占该任务,然后继续执行。