告警能力中台设计与实践(三)——告警通知

一、告警消息与告警通知

1、告警消息

正如笔者在最开始所写的那样,第三方服务通过调用能力中台的OpenAPI实现告警发起,并且每一次的告警请求都会创建、归档为一条告警消息(AlarmMsg)

这样的消息是无状态的,并且对应的消息会外键关联到对应的告警原子事件(AlarmEvent)

2、告警通知

当告警请求送达并处理后,如果满足告警实际发送条件(例如第一次或不在收敛周期内),此时中台会根据对应的告警策略执行告警通知动作,并根据通知类型的不同,生成

这样的通知同样是无状态的,并且会外键关联到对应的告警消息(AlarmMsg)

3、基本关联关系

  • 一次告警请求会生成一条AlarmMsg,其外键关联到AlarmEvent,但未必会生成AlarmRecord
  • 如果告警发送动作执行,可能会因为策略存在多个告警发送方法,生成多条AlarmRecord
  • AlarmRecord外键关联到AlarmMsg中;
    在这里插入图片描述

二、告警通知方法

1、发送IM消息

(1)基本逻辑
对于企业而言,会使用工作IM软件来进行工作内容的沟通。这类IM软件大部分都会提供OpenAPI,以实现类似AI聊天机器人等功能。

因此,平台通过调用此类OpenAPI,实现了告警信息及时推送到相应的IM群组中。

(2)群组分层分级
对于服务的告警而言,本身就是有等级的,不同的等级划分关注度自然也是不同,这点在告警IM消息的发送上也是一样。

一般来说,对于特别紧急、生死攸关的问题,都会直接拉起Warroom群,这类告警肯定需要第一时间响应。
而很多提示、轻微的告警如果也发送到这样的Warroom群,肯定会引起不必要的紧张。

基于上述需求,笔者按照告警的阶段、等级,提供了灵活的群组配置方法:

  • 根据环境阶段,笔者分成了ALPHA、BETA、GAMMA、PROD;
  • 根据严重等级,笔者分成了提示、轻微、严重、致命;

综上,笔者一共提供了十六个配置的选择,服务可批量配置、也可以单个自主调节群号。

2、提工单

(1)基本逻辑
工单也是企业对于问题处理的必要手段,可以规范的进行提交、接受、处理和闭环。

该部分总体逻辑比较简单直接:

  • 调用工单平台提供的OpenAPI生成对应工单;
    • 工单的责任人笔者直接使用工单平台OnCall;
  • 定义定时任务、自动同步工单平台的对应工单状态;

3、打电话 / 发短信

(1)基本逻辑
打电话与发短信本质上都是通过电话号码实现的消息通知。通知内容会进行一定的自然语言处理,方便接收者能够快随了解问题所在。

具体打电话/发短息的方法也很简单,同样是使用了公司层级的电话通知服务所提供的OpenAPI。

(2)OnCall机制
对于应该通知给谁,这一点很重要,毕竟人也不可能是连轴转的,OnCall也是人,需要轮换。

因此,笔者提供了OnCall的配置机制,除了保底的SRE作为OnCall外,还会提供对应的班次、周期等,提供批量配置、导入导出等手段,方便快速配置电话短信接收人。

三、总体告警相关问题

1、告警请求高并发与性能问题

随着第三方告警请求接入数量越来越多,平台处理请求、发起告警的压力也会越来越多大,性能风险也越来越高。
针对这个问题,笔者主要提出了以下几个解决办法:

  • 确保告警接口访问可控
    • 告警OpenAPI仅支持通过网关授权的方式调用;
    • 不接受其他一切形式的调用请求;
  • 限流
    • 针对每个授权的APPID进行分钟、小时、天级限流;
    • 针对接口本身进行分钟、小时、天级限流;
    • 系统底层通过组件的方式监控基础指标、提供限流能力;
  • 三方调用原则约束
    • 公告三方服务避免过度频繁调用接口致使限流,导致重要告警未能发送出后果自负;
  • 异步执行
    • 所有告警请求均通过异步任务的方式分配到CeleryWorker执行,避免同步堆积;
  • 提升服务性能与监控水平
    • 提升整体集群性能与吞吐量;
      • 提高集群CPU与内存;
      • 提高RDS(数据库)参数;
      • 增加告警相关的Celery队列Worker数量;
    • 积极监控自身服务各项指标,利用运维平台自身告警能力进行监控;

2、高并发下的数据一致性问题

