只需半分钟,ARMS 帮你配置出“高质量”告警

news2025/2/22 14:03:32

作者:图杨

背景

某位资深运维工程师A:“一天不收个几十条告警,我都觉得心里不踏实” 。运维工程师B:“我那几个告警天天告,我的应用一点问题都没有,但是我又不敢关”。运维工程师C:“我每天都要花大量的时间,整理已经发生的告警:查它们是什么原因导致的,是故障还是误报,要不要解决,要不要屏蔽。”运维工程师D:“要不我们给告警数配置一个告警吧,一天收100条告警是正常的,哪天告出来200条估计就是有问题了”。会出现这样的对话不是因为这几位运维工程师不专业,实际上,误告警泛滥,真告警被淹没,就是大多数团队,甚至顶尖的互联网企业的运维团队的现状。想要配置出“系统无异常时不误告,有异常时及时告”的“高质量”的告警规则是非常具有挑战性的。

所以这些告警都是些什么?为了保证系统和应用的稳定性,工程师们会搭建监控系统以实时地采集比如RT(响应时间)、QPS(调用次数)、Error Rate(错误率)、HTTP状态码、Full GC次数等关键指标,并对核心应用的关键指标进行实时地巡检,当检测到指标当前值超出“正常水位”时,相关的工程师就会收到对应的告警。

那这些误告警又是怎么产生的呢?传统的告警规则主要是静态阈值告警,当某指标的实际值超出用户设定的阈值,就认为是系统出现了异常。但是,想要快速选定合适的阈值,配出“高质量”告警,是很难的。阿里云应用实时监控服务ARMS通过对近百位用户的访谈与调研,发现平均每个用户每天收到1275条告警。而且,我们对 6 万条关于响应时间和错误率突增的告警进行了分析,发现其中只有 3.05%的告警是“真”告警,剩下的96.95%都是由于阈值设置不当引发的误告警。

为什么配出”高质量“告警很难?

传统的告警规则是静态阈值告警,工程师们会对每个指标设定一个固定的阈值来定义指标的“正常水位”,当指标的实际值超出阈值时,对应的工程师就会收到告警。比如当应用的RT超出1s,就算是异常。但是合适的静态阈值,是很难定义的。因为:

1. 同一指标,不同应用,不同接口的“正常水位”不同。

现实生活中,SRE(运维工程师)需要对很多应用、很多接口配置告警。即使是同一个指标,不同应用,不同接口的“正常水位”都是是不一样的。下图是同一家公司,不同应用的错误率指标。

图片

下图是同一应用,不同接口的平均响应时间指标:

图片

SRE需要为每一个应用、每一个接口的每一个指标来设定“正常水位”。 这对于有几百个应用、几十条关键指标的公司来说,仅靠人力来不断地设定和维护指标的“正常水位”需要花费大量的时间。

更可怕的是,随着业务的发展,代码不断变更,各项指标的“正常水位”会不断地变化。这意味着SRE要不断地调整告警阈值。
###v2. 有的指标,不同时段的“正常水位”不一样

比如某工作网站的访问量,在10:00-18:00时段内,访问量低于1000是异常的;但是在夜间,比如22:00-6:00,访问量超过1000可能是收到了攻击。在这种场景下,指标的“正常水位”会随着时间变化而不断变化。如果我们硬配置一个阈值,比如低于1000就告警,那整个晚上都会受到告警的打扰。

有的SRE可能会表示,那我晚上自动吧告警关掉就好了,但是现实生活中,这种起伏不定的指标,很难有像“1000”这么规整的阈值,现实生活中的调用量指标是下面的样子,就是会有一些令人意想不到的“大毛刺”。

图片

3. 告警阈值的合理性难以及时验证

SRE们配好一个告警阈值之后,也很难验证这个阈值是不是合理的。运维工程师们往往会不断地被打扰,他们要不断地调整阈值,才能得到一个较高质量的告警。当指标的正常水位随着业务变化而变化之后,周而复始,重新调整阈值。

业界是怎么协助用户配置出”高质量“告警的?

如何有效地帮助客户配制出“高质量”的告警规则,是每一个APM(应用性能监控)厂商关注的问题。为了解决这个问题,主流的APM厂商都提供了智能告警服务。主要思路就是用统计学算法或者机器学习算法,提取指标的特征,下面介绍业界如何解决上面提到的问题:

问题 1:同一指标,不同应用,不同接口的“正常水位”不同

为了解决阈值难配的问题,一些APM厂商给出了静态阈值推荐的功能。一般地,他们用算法为各个接口、各个应用,根据对于指标的历史数据学习指标特征,结合指标历史平均水位以及波动情况给出一个建议阈值。

