一个可扩展的报警系统Quick-Alarm

简介: 日常的系统中,报警是不可缺少的一环,目前报警方式很多,最常见的有直接打日志,微信报警,短信报警,邮件报警等;而涉及到报警,一般不可避免的需要提前设置一些基本信息,如报警方式,报警频率,报警用户,开关等;另外一个常见的问题是一般采用的是单一的报警方式,比如不管什么类型的报警全部都用短信方式触达,然后就会发现手机时常处于被淹没的状态了,久而久之对报警短信就不会敏感了

背景



日常的系统中,报警是不可缺少的一环,目前报警方式很多,最常见的有直接打日志,微信报警,短信报警,邮件报警等;而涉及到报警,一般不可避免的需要提前设置一些基本信息,如报警方式,报警频率,报警用户,开关等;


另外一个常见的问题是一般采用的是单一的报警方式,比如不管什么类型的报警全部都用短信方式触达,然后就会发现手机时常处于被淹没的状态了,久而久之对报警短信就

不会敏感了


目标



因此我们准备设计一个通用的报警框架

  • 可以自由选择报警方式,
  • 支持用户自定义报警方式拓展
  • 支持动态的报警配置,
  • 支持用户自定义报警规则拓展
  • 支持报警方式自动切换规则设定
  • 支持报警方式自定义自动切换规则拓展


设计



整体来说,报警主要可以划分为三个步骤,如下:


image.png

  • 提交报警:对外部使用者提供的接口
  • 选择报警:根据报警相关信息,选择具体的报警执行单元
  • 执行报警:实现具体的报警逻辑


从任务划分上来看,比较清晰简单,但是每一块的内容又必须可以拓展,


  • 选择报警:
  • 报警规则的制定
  • 报警规则加载器  ConfLoader
  • 报警规则变更的触发器 ConfChangeTrigger
  • 报警规则解析器
  • ConfParse : 解析文本格式报警规则为业务对象
  • AlarmSelector :根据报警规则和报警类型,选择具体报警执行器 AlarmExecute


  • 执行报警:
  • 线程池执行(以防止影响主业务流程)
  • AlarmExecute的动态拓展(支持用户自定义的报警器实现)
  • 实际的报警逻辑


根据上面的拆解,在应用启动的时候,就有一些事情必须去做了


  1. ConfLoader的选择
  2. 报警规则加载
  3. AlarmExecute的加载(包括默认的+自定义实现的)


下图显示在应用启动时,报警规则解析的相关步骤

image.png


至于报警执行器的加载就比较简单了,如下图

image.png


因此,整个的工作流程如下图

image.png


任务拆解



通过前面的任务设计之后,对需要做的东西有了一个大概的脉络了,因此在正式操刀实现之前,下对整个架构进行任务拆解,看下可以具体的执行步骤可以怎么来


  • 最直接的就是设计报警执行器AlarmExecute
  • 定义基本接口
  • 制定自定义扩展规则
  • 接下来就是设计报警规则
  • 如何加载报警规则?
  • 报警规则具体的定义细则
  • 报警规则的解析:即根据报警类型来获取报警执行器
  • 报警规则动态更新支持
  • 报警线程池
  • 维护报警队列
  • 报警的计数与频率控制
  • 封装对外使用接口


所以,通过上面的分析可以看出,这个系统的结构还是蛮简单的,整个只需要四个部分就可以搞定,其中最主要的就是前面两个了,后面将分别说明


小结



做一个东西,当然是希望可以带来一些用处,或者能学习到什么东西,才不枉花费精力来折腾一下,那么我们这个报警系统,究竟有什么用,或者可以从中学习到什么东西呢?


用途:

  • 支持灵活可配的报警规则,以及具体报警业务的自定义拓展
  • 目标就是统一报警的使用姿势,也就是不管什么报警,都一个姿势,但是内部可以玩出各种花样,对使用者而言就方便简洁了


学习:

