【时间序列】腾讯云监控智能告警全新上线

2021-01-18 16:29:56 浏览数 (1)

目录

  • 1. 前言
  • 2. 动态阈值简介
  • 2.1. 什么是动态阈值告警?
  • 2.2. 与静态阈值相比,动态阈值有哪些优势?
  • 2.3. 什么情况下适合使用动态阈值?
  • 3. 使用动态阈值
  • 3.1. 创建动态阈值告警
  • 3.2. 灵敏度的效果演示
  • 3.3. 动态阈值边界的效果演示
  • 4. 最佳实践
  • 4.1. 痛点分析
  • 4.2. 什么情况下适合使用动态阈值?
  • 5. 动态阈值的技术方案
  • 5.1. 【时间序列】时间序列的智能异常检测方案
  • 5.2. 【时序预测】一文梳理时间序列预测——ARMA模型
  • 5.3. 【时序预测】时间序列分析——时间序列的平稳化
  • 6. 参考文档

1. 前言

云监控(Cloud Monitor,CM)支持您针对云产品资源和自定义上报资源设置性能消耗类指标的阈值告警和智能告警,也可以针对云产品实例或平台底层基础设施的服务状态设置事件告警。为您提供立体化云产品数据监控、智能化数据分析、实时化异常告警和可视化数据展示,让您实时、精准掌控业务和各个云产品健康状况,提升运维效率,减少运维成本。

2021年1月份,云监控正式发布动态阈值功能,支持用户一键配置智能告警。如何使用云监控的动态阈值配置智能告警,本文将详细为您阐述。

2. 动态阈值简介

2.1. 什么是动态阈值告警?

目前指标监控主要分类云产品指标监控和自定义指标监控。静态阈值告警是指用户根据业务经验和曲线形态,配置固定的阈值(如 CPU 使用率 大于 90%)。但是静态阈值检测也存在本身检测场景的局限, 例如:需要人工配置,具有学习成本;具有一定维护成本,需要人工根据业务经验不时调整告警阈值设置等。

腾讯云监控动态阈值的告警功能,依托于腾讯云时间序列智能异常检测方案(Intelligent Anomaly Detection,IAD),采用业内领先的机器学习技术并结合业务特性来学习指标数据的历史变化规律,在不需要用户设定阈值的情况下,为您智能地检测指标异常并发送告警。动态阈值支持各种监控和运维场景(包括业务时间序列数据,基础监控时间序列数据等)的时间序列异常检测,让您远离设置各种检测阈值的烦恼。

在监控类型上,动态阈值同时云产品监控和自定义监控两种类型。

  • 常见云产品监控指标:例如 CPU、内存、网络带宽、入流量、出流量等指标。
  • 常见自定义监控指标:例如延时、用户量、访问量等指标。

2.2. 与静态阈值相比,动态阈值有哪些优势?

传统的静态阈值通过人为设定恒定阈值,在达到触发条件后发送告警。静态阈值仅适用于在一定范围内波动的监控指标,例如 CPU 利用率、内存利用率、磁盘利用率等指标,但对于网络流量、延时等波动较大或者不具有明显上下边界的指标,检测效果不佳。

动态阈值的优势主要体现在以下几个方面:

  • 人力成本低:缓解静态阈值设定上对于开发或运维人员专家经验的强依赖,降低静态阈值配置成本。
  • 维护成本低:根据指标数据的历史变化规律,自适应调整动态阈值上下边界,无需开发或运维人员定期手动维护阈值,降低维护成本。
  • 告警更精准:内嵌多种检测模型,适用于多种形态的指标检测,通过对指标的趋势性、周期性等特征的捕获和学习,提供更加精准的告警。

2.3. 什么情况下适合使用动态阈值?

建议使用动态阈值的指标与场景分析如下表:

场景

指标

特点

饱和度

成功率、失败率、丢包率、流量命中率、出流使用率、查询拒绝率、带宽使用率

指标范围确定,通常位于0-100%之间。值具有特殊的场景意义,用户往往只关注阈值。例如磁盘使用率往往超过95%,用户才会真正的关心。该场景适合静态阈值或静态阈值结合动态阈值。

网络流量

网络入带宽、网络出带宽、网络入包量、网络出包量

