作者|梵登、白玙
审核&校对:白玙
编辑&排版:雯燕

背景

异常检测作为智能运维(AIOps)系统中基础且重要功能,其旨在通过算法自动地发现 KPI 时间序列数据中的异常波动,为后续的告警、自动止损、根因分析等提供决策依据。那么,我们该如何在实际场景中使用异常检测呢,而异常检测又是什么,今天我们就进行一次深入讲解。

什么是异常检测?

在一切开始前,我们首先需要了解什么是异常检测。异常检测是指从时间序列或者事件日志中,去识别出不正常的事件、现象等。我们这里讲的异常检测特指时间序列的异常检测。通过对时间序列的值大小,曲线形态等进行综合判定,可以发现曲线异常点。异常的表现一般是指时间序列发生了不符合预期的上升、下降或者波动。

举例来说:某台机器的内存使用率指标一直在 40% 左右的水位波动, 突然飙升至 100%;某个 Redis 数据库的连接数正常水平一直在 100 数量左右, 突然发生了大规模的下跌至 0 的现象;某个业务的在线人数在 10 万左右波动,突然下跌到了 5 万等等。

什么是时间序列?

时间序列是指一组按照时间发生先后顺序进行排列的数据点序列,通常一组时间序列的时间间隔为一恒定值(如 1 分钟、5 分钟)。

当前开源 Prometheus 是如何做异常检测的?

目前开源版本的 Prometheus 检测能力还是基于设定阈值规则方式进行,而这种依赖阈值设定的方式就引出了以下问题。

常见问题

问题 1:面对数以万计的指标数量,如何快速又合理的完成检测配置?

由于不同类型指标的含义差别大,对应设定的合理阈值也不太一样。哪怕是同一种类型指标,由于业务状态不一样,往往不能用相同阈值。因此,在配置阈值时,运维人员需要根据对应的业务情况去配置自认为合理的阈值。由于运维人员认知水平和工作经验存在差异,因此不同人员配置的阈值也存在差别。其次,很多指标没有明确合理的范围定义,这导致很多阈值配置都是“拍脑袋”确定的,随机性比较强。

举例来说:某在线人数指标, 必须仔细观察分析历史指标曲线的数值分布和变化趋势,才能设置出合理的阈值。

问题 2:随着业务的演化,如何进行检测规则的维护?

对于相对稳定的业务,业务指标长期处于稳定状态,这种情况下配置的阈值可以发挥比较长时间作用。但对于时刻变化的业务, 伴随业务的不断演化,指标的水位和走势也是在不断变化。这些变化很容易导致一开始设定的阈值检测,经过一段时间则不太满足检测现状。这时候则需要运维专家定期核查检测阈值是否还符合当前检测需求,对不合理的配置进行维护与修改。因此,静态阈值方式存在着维护成本高的问题。

举例来说:某 IO 吞吐量一开始稳定在 1 万的量值附近波动,一开始设定了检测阈值为超过 2 万则告警。但随着业务发展,IO 吞吐量已稳定在 2.5 万左右,这时候一开始设定的阈值就导致了源源不断的告警叨扰。

问题 3:数据质量不佳如何解决?

数据质量不佳表现为几种具体现象:采集延迟大、数据缺失值多、数据毛刺点比较多(反应在曲线上则是不够平滑)。对于前面俩种, 更多的是从采集、聚合侧进行针对性优化。ARMS-Prometheus 持续在采集能力进行优化。而对于数据毛刺点很多的数据质量问题,静态阈值方式无法有效的规避。而在 ARMS- 托管版 Prometheus 的智能算子中, 我们则针对多毛刺点进行了有效的识别,保证了毛刺点不会形成无效告警, 减少用户侧/运维侧形成叨扰。

阿里云 Prometheus 监控是怎么解决这些问题

面对以上问题,阿里云 Prometheus 监控的检测配置能力除了支持原生的设定阈值检测方式,全面新增支持模板设定检测阈值方式与智能检测算子方式。

业务价值 1:高效高质量的告警配置

(1)针对明确的应用场景配置检测规则,阿里云 Prometheus 监控提供成熟的告警配置模板化,用户无需人工设定阈值, 只需要选择对应的模版即可。
例如:机器指标场景下, 配置“机器指标的 cpu 使用率 >80%”的模板。模板的方式解决了配置中明确异常且业务比较稳定的应用场景痛点。

(2)针对不明确的指标场景或不好设定的业务指标场景,则推荐使用智能检测算子功能。

例如需要对某在线人数指标设定阈值, 这时需要花费很长的时间观察历史曲线状态才能配置出合理的阈值。这种场景下用户可以直接选择智能检测算子。