在上面的问题中,虽然笔者解决了高请求量性能问题,但异步任务带来的高并发又可能会带来数据的一致性问题。

例如极短时间内接受到两条相同告警,由于集群与异步带来的函数执行问题,最后极端情况下可能会生成两颗几乎一模一样的事件树。
针对这个问题,笔者的解决方法是:

  • 笔者使用Redis集群实现了分布式锁能力,对于有唯一性、可能存在一致性问题的部分提前加锁;

3、批量服务异常造成的Warroom消息轰炸问题

对于整个部门而言,会有专属的Warroom群组,生产环境的致命告警均会发送到该群中,方便各服务、SRE快速响应、定位问题。

一般情况下群组的消息数量是比较少的,但是当较大规模批量故障产生时,Warroom群会被海量的消息淹没。
针对这个问题,笔者提出两个措施:

  • 针对Warroom发送的消息有数量限制,同一个Region下一段时间内(15分钟)只能发送5条消息;
    • 超过5条后,Warroom群组通知操作会被取消;
  • 每10分钟会根据当前仍未恢复的生产致命告警事件,进行Warroom通报;
    • 一方面避免可能的致命告警消息遗漏;
    • 另一方面也让相关人员了解目前故障的处理进展;

由于本身这类致命告警会有其他通知手段(电话、短信、提单、服务群组),因此这样的收敛也不会让服务漏通知,仅仅为了提升公共Warroom群组的体验。

4、告警策略匹配问题

当一条告警请求来到中台时,会首先检查参数合法性:

  • 如果参数不合法,中台会直接拒绝请求,在返回值中告知不合法详情;
  • 如果参数合法,笔者会尝试匹配告警策略:
    • 如果匹配到,就直接使用该策略;
      • 本身策略的创建定义阶段就会有唯一性限制,因此也不会存在匹配多条策略的情况;
    • 如果没有匹配到,就直接使用兜底策略;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/393788.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python:变量与数据类型

目录 一、变量 1.1 强数据类型与弱数据类型 1.2 全局函数 1.3 变量的命名规范 二、数据类型 2.1 基本数据类型 2.2 复合数据类型(引用数据类型) 三、数据类型转换 一、变量 变量:顾名思义,变化的量。在python中代指运行时…

【Java面试】MongoDB

目录 1、mongodb是什么?2、mongodb特点什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?NoSQL数据库有哪些类型?启用备份故障恢复需要多久什么是master或primary什么是secondary或slave系列文章版…

【Redis篇】详解布隆过滤器(原理 | 操作 | 代码)

文章目录 🍔简述布隆过滤器🌺原理🛸存入过程🛸查询过程 🏳️‍🌈优缺点⭐优点⭐缺点 🌹代码实现(本地)🌹代码实现(分布式) &#x1f3…

Redis 集群(Cluster)

集群概念 Redis 的哨兵模式,提高了系统的可用性,但是正在用来存储数据的还是 master 和 slave 节点,所有的数据都需要存储在单个 master 和 salve 节点中。 如果数据量很大,接近超出了 master / slave 所在机器的物理内存&#…

HTTP请求报文与响应报文格式

HTTP请求报文与响应报文格式 HTTP请求报文与响应报文格式 请求报文包含四部分: a、请求行:包含请求方法、URI、HTTP版本信息b、请求首部字段c、请求内容实体d、空行 响应报文包含四部分: a、状态行:包含HTTP版本、状态码、状态码…

【从Python基础到深度学习】7. 使用scp命令实现主机间通讯

一、生成 SSH 密钥对 ssh-keygen 是一个用于生成 SSH 密钥对的命令行工具,用于身份验证和加密通信 ssh-keygen 二、将本地主机上的 SSH 公钥添加到远程主机 ssh-copy-id 命令用于将本地主机上的 SSH 公钥添加到远程主机上的 authorized_keys 文件中,…

《苍穹外卖》知识梳理P9-定时任务、来单提醒与用户催单

一.定时任务 实现定时任务可以使用spring家族中的sprinig-task; 1.1 spring-task spring-task是Spring框架的任务调度工具,可以按照约定的时间自动执行某个代码逻辑; 应用场景 信用卡每月归还贷款提醒,定时任务检查&#xff…

Jetpack Compose 第 2 课:布局

点击查看:Jetpack Compose 教程 点击查看:Composetutorial 代码 简介 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API,可以帮助您简化并加快 Android 界面开发。 在本教程中&a…

【springboot+vue项目(十四)】基于Oauth2的SSO单点登录(一)整体流程介绍