指标通常随着时间变化而变化,指标范围不确定,一般指标波动幅度较大。该场景适合动态阈值。

延时

延时次数、延时距离、延时时长

指标波动幅度通常较小,指标范围不确定。该场景适合动态阈值。

其它

慢查询数、云数据库的线程数、redis连接数、tcp连接数、QPS硬盘、IO等待时间、临时表数量、全表扫描数、kafka未消费信息数

该场景适合动态阈值。

3. 使用动态阈值

3.1. 创建动态阈值告警

  1. 登录 云监控控制台-告警策略。
  2. 进入告警策略管理页,单击【新建】。
  3. 在配置告警规则模块中,选择“手动配置”。阈值类型选择为“动态"。所有项目配置完后,单击【保存】即可。

在配置页面存在一些名词,下面提供这些名词的解释:

  • 静态 / 动态:静态表示配置静态阈值,动态表示配置动态阈值。
  • 动态阈值上边界:图中阴影区间是根据指标自适应计算出来的合理范围。阴影区间的上面一条线表示上边界,阴影区间的下面线表示
  • 统计周期 1 分钟选项:表示指标的统计粒度,目前动态阈值只开放了 1 分钟粒度。
  • 大于或小于选项:表示需要关注的指标方向,用于表示超过上下边界的定义。
  • 灵敏度:不同的灵敏度他的上下边界(也就是合理范围)大小不一样。
  • 持续 1 个周期:用于控制持续几个点异常才会发出告警。持续 1 个周期表示需要连续 2 个点异常,才会触发告警。
  • 每 1 天告警一次:用于在一次告警内,按时间进行收敛。比如每一天告警一次,表示在同一次触发的告警内,时间间隔了一天发一次告警。当异常恢复了,则结束。

3.2. 灵敏度的效果演示

告警阈值敏感度是从用户对指标灵敏度的感知出发的阈值设置,用于控制指标异常检测的偏差相对大小。可用选项包括以下三种

高灵敏度:指标偏离合理区间的容忍程度较低,用户接收告警量较多。

中灵敏度:默认设置,指标偏离合理区间的容忍程度中等,用户接收告警量中等。

低灵敏度:指标偏离合理区间的容忍程度较高,用户接收告警量较少。

3.3. 动态阈值边界的效果演示

动态阈值的告警规则可以使用相同的告警规则,基于指标行为的上限和下限创建定制的阈值。 可供选项包括:

大于或小于动态阈值,例如等平稳型指标,希望在一定范围内不会太高也不会太低,则设定大于或小于动态阈值。

大于动态阈值上边界,例如 CPU 使用率只关注超出动态阈值上边界即可。

小于动态阈值下边界,例如业务成功数或成功率只关注小于动态阈值下边界即可。

4. 最佳实践

下面以七人普项目实践为例,解析什么样的场景可以发挥动态阈值的价值。 七人普作为一个国家级项目, 需要很多的云产品配合使用,包括:CVM, CLS, CDB,协议监控,CDN 等等云产品。同时,为了监控服务的稳定和使用情况,项目方还有很多自定义上报的业务指标,例如:服务的请求时间,错误统计,在线人数,等等。因此七人普项目同时使用了云产品指标和自定义指标监控。

从运维人员关注的指标来看,关键需要监控告警的指标如下:

  • 云产品指标:CPU 使用率, 内存使用率, 流量带宽,接口成功率。
  • 自定义指标:请求时间耗时, 错误统计量,在线人数。

4.1. 痛点分析

为了能够及时的发现这些关键指标是否存在异常,则需要对这些关键指标进行检测监控。传统的方案是静态阈值告警,运维人员依托自己运维的经验,配置一定的阈值。但是在这个过程中,存在着若干痛点:

痛点一:如何配置合理的阈值?

每一类指标的阈值,首先运维专家需要根据对应的业务情况去配置他认为合理的阈值。不同运维人员配置的阈值存在着差别。

举例:当业务经验丰富的张三和经验一般的李四同时进行静态阈值配置,结果是不一样的。比如 CPU 使用率指标,张三知道可能这个机器的使用率达到 85% 才需要告警,因此配置的阈值效果比较符合业务的需求。但是李四由于经验不足,可能配置为 “使用率大于 50%” 告警,这种情形可能会产生比较多的告警,造成一定的骚扰。因此不同运维人员配置出的阈值策略差别很大。

