写点什么

我在百度对抗报警风暴(二)

  • 2019-09-30
  • 本文字数:2678 字

    阅读完需:约 9 分钟

我在百度对抗报警风暴(二)

在本系列上一篇文章《我在百度对抗报警风暴(一)》中,百度高级研发工程师运小博介绍了报警风暴的成因及简单的报警合并策略。本篇文章中,运小博将介绍关联策略的报警合并策略、基于报警数据挖掘的机房故障分析、报警关注度分析、值班与逐级通告机制和报警回调等技术。

报警合并策略

关联策略的报警合并

某个模块的出现问题的时候,往往会引发上游或者下游模块也一并报警。假设模块 A 调用了模块 B,当模块 B 出现问题的时候,很显然模块 A 和模块 B 都会产生报警。为了解决这个问题,我们尝试从历史报警数据中挖掘关联的报警策略列表,然后就可以使用《我在百度对抗报警风暴(一)》提到的报警合并机制对跨模块的相关报警进行合并。


历史上每次 B 模块出现同样的问题的时候都会导致 A 模块有类似的报警,换言之,若历史上 A 模块的策略 rule1 和 B 模块的 rule2 经常同时报警,那么 A 模块的策略 rule1 和 B 模块的策略 rule2 就可能存在关联。因此我们可以挖掘历史报警数据中的关联关系,即关联的报警策略列表。



如上图横轴为时间轴,每一个位置都产生报警的时间,比如最开始的报警是 A 模块的 rule1,然后是 B 模块的 rule2 等等。然后使用挖掘窗口(上图中的大括号为一个挖掘窗口)进行滑动,把位于同一个窗口内的报警归结为一个事务。


接下来我们就可以使用常见关联分析算法挖掘频繁项集(历史上经常在一起出现的报警策略)和关联规则(报警策略之间存在很强的关系)了。我们先要回答一个问题,怎么样定义报警策略的频繁出现?或者说,两个报警策略是否存在关联?


一个项集的支持度计数被定义为该项集出现的次数,这里没有用传统的支持度是因为历史报警数据产生的数据往往较多,而实际项集数据出现的比较稀疏,意味着支持度的分母巨大,分子却很小。


置信度是针对一条关联规则 X:rulem->Y:rulen 而言定义的,代表了 X:rulem 导致 Y:rulen 发生的可能的概率。


支持度计数 S_count(X:rulem)=以 X:rulem 开头的 transaction 的数量


支持度计数 S_count(X:rulem->Y:rulen)=以 X:rulem 开头,并且包含 Y:rulen 的 transaction 的数量


置信度 c(X→Y)计算公式如下:



支持度和置信度超过一定数值即为所需的关联规则。按照这样的规则,在等待发送队列中当某个报警发送时在报警策略关联表中查找等待队列中是否包含关联策略,如果包含就合并成一条报警信息发送。

机房故障期间的报警合并

机房故障(网络中断、机房断电等)会导致部署在该机房的模块异常,引发大规模的报警风暴。报警风暴不但会对报警的处理造成打扰,而且可能会增大报警系统压力,严重时可能导致后续报警延迟送达。因此,如果能快速准确地感知机房故障,并将相关报警进行合并,将会有利于运维人员快速捕捉故障根因,还能减少报警系统压力。


一个机房往往部署有多个业务系统,而一个业务系统也会把自己的模块部署在多个机房中以提高可用性。当某个业务的运维工程师发现单个机房的多个模块出现故障,就会怀疑是机房故障,但很难直接确认。所以,他们一般都会找其它业务的运维工程师寻求确认。如果多个业务都在这个机房出现问题,就基本能够确定是机房的基础设施出了故障。


通常,我们会想使用每个机房的报警数量来表征这个机房的状态,但百度部分产品的体量庞大,当这些业务故障的时候,会导致报警量突升,从而影响对机房的判断,因此最终我们选择了异常策略比例 RuleRatio 和异常业务比例 ProductRatio 两个特征。


为了寻找如何用上面的两个特征确定是否有机房故障,我们抽取了历史一段时间各个机房的特征,并利用散点图来训练。如下图所示,横坐标是 RuleRatio,纵坐标是 ProductRatio,每个点代表某个时段的某个机房。图中红色为机房有故障的样本,蓝色为无故障的样本。



从上图看,线性分类器就能区分故障和非故障的样本。



对历史数据进行回溯,上图横轴是时间,纵轴是按上述指标计算的异常评分,每一条曲线代表了一个机房,几个异常点分别是某一次机房的故障。

报警关注度

报警关注度是指报警发送后有实际处理的比例,但系统运维一段时间后都会发现部分报警的关注度并非 100%,大多数情况下并非是值班工程师不尽责,而是部分报警策略随着系统的演化已经失效而又没有及时删除,因此需要我们有一种方法识别无效报警。

夜间关注度分析

我们观察了一条报警的处理过程。收到一条有效的短信报警后,值班工程师会登录运维系统(包括监控系统、预案系统等)对报警进行定位、处理,这些行为会体现在各种运维系统的访问日志中。通过收集这些日志,就可以对每条报警的处理情况进行分析:如果在收到报警后的一段时间内访问过运维系统,可以认为该报警得到了关注,反之就认为该报警没有得到关注。汇总一段时间后,就能够筛选出关注度较低的报警策略,即为无效报警策略。

报警值班与逐级通告机制