业务价值 2:自适应追踪业务变化,大大降低检测阈值维护成本

阿里云 Prometheus 监控的智能检测算子功能,通过设定参考历史数据长度的参数,模型可以自适应的追踪指标趋势的变化,无需人工定期去审查配置规则。

业务价值 3: 对于质量不佳,缺失值/毛刺点过多的指标也可以实现智能检测

在智能检测算子功能中, 如果历史数据出现了缺失,算法可以线性插值,多项式插值等多种方式,自动填补缺失值。

对于不平滑的指标曲线检测,智能检测算子也自适应的选择针对该场景的最优模型进行检测,保证整体的检测效果。

如何应用在具体业务场景里

水位突增/突降型指标:某业务的 qps 指标

在业务开始设定阈值时, 通过观察很有可能设定阈值不超过 150。但随着业务迭代,qps 指标也会发生各种各样的变化。从指标上则表现为:出现阶段性的突增至某个值,然后平稳的状态。这种情况下,设定的静态阈值很难持续满足检测需求。另外一方面, 稳定情况也会出现突发的下跌, 只设置上限的静态阈值是检测出这种下跌情况的。这种情形下, 智能检测算子则可以自适应的跟踪业务水平的变化,智能识别业务的突增或突降。

周期性的指标:

在指标画像模块,如果识别出当前的指标具有一定的周期,则会从中提取出对应的周期值、周期偏移值, 以及整体趋势曲线。在原始的时间序列去除周期性、趋势性后,利用残差进行异常检测。以上图的周期指标为例, 11.30 分左右的周期与其他周期出现明显差别。传统静态阈值很难去解这类场景下的检测问题, 而利用智能检测算子,则可以识别出该种异常。

趋势破坏型的指标:

此外,还有一种常见类型的指标异常是,在某一阶段内, 指标一直呈现上升(或者下降)趋势。在某一个节点出现突发性的趋势破坏,局部呈现了和整体趋势不一样。这种异常类型也是很常见的,但是静态阈值很难设定来解决这种情形。而智能检测算子则针对这种类型可以进行准确了的识别异常。

最佳实践

阿里云Prometheus监控内使用流程

目前阿里云 Prometheus 监控已经支持智能检测算子功能,只需登陆 ARMS-Prometheus/grafana,输入对应的 PromQL 即可。

算子定义

"anomaly_detect": {Name: anomaly_detect",
ArgTypes: []ValueType{ValueTypeMatrix, ValueTypeScalar},
ReturnType: ValueTypeVector,
},
输入:指标的时间序列,类型为range vector;检测参数,使用默认的3即可
输出:异常返回1, 正常返回0

使用 case:

anomaly_detect(node_memory_free_bytes[20m],3)
  1. 输入的必须是 range vector,因此需要在指标名称后增加[180m], 时间范围默认选择 180m,参数默认选择 3
  2. 如果先进行了其他聚合函数操作,则需要[180m:],使之变为 range vector,如下:anomaly_detect(sum(node_memory_free_bytes)[180m:],3)

使用示例:

step 1: 登陆到 ARMS-Prometheus 或 Grafana 中选择对应的 Prometheus 数据源

选择对应的数据源:

step 2: 选择指标, 并查看

step 3: 输入异常检测算子

关于 Prometheus- 智能检测算子

阿里云 Prometheus 监控智能检测算子,总结业界数十款领先的算法方案实践设计而成。针对常见的指标类型建立了指标画像,并自适应的选择最佳模型去进行检测计算。每一条指标数据输入模型后, 模型首先会对当前的指标建立指标画像,包括平稳性,抖动性,趋势性,周期性,是否为特殊节假日/活动等。根据这些画像特征构建之后, 模型自适应选择最优一种或者多种算法组合来解当前的指标检测问题,保证了整体效果最优。目前已经支持的功能包括:突增检测、毛刺检测、周期识别(识别周期性、周期的偏移)。

通过阿里云 Prometheus 监控中集成智能检测算子, 我们希望给用户可以提供开箱即用、持续迭代更新的智能检测服务。目前用户可以在阿里云 Prometheus 监控中查看并使用智能检测算子,而基于 ARMS 的原生配置智能检测告警功能和 Grafana 动态展示将在近期推出。