痛点二:如何保证阈值一直是合理的?

随着业务的不断变化,先前配置的阈值可能已经不符合指标现状,每天还需去检查配置的阈值是否合理。如果不进行阈值调整,则会导致告警不准,告警不足等各种各样的问题。

举例:某个业务的流量, 一开始上线人数较少,因此流量的整体值较低,假设在 100 MB 左右波动,这时候张三根据指标值的范围,配置了 “大于 120 MB” 则告警的阈值策略。但随着业务的不断迭代,流量的值也在逐步提升, 提升到整体值在 150 MB 左右波动。这时候先前配置的 “大于 120 MB ” 的告警则毫无作用,需要张三手动去调整阈值,可能调整为 “大于 170 MB” 更加合适。 

痛点三:指标的方向性如何表征?

对于关注上下变化的阈值, 则需要设置多条阈值去保证。 

举例:对于不同的指标,关注的变化方向也有一定的区别:例如对于接口成功率,期待的值是 100%。这时候只有发生了下掉,才认为是异常,因此只关注下掉。 对于失败率 / 错误统计量 / 请求耗时这一类指标,则期待值是比较低的状态。这时候只有发生了上涨,才认为是异常,因此只关注上涨。

而对于像流量,在线人数等指标,没有明显的方向倾向,则无论上涨还是下掉,都认为异常。 

而动态阈值则会根据一段历史的指标曲线走势,自适应的提取曲线的趋势,周期,波动等特征,自适应计算合理的上线阈值。 动态阈值极大的解决了配置合理阈值难,维护阈值难等痛点。

4.2. 什么情况下适合使用动态阈值?

下面将分场景演示指标配置动态阈值的正确姿势。 

指标类型一:饱和度。

对于饱和度类型的指标,一般值的范围是确定的:0-100% 之间。 值具有特殊的场景意义,用户往往只关注阈值。例如磁盘使用率往往超过 95%,用户才会真正的关心。该场景适合静态阈值或静态阈值结合动态阈值。不过在实际应用中,建议考虑使用中灵敏度。

场景一: 如果当前的指标,你明确的知晓什么情况下才可能发生严重的问题,例如 CPU 使用率,常见设置到达 90% 才触发告警。这种情形下可以考虑使用静态阈值。

场景二: 不过如果你觉得只能到达 90% 后,才发告警,这种不能帮助你提前发现一些问题, 可以考虑使用动态阈值, 如下图。这种情形出现一定幅度的突增,则会向你发送告警,更容易在问题初期收到告警,去关注解决。

场景三: 当然,如果你觉得必须到达某个值,才想看告警。例如,我希望出现一定的幅度突增,同时值必须大于 60%,告警才有意义,这种情形可以考虑结合动态阈值和静态阈值一起使用。 

指标类型二:流量。

指标通常随着时间变化而变化,指标范围不确定,一般指标波动幅度较大。该场景适合动态阈值。

场景一: 如果当前的检测指标,你作为运维专家也需要观察很久之前的数据才知道多大的阈值是合理的。或者你观察后还是觉得不知道最佳的阈值是多少。这种情况下动态阈值就可以免除你的烦恼。 

场景二: 你明确知道流量大于 / 小于多少值是异常的,这种情况可以考虑动态阈值结合静态阈值来使用。

指标类型三:延时。 

指标波动幅度通常较小,指标范围不确定。该场景适合动态阈值。

由于延时场景指标毛刺点较多,建议使用中等灵敏度,以及较大的持续周期,从而过滤毛刺,提升告警质量。

其他指标的例子:

再比如异常统计这类指标,在业务的初始阶段,你也很难去配置出一条合理的阈值出来。很常见的情况时你需要不断的去调试这个阈值,每天根据业务变化情况去手动更改。这类情况动态阈值也可以帮你解决。

因为动态阈值可以自适应的去追踪指标的变化趋势。真正的让运维专家从阈值中解放出来。

再比如像统计执行的任务数这一类指标,通过观察可能发现,数量大部分都处于 350 附近。这时候的突然上升,或者突然下降,可能都会是异常。在静态阈值场景下,则需要设置俩条合理的上下阈值,才能满足需求。

