AICon 深圳站 Keynote 嘉宾官宣!共探AI价值转化的实践路径 了解详情
写点什么

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

  • 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:001352

评论

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

《SREWorks 云原生数智运维工程实践》电子书重磅来袭!(免费下载)

阿里云大数据AI技术

大数据 运维 云原生 电子书 企业号十月PK榜

OpenHarmony Liteos_A内核之iperf3移植心得

OpenHarmony开发者

OpenHarmony

【Mybatis】Mybatis generator如何修改Mapper.java文件

石臻臻的杂货铺

mybatis 10月月更

一步步实现React-Hooks核心原理

helloworld1024fd

JavaScript

PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)

汀丶人工智能

NLP 大模型

pyside6 qml TableView列表 用QSortFilterProxyModel模糊查询

Mr_No爱学习

从零到一手写迷你版Vue

helloworld1024fd

JavaScript

再添神器!Paddle.js 发布 OCR SDK

百度Geek说

JavaScript paddle 企业号十月 PK 榜

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析06

桑榆

源码刨析 10月月更 C++

过等保是什么意思?能简单解释下吗?

行云管家

网络安全 等保 等级保护 过等保

一步步实现React-Hooks核心原理

helloworld1024fd

JavaScript

部署 SAP UI5 应用到 SAP BTP 时遇到的 fiori not found 错误消息

汪子熙

JavaScript 前端开发 Fiori SAP UI5 10月月更

虚拟蜜罐:从信息模拟到实现虚拟蜜罐技术

郑州埃文科技

Linux IP地址 蜜罐

探索智能化测试技术

华为云开发者联盟

软件 测试 开发 华为云 企业号十月 PK 榜

汽车报告丨分析了比亚迪宋全网口碑,我们得出这个结论

前嗅大数据

数据分析 数据采集 爬虫工具 汽车咨询 比亚迪宋

京东云TiDB SQL优化的最佳实践

京东科技开发者

数据库 索引 sql SQL优化 TiDB

十大 CI/CD 安全风险(五)

SEAL安全

DevOps CI/CD 软件供应链安全 日志记录

【LeetCode】 LRU 缓存机制Java题解

Albert

算法 LeetCode 10月月更

在一个公司死磕了5-10年的程序员,最后都哪里去了?

源字节1号

华为云从入门到实战 | 云容器服务

TiAmo

华为 华为云 云开发 10月月更

DTT第7期直播回顾 | 低代码应用构建流程和适用场景,与你想的一样吗?

华为云开发者联盟

云计算 低代码 华为云 企业号十月 PK 榜

【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?

汀丶人工智能

nlp 知识图谱

深入react源码看setState究竟做了什么?

flyzz177

React

HUAWEI AppGallery Connect全新升级,支持HarmonyOS生态全生命周期服务!

HarmonyOS开发者

HarmonyOS

KubeEdge SIG AI发布首个分布式协同AI Benchmark调研

华为云开发者联盟

人工智能 深度学习 云原生 华为云 企业号十月 PK 榜

大数据测试之大数据系统及特点

千锋IT教育

美团前端手写面试题总结

helloworld1024fd

JavaScript

五个堡垒机常见问题解答-行云管家

行云管家

网络安全 堡垒机 资产安全 IT资产安全

AiTrust下预训练和小样本学习在中文医疗信息处理挑战榜CBLUE表现

汀丶人工智能

nlp

颜值经济下,车企的必备武器

华为云开发者联盟

云计算 后端 SaaS 华为云 企业号十月 PK 榜

CEF | VS2017+Qt5.14.2+cef 实现基于CEF框架的客户端

YOLO.

qt 10月月更 C++

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