如何在实际场景中使用异常检测?阿里云Prometheus智能检测算子来了相关推荐

  1. docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS

    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...

  2. 场景化封装,一站式使用,普惠AI集成 ——阿里云发布智能媒体管理产品

    摘要: 导语 近日,阿里云发布了智能媒体管理(Intelligent Media Management)服务, 通过离线处理能力关联授权的云存储,提供便捷的海量多媒体数据一键分析,并通过该分析过程构建 ...

  3. 5种主流周界安防检测技术,EasyCVR智能检测视频平台可以实现哪些应用?

    周界安防旨在阻止外部入侵,因此,它对于从关键基础设施到商业和住宅场所的各种终端用户都很重要.周界安防需要通过传感器检测威胁,每个传感器都有独特的检测方法,目前市场上比较主流的周界安防检测技术包括以下5 ...

  4. 仓库处理中 无法修改_阿里云自研数据仓库 AnalyticDB 再捧 TPC 全球冠军

    作者 | 马超责编 | 伍杏玲出品 | CSDN(ID:CSDNnews) 5月14日,TPC 官网正式公布,阿里云自研的 AnalyticDB 通过了TPC-DS全流程测试,将前世界纪录的性能提升了 ...

  5. 引领高并发直播场景进入毫秒时代,阿里云发布超低延时直播服务

    近日,阿里云上线超低延时直播服务RTS(Real-time Streaming),该服务在视频直播产品的基础上,进行全链路延时监控.传输协议改造等底层技术优化,支持千万级并发场景下的毫秒级延迟直播能力 ...

  6. 中国航发牵手阿里云共同打造:航空新引擎

    云,可以说是航空工作者最熟悉的事物之一,但云计算.云服务,对于中国航空人来说还是创新性的尝试.中国航发集团牵手阿里云深度合作,引入企业级互联网架构平台探索云端采购新模式,让全新的云上采购平台可以支持灵 ...

  7. 阿里云服务器被检测到有wa kuang程序

    目录 参考 1.首先进入自己的云服务器 top // 查看占用CPU最高的进程 ls -l /proc/xxx/exe // 查看挖矿进程的执行文件链接,xxx表示该进程的PID   rm -f /r ...

  8. apache camel 相关配置_使用apache camel从表中选择数据-问答-阿里云开发者社区-阿里云...

    我希望能够使用Camel连续轮询数据库以从表中选择数据.我已经在我的Spring Boot应用程序中配置了Camel.这是我正在使用的配置 build.gradle: implementation ' ...

  9. maven打包忽略注解_maven打包后pom.properties中的注释问题-阿里云开发者社区

    使用maven打包后,在META-INF目录下会生成pom.properties文件(当然可以使其不生成).这个文件包含了包的Id信息,此外它最开始有两行注释,看起来是这样的 #Generated b ...

最新文章

  1. 同步电路设计的一些问题(时序分析基础,同步电路设计规则)
  2. linux卸载桌面Ubuntu,Ubuntu安装卸载KDE桌面之折腾记
  3. boost::integer::gcd和boost::integer::lcm用法的测试程序
  4. 简述java规范要注意哪些问题_JAVA学习:JAVA基础面试题(经典)
  5. unity shader 编辑器扩展类 ShaderGUI
  6. 在vm中安装linux虚拟机,如何在vm虚拟机中安装linux
  7. 如何用oracle查看内存使用情况,oracle运维08内存使用情况分析查看
  8. 音视频同步原理[ffmpeg]
  9. 大数据技术存在局限 经验直觉不可或缺
  10. 二手车没有车险能过户吗?
  11. 从0开始html前端页面开发_调用com组件(ActiveX)
  12. 多益网络校招 —— web前端笔试题
  13. uni-app,H5抽奖
  14. 汇新云智慧城市解决方案——以区块链加速智慧城市建设
  15. 朝阳群众举报阿里996造成交通严重堵塞!
  16. SARS-CoV2_ARTIC_Illumina新冠病毒分型和突变分析
  17. 用一张PPT让面试官在100个人里面记住你
  18. 解决click事件在移动端操作延迟300ms问题和点击时穿透问题
  19. Revit二开 VS附加Revit时闪退程序
  20. 什么是RBER(残余误比特率)FER(帧删除率)BER(误比特率)

热门文章

  1. 逆向python生成的可执行文件
  2. 5、学MySQL前必须要了解的数据库专业术语
  3. P5367 【模板】康托展开
  4. 【PAT乙级】1005 继续(3n+1)猜想 (25 分)
  5. C语言经典算法 21-30
  6. Keepalived的VRRPD配置
  7. C#读取与修改XML文档
  8. MySQL事务的幻读
  9. cmd命令快速启动、暂停和关闭sql server服务
  10. dubbo provider异步_Dubbo支持什么协议?与SpringCould相比它为什么效率要高一些?