而动态阈值,你只需要选择 “大于或小于” 的上下方向,系统会帮你自适应的去识别出突增和突降。

同时,经过一段时间,可能统计量上升到 550 为合理的值。如果是静态阈值的方式,将会一直收到告警,除非再去重新设置当前这一阶段更合适的阈值。而动态阈值功能下,完全不用担心这样的问题, 动态阈值只会在从 350 突增到 550 的一定时间内给你发送告警,而数据稳定到 550 后,算法会智能识别当前值为正常了,这时候告警停止。 

5. 动态阈值的技术方案

本节从Metis和时间序列分析方法展开,简要介绍动态阈值的技术方案。

异常检测,尤其是单指标的时序数据检测通常是AIOps团队从0到1的起点。腾讯公司的CSIG相关团队开发了相应的Metis产品,其早期版本已经在业界开源,Metis开源地址:https://github.com/Tencent/Metis

5.1. 【时间序列】时间序列的智能异常检测方案

原文链接:https://cloud.tencent.com/developer/article/1670322

时间序列异常检测是学术界和工业界一直研究的热点和难点问题。比如腾讯内部开源的Metis项目,其实现思路是基于统计判决、无监督和有监督学习对时序数据进行联合检测。通过统计判决、无监督算法进行首层判决,输出疑似异常,其次进行有监督模型判决,得到最终检测结果。检测模型是经大量样本训练生成,可根据样本持续训练更新。Metis实现的时间序列异常检测学件在织云企业版本中已覆盖 20w  服务器,承载了 240w  业务指标的异常检测。经过了海量监控数据打磨,该学件在异常检测和运维监控领域具有广泛的应用性。

5.2. 【时序预测】一文梳理时间序列预测——ARMA模型

原文链接:https://cloud.tencent.com/developer/article/1666552

统计研究中,常用按时间顺序排列的一组随机变量X1​,X2​,⋯,Xt​,⋯来表示一个随机事件的时间序列,简记为{Xt,t∈T}。在时间的角度上来说,数据类型可分为两类:横截面数据和时间序列[1]。横截面数据是值在某一时间点搜集来自不同对象的数据,时间序列是一组按照时间排序的数据;横截面数据与时间序列的组合在计量经济学上构成了面板数据集。

时间序列按照时间排序的事实意味着他们存在特殊的性质以及存在一些特定的方式去分析时间序列。

时域分析法:主要思想是事件的发展通常有一定的惯性,用统计学语言来说就是序列值之间存在一定的相关关系,而这种相关关系具有某种统计规律性,可以利用拟合法构建数学模型来描述时间序列。

5.3. 【时序预测】时间序列分析——时间序列的平稳化

原文链接:https://cloud.tencent.com/developer/article/1666562

时间序列可以分为平稳型时间序列和非平稳型时间序列,针对两者采用的异常检测方法有所不同,一大经典解决思路就是将非平稳时间序列转换成平稳型时间序列,这样就可以采用平稳型时间序列的方法来处理了。而将非平稳时间序列平稳化的方法如下:

6. 参考文档

  1. 【时间序列】时间序列的智能异常检测方案:https://cloud.tencent.com/developer/article/1670322
  2. 【时序预测】一文梳理时间序列预测——ARMA模型:https://cloud.tencent.com/developer/article/1666552
  3. 【时序预测】时间序列分析——时间序列的平稳化:https://cloud.tencent.com/developer/article/1666562
  4. 《腾讯云监控——动态阈值简介》:https://cloud.tencent.com/document/product/248/50693
  5. 《腾讯云监控——使用动态阈值》:https://cloud.tencent.com/document/product/248/50694
  6. 《80% or 90%?--告警设置之动态阈值最佳实践》:https://mp.weixin.qq.com/s?__biz=MzAxMTQyMzQxNg==&mid=2247484196&idx=1&sn=323e178576ddc6f7e6b608b6e81a67f5&chksm=9b4018f3ac3791e5a9c58945215fbd81e1196b3bb762b55cc5c84233faa5c1a7d7c247b3b480&mpshare=1&scene=1&srcid=1231NwDbQjGwLbMlM3sJnr4j&sharer_sharetime=1609385981827&sharer_shareid=6fb4ff9f8440abfd56c4ff5fe00b3295&version=3.1.0.3003&platform=win#rd

0 人点赞