【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

我们不生产报警,我们只是报警的搬运工

  • 2019-09-10
  • 本文字数:2754 字

    阅读完需:约 9 分钟

我们不生产报警,我们只是报警的搬运工

百度云的 Noah 监控系统(Argus)是保障百度内外服务高可用的基石。它具有诸如机器监控、实例监控、HTTP 监控、域名监控、日志监控、自定义监控等多种监控手段,具备“海陆空”全方位的监控能力,让服务异常无处遁形。如果你看过本公众号之前的系列文章,相信你会觉得我所言非虚。然而如此强大的监控系统所产生的“辣么多”报警如果不能及时精准地送达给运维人员,那么一切都还只是个传说。今天我们就聊聊报警如何送达的问题,注意,我们今天不谈报警,我们只谈报警的搬运工——百度云 Noah 通告平台!

一个都不能少

报警不同于普通的通知,它反映的是线上服务即将或正在遭受损失,如果我们把核心报警搞丢了,造成线上故障得不到及时解决,这个责任是巨大的。由于报警系统天然就这样要求高可靠性,因此我们奉行“at-least-once”的投递原则,确保报警至少有一次能成功抵达用户,做到“该报的报警一个都不能少”。而为了实现这个目标我们经历过不少坑:

机房网络连通性问题

我们发送报警要依赖四个底层发送网关(电话网关、短信网关、IM 网关、邮件网关)来向用户发送消息,如下图所示。由于公司网络环境的原因,这些网关部署在某些特定机房,和上游的监控系统部署在不同机房中,这样机房间的网络拥塞或抖动将直接影响报警发送。解决这种问题,可以将底层发送网关主备部署到不同的机房,由上游系统重试解决。也可以考虑建设额外的网络路由通路,例如机房 A 到 B 不通时,绕经机房 C “曲线救国”。具体选择何种策略,要依据不同的网络现状而定。


限流

资源永远是有限的。对我们来说底层网关的发送能力是瓶颈所在,尤其是电话网关,线路资源非常宝贵,有明确的路数限制(例如 100 路)。这样当某业务的报警量很大时,它的报警将用光有限的发送资源,将导致其他业务的重要报警发送延迟甚至失败。因此,需要对不同业务的报警量进行限流,避免单业务报警量过大影响其他业务。

报警追查

监控系统中关于如何报警有多种配置,例如报警最大次数、报警允许等待时长、报警屏蔽等,这些配置都会影响报警发送行为。经常有用户反馈报警不符合预期,例如“该收的报警没有收到,不该收的报警却收到了”等这种咨询问题,其实往往都是由于报警配置导致的,并非系统功能不正常,因此我们面临很多报警追查的需求。为此,我们将报警从产生到最终发送整个生命周期中的处理历史都记录下来,让用户像查询快递物流信息一样去追查报警处理历史。我的工作是不是真的很像快递搬运工(偷笑.jpg)!

若报警只如初见

随着业务的发展,我们发现报警量越来越大。通告平台每天都面临百万级的报警量,而这些报警中却有大量相似、重复的冗余报警。导致核心报警淹没在大量冗余报警中,极易造成报警遗漏。如果遇到骨干网拥塞或数据中心故障,那报警量就需要再加几个数量级,这就是传说中的报警风暴,风暴期间运维人员的手机、邮箱迅速会“爆”掉,据说以前有人根据报警短信的响铃频率来判断故障是否恢复,不管这是真事还是笑谈,他的囧境可见一斑。



因此,报警收敛成为了监控报警领域面临的一个共同命题。目前,业界一般的策略是分析报警内容,按照相同关键字进行报警合并。这种策略往往效果很差,因为事实上很多关联报警的内容本身并不包含相同关键字。针对这一问题我们逐渐演化出两类策略:


1.分维度报警合并策略,即按照报警维度属性(机房、机器、实例、服务等)合并。


2.基于关联挖掘的合并策略,即采用离线数据挖掘或机器学习的方式,从历史报警中挖掘出具有关联关系的监控策略,然后将相关联监控策略下的报警进行合并。


经过以上的合并策略后,我们的报警量减少了九成以上,有效地减少了冗余报警对运维人员的干扰。对报警合并算法感兴趣的朋友可以参考我们的之前的专题文章《我在百度对抗报警风暴》详细了解呦!

优雅的外表

经过合并后的多个报警,如何友好展示是另一个随之而来的问题。如果把原始报警内容堆叠到一起展示的话,用户将很难理解。毫无疑问,需要对这些原始报警的内容进行抽象概括以友好显示。我们将这一过程称之为“报警渲染”。举个例子,在一个服务集群下配置监控策略 Rule_A,该策略下在一个短期时间窗口内共有 110 条报警, 如图所示:



经过报警合并,最终渲染为一条报警,展示如下:



从最终的报警内容中,运维人员可以快速了解报警的严重程度、触发报警的监控策略、影响范围、报警时间等信息。我们针对不同的合并策略分别有不同的渲染模版,目的就是让运维人员能快速准确地获取到报警信息。另外,对于电话报警,渲染逻辑要更加复杂些,因为报警是以语音的形式触达用户的,受 TTS 技术所限,很难把形如“pr-nginx_xxx_pv_rule”的策略名,通过电话语音播报给用户,即使播放出英文读音,也会让人莫名其妙,因此我们定义了若干简化的语音模板,只播报核心概要内容,同时提醒用户关注短信、邮件等其他渠道获取报警详情。

7*24 值班也能睡个安稳觉