但是,厂商给的是通用算法,SRE很难评估算法推荐的阈值是不是符合他的业务,是不是真的“高质量”的阈值。

问题 2:有的指标,不同时段的“正常水位”不一样

对于波动型指标,一些厂商推出了动态阈值(也称区间检测)功能。在这个场景下,指标的实际值不再和单一的静态阈值比较,而是和一个时间序列做对比。具体地,算法会根据指标历史数据学习其波动特征,并对未来一段时间指标正常变化范围进行预测。比如每天00:00对未来一天的指标“正常水位”的上下边界进行预测,等采集到实际值时,比如10:00时,将实际值与之前的预测值进行比较,实际值超过了边界就被判定为异常。下面是一个动态阈值功能的示意图,绿线是指标的实际值,蓝色阴影是算法计算出来的,指标在正常情况下的上下边界。

图片

这里的缺点在于:算法对用户来说是黑盒,SRE们不敢把关键的业务指标放心地交给算法。另外,这些算法是通用的,不一定符合SRE的实际业务需求。而且,很多APM厂商没有关注到这一点,没有给用户调节动态阈值的功能。

问题 3:告警阈值的合理性难以及时验证

一些APM厂商给出了阈值和指标过去一段时间实际值的对比图。但是,SRE们往往没有时间对每个应用、每条指标、每个接口都浏览一遍来设置合理的阈值。

另外,对于动态阈值的功能,很少有厂商给出对比图。SRE没有足够的信息来对告警阈值进行调整,只能不断地受到告警打扰再调节阈值。这样,有了几次误告警之后,SRE们就会把这些“华而不实”的AI功能关掉。

ARMS 是怎么帮用户实现半分钟配出”高质量“告警的?

为了解决这些问题,为了给用户提供“透明的”、“易用的”、“所见即所得”的智能化告警体验,ARMS对应用性能监控告警功能进行了全面升级。 下面我们介绍ARMS如何解决“高质量”告警难配的问题。

问题 1:同一指标,不同应用,不同接口的“正常水位”不同

实际上,对每一条指标配置一个合适的阈值其实都不算难,难的地方在于每个应用、每个接口、每种指标类型适合的阈值都不一样。SRE要遍历所有的指标,为他们设置合适的阈值,这是需要耗费大量时间的地方。

对于配静态阈值这种重复的工作,ARMS决定交给代码来做。用户只需要选择要配告警的应用、接口和指标类型。

图片

然后点击“填入P4建议阈值”,ARMS就会自动拉取每个应用、每个接口对应指标的历史3天数据,然后用N-sigma算法,计算每个指标历史3天的均值和方差。当业务没有发生变化,我们默认指标服从一个正态分布,它偏离它的期望N倍标准差的概率很小。根据这个原理,我们给出一个推荐阈值。这里的"P4"是表示的是最不严重的告警,这个建议阈值仅仅表示指标有些许异常。

图片

当用户的业务发生了变化,应用正常水位也发生了变化,那么用户也只需要编辑一下告警规则,再点一次“填入P4建议阈值”即可。真正做到了一次配置,随处生效。

问题 2:有的指标,不同时段的“正常水位”不一样

由于静态阈值告警难以满足如RT、QPS等波动型指标的监控功能,我们推荐动态阈值,也叫区间检测功能。这里我们会自动根据指标7天历史数据,预测指标未来上下边界。用户可以根据上下边界配置告警,当指标实际值超出上边界或下边界,触发告警。

ARMS主要使用了Meta(Facebook)公司2018年公布的Prophet算法 [ 1] 。算法会先根据指标历史7天数据,用时间序列分解算法,将指标分解成季节项、趋势项和残差项。举个例子 [ 2] ,对于下面图 1 中的时间序列,Prophet算法会将它分解成有规律的趋势项(图2)季节项(图3)和没有规律的残差项。

图片

图 1

图片

图 2

图片

图 3

既然趋势项和季节项是有规律的,我们就可以对未来一段时间指标的值进行预测。但是还有残差项的存在,所以如果我们对指标的变化趋势预测得到的是一个区间,可以看图 1 中蓝色阴影部分。Prophet是一个无领域的,时序预测通用算法。我们对该算法做了一些实验之后,发现把它应用到APM领域,还需要大量的改造。

当用户配置区间检测任务之后,ARMS会在后台以每24h一次的频率,学习指标历史7天数据的特征,提取指标趋势性、季节性等特征,得到指标未来24h的预测曲线。再根据指标自身的波动情况,也就是误差方差的大小,为未来一天指标的数据做出一个估计区间。用户在配置区间检测告警中,可以对算法计算出来的上下边界进行预览。下图中,蓝线是指标的实际值,绿色的阴影是上下边界。