百度监控系统(Argus)报警通路帮助运维团队建立值班机制,支持配置值班表,并设定交接班时间、值班周期等,值班系统会按周期自动轮转,并以短信、邮件等形式在交接班前通知接班值班人。为了保证核心报警得到及时有效的处理,Argus 中还建立有逐级通告机制,支持配置多个通报升级时间和通报方式(电话、短信等)。报警发出后,值班人必需及时认领报警,超时未认领会按照配置升级并通告。下图就是一个值班和逐级通告配置的例子。


报警自愈机制

很多报警都有明确的处理预案,报警发生后,值班工程师登录机器或者中控机执行预案(脚本)就可以完成这类故障的处理。比如,清理磁盘这类操作,可能就是一个简单的删除日志和 tmp 目录的脚本。如果这类报警可以完全自动处理,无需人工干预,就能够大量节省人工成本,同时减少报警量。因此,Argus 报警系统提供了报警回调机制,在报警发生时可以回调预案处理脚本。


上面介绍的这类自愈场景比较简单,这类预案往往对于程序没有任何干扰,可以“无脑”执行预案脚本即可。对于更复杂的场景,值班工程师往往需要根据服务的整体情况来调整预案。例如当某个实例异常需要重启的时候,需要综合判断其他实例的状态才能确定是否以及何时可以重启该实例,如果无脑重启可能会给服务造成损失。这种场景的自愈操作可能是有损的,需要对服务整体情况有一个判断才可以执行预案,Argus 报警系统为此提供了另外一种回调机制。在发生报警时,报警系统会把相关的报警策略、实例的状态都统一发送给一个中枢决策服务,由中枢决策服务统一做出判断。


作者介绍:


运小博,百度高级研发工程师,从事有关运维数据分析相关的工作,负责异常检测系统和报警收敛等工作,重点关注时序数据分析、故障诊断等相关领域技术。


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


原文链接:


https://mp.weixin.qq.com/s/vODNelOyTwyciI-6sYBUtA


2019-09-30 08:002546

评论

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

那些你不知道的炫酷按钮交互效果

南城FE

CSS 前端 动画 交互设计 按钮

国民粮油品牌益海嘉里首个天猫超级品牌日交出完美答卷

Chrome操作指南——入门篇(七)console中的await和log

Augus

Chrome开发者工具 9月月更

OKR之剑·理念篇02: OKR布道之旅

vivo互联网技术

团队管理 OKR 目标管理

SPI机制是什么,懂了

知识浅谈

spi 9月月更

Chrome操作指南——入门篇(五)Snippets

Augus

Chrome开发者工具 9月月更

Flomesh 多租户 Ingress Controller

Flomesh

Service Mesh 服务网格

EasyNLP玩转文本摘要(新闻标题)生成

阿里云大数据AI技术

自然语言处理 深度学习 开源技术 文本检测 企业号九月金秋榜

大数据调度平台Airflow(四):Airflow WebUI操作介绍

Lansonli

airflow 9月月更

从零到一了解APP速度测评

百度Geek说

App 网络 企业号九月金秋榜 速度测评

Chrome操作指南——入门篇(六)console.injector

Augus

Chrome开发者工具 9月月更

本周预告:资深架构师解读多架构体系下的内核与系统开发等技术演讲 | 第47-48期

OpenAnolis小助手

开源 ebpf sig 龙蜥大讲堂 普华

PostgreSQL逻辑复制解密

京东科技开发者

数据库 postgresql 数据迁移 WAL 逻辑复制

一条sql了解MYSQL的架构设计

京东科技开发者

MySQL 数据库 架构 innodb 存储引擎

ScrumMaster可不是项目经理!

ShineScrum

Scrum ScrumMaster 项目经理

活动报名|9月24日 Apache Flink Meetup · 北京站,Flink 1.16 新版本发布!

Apache Flink

大数据 flink 流计算 活动 实时计算

堡垒机全称是什么?是运维安全审计系统吗?

行云管家

网络安全 堡垒机

一起瓜分20万奖金!第三届火焰杯软件测试大赛开始公开选拔!

测吧(北京)科技有限公司

测试

NGINX 的未来:回到开源的初心

NGINX开源社区

nginx Kubernetes nginx 开源版 NGINX Kubernetes Gateway NGINX Amplify

Orbeon form 的安装和使用教程

汪子熙

typescript SAP Hybris form 9月月更

如何用AR Engine开发一个虚拟形象表情包?

HarmonyOS SDK

AR

中国移动政企科创专题:耕“云”不辍,厚积薄发

Geek_2d6073

依赖项安全检测新利器:Scorecard API

SEAL安全

开源项目 开源安全 依赖项管理 开源组件 企业号九月金秋榜

MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描

MASA技术团队

.net MASA MAUI Xamarin

还不会搭建自己的产品帮助中心?来看看这个

Baklib

行业方案|“机场”行业智能运维解决方案介绍

云智慧AIOps社区

解决方案 智能运维 运维管理 智能运维AIOps 监控安全

Hinton等谈深度学习十年;PyTorch落地Linux基金会的影响;机器学习界的“GitHub”|AI系统前沿动态

OneFlow

人工智能

前端必读:如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件

葡萄城技术团队

JavaScript Excel canvas 数据导入 数据导出

Baklib|7步教你写出实用的在线产品手册

Baklib

产品 产品文档 产品手册 在线协作

本周四晚19:00知识赋能第八期第2课丨ArkUI自定义组件

OpenHarmony开发者

OpenHarmony

高并发之负载均衡

源字节1号

软件开发

我在百度对抗报警风暴(二)_文化 & 方法_运小博_InfoQ精选文章