场景:现在有一个前后端分离的系统,前端框架使用vue-element-template,后端框架使用springbootspringSecurityJWTRedis(登录部分)现在需要接入到已经存在的第三方基于oauth2.0的非标准接口统一认证系统。 温馨提示&…

html表格标签(下):lable标签,select标签和textara标签

html表格标签(下):lable标签,select标签和textarea标签 lable标签 搭配 input 使用,点击 label 标签就能选中对应的单选/复选框, 能够提升用户体验。 for 属性: 指定当前 label 和哪个相同 id 的 input 标签对应 (此时点击才是有用的) 运行效果&#x…

php数组运算符 比较 isset、is_null、empty的用法和区别

php数组运算符 1. 数组运算符2. 判断两个数组是否相等3. isset、is_null、empty的用法和区别 1. 数组运算符 注意:只会保留第一个数组中的键值对,而忽略后面数组中相同键名的元素,如果想要合并两个数组并覆盖相同键名的元素,可以…

obsidian的Workbooks插件

学习目标: 学会使用obsidian 学习内容: obsidian咖啡豆教程 | Obsidian的Excel管理解密|Workbooks插件 直接在obsidian中插入表格编辑 但是在实际的使用过程中不好。虽然设置了自动保存,但是实际有时没有保存 读取外部excel文件进行修改 默…

【Jvm】性能调优(拓展)Jprofiler如何监控和解决死锁、内存泄露问题

文章目录 Jprofiler简介1.安装及IDEA集成Jprofiler2.如何监控并解决死锁3.如何监控及解决内存泄露(重点)4.总结5.后话 Jprofiler简介 Jprofilers是针对Java开发的性能分析工具(免费试用10天), 可以对Java程序的内存,CPU,线程,GC,锁等进行监控和分析, 1.安装及IDEA集成Jprofil…

VFH特征的使用(一)

一、SHOT特征描述符可视化 C #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d_omp.h> #include <pcl/registration/correspondence_estimation.h> #include <boo…

软件测试项目测试报告总结

测试计划概念&#xff1a;就在软件测试工作实施之前明确测试对象&#xff0c;并且通过资源、时间、风险、测试范围和预算等方面的综合分析和规划&#xff0c;保证有效的实施软件测试。 需求挖掘的6个方面&#xff1a; 1、输入方面 2、处理方面 3、结果输出方面 4、性能需求…

C语言学习day15:数组强化训练

题目一&#xff1a; 称体重&#xff1a;分别给10个值&#xff0c;来获得最大值 思路&#xff1a; 定义数组&#xff0c;给数组内赋10个值第一个下标的值与第二个下标的值进行比较定义max&#xff0c;将比较得来的较大的值赋值给max一直比较直到比较到最后一个下标&#xff0…

ubuntu22.04-磁盘管理-虚拟机动态扩容-系统monitor

文章目录 1.虚拟机2.ubuntu设置3.命令查看4.系统资源管理器1.虚拟机 关闭ubuntu22.04,然后修改虚拟机设置,如下图所示: 修改容量 2.ubuntu设置 搜索打开disks,如下图所示: 选择目标磁盘,选择调整大小到目标大小即可。

萝卜大杂烩 | 把微信接入ChatGPT,变成聊天机器人竟然这么简单!(一起来尝试吧~)

本文来源公众号“萝卜大杂烩”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;把微信接入ChatGPT&#xff0c;变成聊天机器人竟然这么简单&#xff01; 最近的 ChatGPT 又再次火热起来了&#xff0c;各种周边工具也是层出不穷&…

离谱!用ChatGPT进行审稿!

离谱&#xff01;用ChatGPT进行审稿&#xff01; 关注微信公众号: DeepGoAI 在这个信息爆炸的时代&#xff0c;AI已经跑到了学术会议的后台&#xff0c;偷偷摸摸地开始“帮忙”审稿了&#xff01;&#x1f916; 最近&#xff0c;一位教授的LinkedIn动态可谓是火了一把&#xf…

蜂蜜器实验-驱动代码测试

一. 简介 上一篇文章实现了蜂鸣器驱动代码&#xff0c;实现关闭蜂鸣器与打开功能。文章地址如下&#xff1a; 蜂鸣器驱动代码完善-CSDN博客 本文对所实现的蜂鸣器驱动代码进行测试。 二. 蜂鸣器驱动代码测试 1. 准备应用程序 这里应用程序还使用 前面实现所使用的Led应用…
最新文章