刚刚我们聊了报警风暴问题,它往往是由机房级故障或者网络故障触发大量的冗余报警导致的。而实际上我们观察到还有一个问题同样能带来报警冗余——那就是报警接收人配置过多。很多业务线将多个运维成员都配置到报警接收人里,而实际上运维人员是轮流值班的,非值班人员完全没有必要接收这些报警,这也造成了资源浪费。因此,我们集成了值班功能,支持设置值班周期、交接班时间、值班提醒,多种值班角色,每天动态地将报警发送给值班人,这减少了一大批冗余报警。



另外,为了确保核心报警能得到及时响应并有效解决,我们引入了“报警升级”,即一个报警如果没有在限定时间内得到处理的话,那么该报警将自动升级到更高一级的接收人那里。看个示例,如下图:



报警发送给值班人后,如果该值班人在 2 分钟内没有认领或者在 10 分钟之内没有处理完成,则自动把该报警发送下一级接收人,如图中的 yunxiaolin, yunxiaobo,并直接发送电话报警;如果他们在 10 分钟之内没有认领或者 20 分钟之内没有处理完成该报警,则继续升级到下一级接收人,如图中的 yunxiaoyu。值班人收到报警后要回复正确的指令来“认领”或“完成”该报警,我们借此来判断该报警是否继续升级。假如你认为报警足够重要的话,你可以设置多级升级,甚至到“厂长”!(偷笑.jpg)

总结

今天我们一起聊了百度云 Noah 通告平台遇到过的沟沟坎坎,有如何发报警的基础问题,有报警风暴时报警压缩、报警渲染的难点问题,也有我们在 on-call 轮值和报警升级场景下的思考。作为报警的“搬运工”,我们始终相信“简单”的事也可以做得不同!希望我们的努力能让运维兄弟们过得更轻松一点,幸福一点。


作者介绍:


芃熙,百度云高级研发工程师,负责百度云 Noah 监控产品报警系统的设计和研发,在大规模分布式系统、监控、运维 on-call 方面具有广泛的实践经验。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/vSblkaim9Fq_N7rO5TsIAA


2019-09-10 16:001113

评论

发布
暂无评论
发现更多内容

玩转KubeEdge保姆级攻略

乌龟哥哥

8月月更

职场人的未来,GO!咱们上云办公

创意时空

牵手华为云,云时通SRM助力企业采购数字化升级!

创意时空

【CSS】什么是外边距的重叠?常见的有哪几种重叠情况?

翼同学

CSS 前端 编程语言 8月月更

乘云远航|共赢新征程,打造数字化供应链竞争力!

创意时空

加速拥抱数字化,云时通打造全新数字中台!

创意时空

【数据结构实践】手把手带你快速实现自定义二叉树

迷彩

数据结构 算法 二叉树 二叉树遍历 8月月更

[JS入门到进阶] 手写解析uin8数组的工具:解析二进制字节,太快太方便了!

HullQin

CSS JavaScript html 前端 8月月更

「35分钟」开发刷题功能

小鑫同学

前端 H5 数据分析、 分页查询 开发.

【JVM】HotspotJVM对象的分配策略,栈上分配与TLAB

小明Java问道之路

8月月更

浅谈JS发布订阅模式

海底烧烤店ai

JavaScript 前端 发布订阅模式 8月月更

弹性云端新算力,驱动沉浸新交互 |2022阿里云金融创新峰会

阿里云弹性计算

计算巢 云盒 倚天实例 专属Region

zookeeper的特点和应用场景

浅羽技术

zookeeper 分布式 观察者模式 注册中心 8月月更

【React】使用Next.js构建并部署个人博客

海底烧烤店ai

nuxt 博客开发 博客搭建 react rout 8月月更

【CSS 盒子模型(上)】:width、height、overflow、border

翼同学

CSS html 前端 8月月更

数字藏品app开发:数字藏品发行制作的关键

开源直播系统源码

NFT 数字藏品 数字藏品开发 数字藏品系统 数字藏品软件

【JVM】HotspotJVM中的对象及引用

小明Java问道之路

JVM 内存 引用 对象 8月月更

【JVM】HotspotJVM分代回收机制

小明Java问道之路

8月月更

亚马逊云科技与TalkingData携手助力美妆巨头数字化营销闭环安全合规地提效

Lily

【CSS】怎么理解层叠性、继承性和优先性?选择器的权重如何叠加?

翼同学

CSS html 前端 编程语言 8月月更

【CSS 盒子模型(下)】:padding 和 margin

翼同学

CSS html 前端 8月月更

【CSS·圆角边框】有关border-radius属性的记录以及实现原理

翼同学

CSS html 前端 8月月更

每日一R「20」网络编程(二)

Samson

学习笔记 8月月更 ​Rust

【实践】手把手带你实现JWT登录鉴权

迷彩

分布式 微服务 前后端分离 JWT 8月月更

【CSS关键字】:inherit、initial、unset分别有哪些作用?

翼同学

CSS html 前端 8月月更 学习分享

React Spring实战之API以及animated 组件的运用

恒山其若陋兮

8月月更

《数字经济全景白皮书》银行业RPA应用专题分析 发布

易观分析

RPA 金融 银行

Docker杀掉了容器?问题分析与解决过程全面复盘

程序员欣宸

Docker 8月月更

持久,redis 持久化有哪几种方式,怎么选?

知识浅谈

redis持久化 8月月更

非关系型数据库Redis核心内容

浅羽技术

数据库 redis redis持久化 Memcache 8月月更

zookeeper的选主过程

浅羽技术

zookeeper 分布式 ZooKeeper原理 8月月更

我们不生产报警,我们只是报警的搬运工_文化 & 方法_芃熙_InfoQ精选文章