前言
全民 AI ,AIOps,机器学习,这些热词近年来不绝于耳。到底什么是智能?百度百科中对 “人工智能” 的定义中有一句来自美国麻省理工学院的温斯顿教授的看法 “人工智能就是研究如何使计算机去做过去只有人才能做的智能工作。” 暂且用这一句来概括今天要跟大家介绍的云监控新功能 -- 动态阈值:在不需要用户设定阈值的情况下,为您智能地检测指标异常并发送告警。文章将会带大家认识动态阈值,以及它为用户带来的价值以及实际应用。
静态阈值 vs 动态阈值
腾讯云监控提供指标存储,监控告警,展示的一体式解决方案。目前指标监控主要分类云产品指标监控和自定义指标监控。而无论是哪种 ,目前都只能支持静态阈值检测告警。
静态阈值告警是指用户根据业务经验和曲线形态,配置固定的阈值(如 CPU 使用率 大于 90%)。
PS:
在监控类型上,云监控目前支持云产品监控和自定义监控两种类型。
- 常见云产品监控指标:例如 CPU、内存、网络带宽、入流量、出流量等指标。
- 常见自定义监控指标:例如延时、用户量、访问量等指标。
但是静态阈值检测也存在本身检测场景的局限, 例如:需要人工配置,具有学习成本;具有一定维护成本,需要人工根据业务经验不时调整告警阈值设置等。
在这样的背景下,云监控研发了动态阈值功能。 动态阈值功能,依托于腾讯云时间序列智能异常检测方案(Intelligent Anomaly Detection,IAD),采用业内领先的机器学习技术并结合业务特性来学习指标数据的历史变化规律,在不需要用户设定阈值的情况下,为您智能地检测指标异常并发送告警。
同时动态阈值支持各种监控和运维场景(包括业务时间序列数据,基础监控时间序列数据等)的时间序列异常检测,让您远离设置各种检测阈值的烦恼。与现有的静态阈值告警功能相比,动态阈值弥补了静态阈值场景能力、配置门槛和维护成本上的不足。
如何配置动态阈值告警?
在配置页面存在一些名词,下面提供这些名词的解释:
- 静态 / 动态:静态表示配置静态阈值,动态表示配置动态阈值。
- 动态阈值上边界:图中阴影区间是根据指标自适应计算出来的合理范围。阴影区间的上面一条线表示上边界,阴影区间的下面线表示
- 统计周期 1 分钟选项:表示指标的统计粒度,目前动态阈值只开放了 1 分钟粒度。
- 大于或小于选项:表示需要关注的指标方向,用于表示超过上下边界的定义。
- 灵敏度:不同的灵敏度他的上下边界(也就是合理范围)大小不一样。
- 持续 1 个周期:用于控制持续几个点异常才会发出告警。持续 1 个周期表示需要连续 2 个点异常,才会触发告警。
- 每 1 天告警一次:用于在一次告警内,按时间进行收敛。比如每一天告警一次,表示在同一次触发的告警内,时间间隔了一天发一次告警。当异常恢复了,则结束。
配置流程
Step 1: 进入云监控控制台,选择告警配置,进入到告警策略页面, 点击新建按钮。
Step 2: 填写策略的基本信息,选择需要监控的指标。
Step 3: 选择动态阈值功能,进行相关参数的配置。(也可以采取默认的参数)
参数说明:
指标统计粒度:指标统计周期,根据指标的粒度大小,用户可以按需求选择。目前动态阈值功能由于初步上线,粒度只支持 1 分钟。后续会逐步放开。
关注的方向:可以选择大于,小于,大于或小于。举例:选择了大于或小于,则指标超出上边界和下边界,都会判定为异常。如果只选择大于,表示超出上边界才是异常,超出下边界则是正常。这个功能主要是提供给一些特点的指标场景,例如成功率只关注下降的方向,失败率值关注上升的方向等。
持续周期:目前最小的选择是持续 1 个周期,表示连续俩个异常点,才会发送告警。对应的,发送恢复也是需要持续 2 个点正常才发送恢复。
每 1 天告警 1 次:当告警一直为恢复时,用户可以定义多久收到一次告警。
配置效果展示
不同的关注方向实际演示:
选择了大于或小于,则指标超出上边界和下边界,都会判定为异常。
只选择大于,表示超出上边界才是异常,超出下边界则是正常。
只选择小于,表示超出下边界才是异常,超出上边界则是正常。
不同的灵敏度演示:
高灵敏度:指标偏离合理区间的容忍程度较低,用户接收告警量较多。
中灵敏度:默认设置,指标偏离合理区间的容忍程度中等,用户接收告警量中等。
低灵敏度:指标偏离合理区间的容忍程度较高,用户接收告警量较少。
最佳实践
下面以七人普项目实践为例,解析什么样的场景可以发挥动态阈值的价值。 七人普作为一个国家级项目, 需要很多的云产品配合使用,包括:CVM, CLS, CDB,协议监控,CDN 等等云产品。同时,为了监控服务的稳定和使用情况,项目方还有很多自定义上报的业务指标,例如:服务的请求时间,错误统计,在线人数,等等。因此七人普项目同时使用了云产品指标和自定义指标监控。
从运维人员关注的指标来看,关键需要监控告警的指标如下:
云产品指标:CPU 使用率, 内存使用率, 流量带宽,接口成功率。
自定义指标:请求时间耗时, 错误统计量,在线人数。
01
痛点分析
为了能够及时的发现这些关键指标是否存在异常,则需要对这些关键指标进行检测监控。传统的方案是静态阈值告警,运维人员依托自己运维的经验,配置一定的阈值。但是在这个过程中,存在着若干痛点:
痛点一:如何配置合理的阈值?
每一类指标的阈值,首先运维专家需要根据对应的业务情况去配置他认为合理的阈值。不同运维人员配置的阈值存在着差别。
举例:当业务经验丰富的张三和经验一般的李四同时进行静态阈值配置,结果是不一样的。比如 CPU 使用率指标,张三知道可能这个机器的使用率达到 85% 才需要告警,因此配置的阈值效果比较符合业务的需求。但是李四由于经验不足,可能配置为 “使用率大于 50%” 告警,这种情形可能会产生比较多的告警,造成一定的骚扰。因此不同运维人员配置出的阈值策略差别很大。
痛点二:如何保证阈值一直是合理的?
随着业务的不断变化,先前配置的阈值可能已经不符合指标现状,每天还需去检查配置的阈值是否合理。如果不进行阈值调整,则会导致告警不准,告警不足等各种各样的问题。
举例:某个业务的流量, 一开始上线人数较少,因此流量的整体值较低,假设在 100 MB 左右波动,这时候张三根据指标值的范围,配置了 “大于 120 MB” 则告警的阈值策略。但随着业务的不断迭代,流量的值也在逐步提升, 提升到整体值在 150 MB 左右波动。这时候先前配置的 “大于 120 MB ” 的告警则毫无作用,需要张三手动去调整阈值,可能调整为 “大于 170 MB” 更加合适。
痛点三:指标的方向性如何表征?
对于关注上下变化的阈值, 则需要设置多条阈值去保证。
举例:对于不同的指标,关注的变化方向也有一定的区别:例如对于接口成功率,期待的值是 100%。这时候只有发生了下掉,才认为是异常,因此只关注下掉。 对于失败率 / 错误统计量 / 请求耗时这一类指标,则期待值是比较低的状态。这时候只有发生了上涨,才认为是异常,因此只关注上涨。
而对于像流量,在线人数等指标,没有明显的方向倾向,则无论上涨还是下掉,都认为异常。
而动态阈值则会根据一段历史的指标曲线走势,自适应的提取曲线的趋势,周期,波动等特征,自适应计算合理的上线阈值。 动态阈值极大的解决了配置合理阈值难,维护阈值难等痛点。
02
什么情况下适合使用动态阈值?
建议使用动态阈值的指标:
下面将分场景演示指标配置动态阈值的正确姿势。
指标类型一:饱和度。
对于饱和度类型的指标,一般值的范围是确定的:0-100% 之间。 值具有特殊的场景意义,用户往往只关注阈值。例如磁盘使用率往往超过 95%,用户才会真正的关心。该场景适合静态阈值或静态阈值结合动态阈值。不过在实际应用中,建议考虑使用中灵敏度。
场景一: 如果当前的指标,你明确的知晓什么情况下才可能发生严重的问题,例如 CPU 使用率,常见设置到达 90% 才触发告警。这种情形下可以考虑使用静态阈值。
场景二: 不过如果你觉得只能到达 90% 后,才发告警,这种不能帮助你提前发现一些问题, 可以考虑使用动态阈值, 如下图。这种情形出现一定幅度的突增,则会向你发送告警,更容易在问题初期收到告警,去关注解决。
场景三: 当然,如果你觉得必须到达某个值,才想看告警。例如,我希望出现一定的幅度突增,同时值必须大于 60%,告警才有意义,这种情形可以考虑结合动态阈值和静态阈值一起使用。
指标类型二:流量。
指标通常随着时间变化而变化,指标范围不确定,一般指标波动幅度较大。该场景适合动态阈值。
场景一: 如果当前的检测指标,你作为运维专家也需要观察很久之前的数据才知道多大的阈值是合理的。或者你观察后还是觉得不知道最佳的阈值是多少。这种情况下动态阈值就可以免除你的烦恼。
场景二: 你明确知道流量大于 / 小于多少值是异常的,这种情况可以考虑动态阈值结合静态阈值来使用。
指标类型三:延时。
指标波动幅度通常较小,指标范围不确定。该场景适合动态阈值。
由于延时场景指标毛刺点较多,建议使用中等灵敏度,以及较大的持续周期,从而过滤毛刺,提升告警质量。
其他指标的例子:
再比如异常统计这类指标,在业务的初始阶段,你也很难去配置出一条合理的阈值出来。很常见的情况时你需要不断的去调试这个阈值,每天根据业务变化情况去手动更改。这类情况动态阈值也可以帮你解决。
因为动态阈值可以自适应的去追踪指标的变化趋势。真正的让运维专家从阈值中解放出来。
再比如像统计执行的任务数这一类指标,通过观察可能发现,数量大部分都处于 350 附近。这时候的突然上升,或者突然下降,可能都会是异常。在静态阈值场景下,则需要设置俩条合理的上下阈值,才能满足需求。
而动态阈值,你只需要选择 “大于或小于” 的上下方向,系统会帮你自适应的去识别出突增和突降。
同时,经过一段时间,可能统计量上升到 550 为合理的值。如果是静态阈值的方式,将会一直收到告警,除非再去重新设置当前这一阶段更合适的阈值。而动态阈值功能下,完全不用担心这样的问题, 动态阈值只会在从 350 突增到 550 的一定时间内给你发送告警,而数据稳定到 550 后,算法会智能识别当前值为正常了,这时候告警停止。
动态阈值正在灰度阶段,欢迎填写问卷申请体验。问卷地址,点击阅读原文即可获取。
欢迎联系云监控小助手微信号,加群讨论:)