图片

与静态阈值推荐功能不同的地方在于,当用户业务变化导致指标正常水位发生变化,用户不需要通过手动编辑告警规则的方式来更新阈值。这是因为ARMS持续地在以每天一次的频率学习指标的特征,并只预测未来一天的上下边界。SRE们不需要再一遍一遍来回地调整阈值。ARMS区间检测告警,一次配置,自适应学习指标特征,持久有效。

问题 3:告警阈值的合理性难以及时验证

为了帮助用户及时地验证告警的合理性,使得用户能够根据自身业务调整算法推荐的阈值,ARMS推出了如下的功能:

  1. 为了方便用户根据自己的实际数据对阈值进行调整,我们给出了指标实际值和阈值的对比图

这里的P1、P2、P3、P4的阈值代表着不同的严重程度,当用户配置好各个阈值之后,ARMS会用不同的颜色标识出4个不同等级的阈值。

图片

2.提供了告警数预测功能

我们会根据指标历史24h数据,计算指标会超出每个阈值的次数来预测在该设定下告警的数量。并且,ARMS提供了指标详情信息,用户可以看到具体是哪些时刻,指标的实际值超出了当前的阈值。用户可以根据这些信息调整阈值,以适配实际业务需求。

图片

图片

  1. 无论是静态阈值还是推荐阈值,ARMS都支持用户手动调节推荐阈值

在静态阈值配置的界面下, 用户可以按需地修改阈值;在区间检测功能中,用户可以滑动灵敏度按钮,从0到200挑选任意整数作为灵敏度。并且,图中标识着指标上下边界的绿色区间也会随着灵敏度的变化而变化。

图片

总结

为了帮助用户快速配出“高质量“告警,ARMS提供了“静态推荐阈值”来帮助用户快速地计算指标的“正常水位”;并且,针对不同时间段“正常水位”不一样的指标,ARMS提供了“区间检测”功能。另外,ARMS提供了告警数预测功能,使得运维工程师们可以及时地评估告警规则的合理性。也让他们有足够的信息,根据自身业务来调节告警阈值以及区间检测中的灵敏度,一次性配出“高质量”告警。

运维工程师D表示:“用ARMS确实比给告警数配告警靠谱哈”,运维工程师A、B、C:“赶紧上阿里云开通ARMS吧,我再也不想半夜被告警电话吵醒了”。

参考文献:

[1] Prophet算法

Taylor S J, Letham B. Forecasting at scale[J]. The American Statistician, 2018, 72(1): 37-45.

[2] 举个例子https://zhuanlan.zhihu.com/p/52330017

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安果天气预报 产品介绍

软件介绍版本号 2.0.5 安果天气预报:全世界覆盖,中国定制 想要查找北京、上海、纽约、东京还是巴黎的天气?一款简约的天气预 报应用为你呈现。专注于为用户提供纯净的天气体验,我们不发送任何打扰的通知。包含空气质量、能见度、…

使用Python搭建服务器公网展示本地电脑文件

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言,其语法简单且语句清晰,而且python有…

搜索树基础:二叉搜索树(详解特性用途,图解实现过程)

二叉搜索树 二叉搜索树的特性二叉搜索树的主要用途二叉搜索树的基本操作1、二叉搜索树的查找2、二叉搜索树的插入3、二叉搜索树的删除(难点)(1)找到待删结点(2)分情况删除 二叉搜索树的特性 二叉搜索树又称…

如何高效沟通避免沟通冲突 ?2大沟通漏斗模型

“昨天,我不是说这个Bug了?”“没有啊,你啥时候说的?”项目组成员沟通效率不高,往往造成沟通误解、争论不休,甚至出现沟通冲突,影响项目进度。 那么该如何提高沟通效率,避免不必要的…

Fmoc-D-Ser(Ac4-L-Manα)-OH主要采用的是Fmoc合成法,Fmoc合成法是以Fmoc为α-氨基的保护基

Fmoc-D-Ser(Ac4-L-Manα)-OH主要采用的是Fmoc合成法。Fmoc合成法是以Fmoc为α-氨基的保护基,配合侧链保护的苄醇类,完成多肽合成。 在西安凯新生物科技有限公司的Fmoc合成法的实施过程中,首先将一个Fmoc-氨基酸衍生物共价交联到树…

老师们如何轻松制作学生分班查询系统