抛开特有的知识点,可以抽象一些公共可用的地方,大概就下面这两点了

  • 我们可以如何支持功能的动态可拓展
  • 线程池的使用



相关文章
|
机器学习/深度学习 运维 监控
阿里云 LOT 设备运维——监控报警介绍|学习笔记
快速学习阿里云 LOT 设备运维——监控报警介绍。
904 0
阿里云 LOT 设备运维——监控报警介绍|学习笔记
|
存储 运维 监控
跟误告警说再见,Smart Metrics 帮你用算法配告警
本文从两类常见的无效告警规则入手,分析有效告警配置难,误告警泛滥的原因,介绍 Smart Metrics 是如何帮助用户解决告警难配的问题的,并介绍一些最佳实践。
跟误告警说再见,Smart Metrics 帮你用算法配告警
|
SQL 存储 数据采集
用户指南—监控与告警—计算资源监控
为方便您掌握实例的运行状态,PolarDB-X提供监控查询功能。您可以在控制台上查看计算资源监控和存储资源监控信息。其中计算资源监控展示了实例计算层资源的性能数据,本文将介绍如何查看计算资源监控信息。
121 0
用户指南—监控与告警—计算资源监控
|
SQL 存储 运维
【新功能发布】Hologres Worker级别监控指标透出,提升自诊断能力
本文将会介绍Hologres在2022年7月新发布的监控指标,以及对应的排查手段。
1106 0
【新功能发布】Hologres Worker级别监控指标透出,提升自诊断能力
3 月应用实时监控服务 ARMS 产品功能更新
3 月应用实时监控服务 ARMS 产品功能更新
3 月应用实时监控服务 ARMS 产品功能更新
|
运维 监控 安全
SLS告警响应升级——通知对接FC进行自动化操作
阿里云SLS告警响应升级,通知渠道新增了对函数计算的支持,从而可以在告警触发的时候进行一定的自动化响应操作,以便进行故障自愈,减轻手动运维压力,提高系统的可用性。
331 0
|
SQL 消息中间件 数据采集
Trace告警配置最佳实践
阿里云日志服务(SLS)提供了Log,Metric,Trace等三种数据快速接入的能力,同时也提供了丰富的分析功能和可定制化的Dashboard的能力,客户可以利用SLS快速的搭建可观测性平台,让用户更加关注于分析,降低用户接入各类数据的门槛。本文主要讲述应用接入SLS Trace服务后,针对各种场景化如何配置告警。
582 0
|
消息中间件 测试技术 API
阿里云微服务消息队列MQTT管控API本地测试Quick Start
微消息队列MQTT版是阿里云推出的一款面向移动互联网以及物联网领域的轻量级消息中间件。如果说传统的消息队列中间件一般应用于微服务之间,那么适用于物联网的微消息队列MQTT版则实现了端与云之间的消息传递和真正意义上的万物互联。目前产品提供常用的云端API的功能调用,本文通过接口调用QuerySessionByClientId根据Client ID查询指定设备的连接信息。
470 0
阿里云微服务消息队列MQTT管控API本地测试Quick Start
|
监控 数据可视化 测试技术
SLS新版告警入门——告警管理编排交互
在之前的告警策略和行动策略相关的文章中,我们可以看到,为了配置各种策略逻辑,使用的都是类似的交互方式,即基于可视化图的表单。本文主要来介绍一下策略图相关的交互和配置。
467 0
SLS新版告警入门——告警管理编排交互
|
存储 弹性计算 运维
SLS新版告警入门-监控主机CPU异常
随着用户量的增加,后台服务经常需要部署在多台服务器或者集群中来提高性能和增强可用性,在提供服务的过程中,由于程序bug或者业务徒增导致CPU飙高,如果CPU持续飙高,可能会导致机器down机,对服务造成不可用。 本文以此为背景,在主机监控时序数据中,配置SLS告警,来监控主机CPU飙高,并且在CPU飙高时发出告警到钉钉机器人。
556 0