当暑假即将结束,老师们面临着许多事务,其中一个重要的任务是制作分班信息查询系统。这个工具对于老师们来说非常重要,因为它可以提供给家长和学生们方便快捷的查询服务。 分班信息查询系统可以让家长和学生们通过系统查询自己所在的班级、同班…

如何快捷发布学生分班情况

暑假即将结束,老师们面临着许多事务,其中一个重要的任务是制作分班信息查询系统。这个工具对于老师们来说非常重要,因为它可以提供给家长和学生们方便快捷的查询服务。 分班信息查询系统可以让家长和学生们通过系统查询自己所在的班级、同班同…

MySQL每日一练--校园教务系统

一丶数据库名称:SchoolDB 二丶数据库表信息:角色信息表 表名: t_role 主键: r_id 序号 字段名称 字段说明 类别 位数 属性 备注 1 r_id 角色编号 int 主键 自动增长 2 r_name_EN 角色名(英文…

CPU内部单总线方式——例题分析

指令:ADD (R0),R1 (R0) 目的操作数 (R0)说明R0中存放的是目的操作数的地址,则需要一次间接寻址 R1 源操作数 直接存在了R1寄存器中 最后(R0)存入R0所指向的存…

能源行业配电柜监控,这也太智能了!

在能源行业中,配电柜作为能量传输和控制的关键枢纽,其稳定运行直接关系到供电系统的可靠性和安全性。随着技术的不断进步,配电柜监控系统的发展为能源管理带来了全新的可能性。 配电柜监控系统的引入为能源行业带来了更高的智能化水平和管理效…

成集云 | 旺店通多包裹数据同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 随着品牌电商兴起,线上线下开始逐渐融为一体,成集云以旺店通ERP系统为例,通过成集云-旺店通连接器,将旺店通ERP系统多包裹数据同步至钉钉实现数据互通,帮助企业解决了电商发货存在的错…

面向对象知识点

一.Static 1.static修饰成员变量 被static修饰的成员变量,也叫做类变量,与类一同加载,只加载一次,被当前类的所有对象共享,只有一个 可以通过类名.属性的方法调用,也可以使用对象.属性的方式调用 应用场…

备份集中的数据库备份与现有的数据库不同?

数据已经成为公司的主要资产,特别是对于企业来说,数据库中存储的信息通常是其业务运营的核心。 因此,确保数据库的安全性和完整性至关重要。这导致数据库备份成为企业信息管理的重要组成部分。本文将详细介绍备份密集数据库备份的必要性,以及…

【python】Leetcode(primer-pointer)

文章目录 26. 删除有序数组中的重复项(快慢指针)88. 合并两个有序数组(双指针)167. 两数之和 II - 输入有序数组(双指针) 更多 leetcode 题解可参考:【Programming】 26. 删除有序数组中的重复项…

【linux内核】DP83867添加GMII模式支持

文章目录 修改方案前期知识为什么这么修改?通用寄存器 修改方案 linux 4.0内核下/drivers/net/phy/dp83867.c phy_write_mmd(phydev, DP83867_DEVADDR, DP83867_CFG4, val);} if (phydev->interface PHY_INTERFACE_MODE_GMII){val phy_read_mmd(phydev, DP838…

CLIP(Contrastive Language-Image Pre-training)

《Learning Transferable Visual Models From Natural Language Supervision》 从自然语言监督中学习可迁移的视觉模型 贡献:利用自然语言信号监督,打破了固定类别的范式。 方法简单,效果好。从文本中得到监督信号,引导视觉分类的任务。 它是一个 zero-shot 的视觉分类…

深度研究:ASEMI快恢复二极管APT60DQ20BG

编辑-Z 在众多电子元件中,快恢复二极管APT60DQ20BG因其独特属性和广泛应用,吸引了广大电子爱好者和工程师的目光。本文将为您进行全面、深入的剖析。 首先,我们需要理解APT60DQ20BG是什么。APT60DQ20BG是一种快恢复二极管。二极管作为一个电…

【MySQL系列】Select语句单表查询详解(一)

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

搭建AI智能问答的这些前期工作可不要忘了

在搭建AI智能问答之前,我们需要做好相应的前期准备工作,不能盲目地去搭建模型。这样很容易导致我们模型后续的不完整性。所以looklook今天就基于搭建AI智能问答最基础的思路,带领大家一起去理顺一下我们需要做什么前期工作才能保证AI智能问答…

【数据结构】C语言实现栈(详细解读)

前言: 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--C语言实现栈 目录 什么是栈 栈的概念及结构 实现栈的方式 链表的优缺点: 顺序表的优缺点: 栈…