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

阿里云开发者 阿里云开发者     2023-01-30     684

关键词:

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

作者|梵登、白玙

审核&校对:白玙

编辑&排版:雯燕


背景


异常检测作为智能运维(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: []ValueTypeValueTypeMatrix, 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)系统架构面临的三大挑战,看 Kubernetes 监控如何解决?

2)面对疾风吧,如何搭建高协同的精准告警系统



了解更多相关信息,请钉钉扫描下方二维码或搜索钉钉群号(35922870)加入阿里云原生资讯交流群!获取更多相关资讯!





原文链接:https://developer.aliyun.com/article/799536?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

实际场景中,云原生存储面临的7个挑战

作者|EricLi(壮怀)?阿里巴巴云原生存储负责人引言随着云原生应用对可迁移性、扩展性和动态特性的需求,对云原生存储也带来了相应的密度、速度、混合度的要求,所以对云存储基本能力之上又提出了在效率、弹性、自治、稳... 查看详情

如果使用编辑器中的场景加载,如何在 SpriteKit 中检测触摸

】如果使用编辑器中的场景加载,如何在SpriteKit中检测触摸【英文标题】:HowtodetecttouchinSpriteKitifusingasceneloadfromeditor【发布时间】:2021-10-1716:02:44【问题描述】:我创建了SKScene的2个子类,分别称为FirstScene和SecondScene,FirstScene从... 查看详情

如何在laravel中使用阿里云oss

参考技术A你只需要接入腾讯云的CDN就好了,注册帐号,填写域名即可接入。另外,你也可以接入加速乐CDN,速度挺不错的,真心推荐。 查看详情

特征工程--特征变换

...尺度变化函数log2,log10,In,abs,sqrt。支持稠密或稀疏1.2如何使用特征尺度变换阿里数加平台提供在画布区拖拽式的方式进行配置,以算法参数的方式提供给用户,要想使用每个组件,须先了解每个参数的含义2、特征异常平滑2.1... 查看详情

如何检测业务数据中的异常

处理异常值异常值的定义是与均值的偏差超过两倍标准,但是在脏数据中,异常值的情况不止这一种:1)比如一列数据你打开看全部是数字,当你把它当数值型处理,它会报错;那就得仔细查找原因,遇到比较多的情况是一列... 查看详情

阿里云混合云管理平台多region架构

...,经常面临如下几个问题:1、不同地域的云资源如何统一管理,权限分配与用户实际使用场景和组织架构如何匹配。2、当某个数据中心出现故障或灾难时,其他数据中心是否能够正常对外提供服务。3、多个数据... 查看详情

在异常检测中寻找原因

...是哪个参数导致了这种异常。到目前为止,我们正在探索如何做到这一点,但还没有遇到任何事情。任何人都可以就如何做到这一点提出一些算法吗?【问题讨论】:有关于这个问题的消息吗?【参考方案1】:SHAPv 查看详情

如何提高it运维效率深度解读京东云基于自然语言处理的运维日志异常检测aiops落地实践

作者:京东科技 张宪波、张静、李东江基于NLP技术对运维日志聚类,从日志角度快速发现线上业务问题日志在IT行业中被广泛使用,日志的异常检测对于识别系统的运行状态至关重要。解决这一问题的传统方法需要复杂的基... 查看详情

阿里云不同账号之间相同地域的vpc网络互访

今天实际操作了一下,在这篇随笔中记录一下以备忘,主要参考阿里云帮助文档-不同账号下专有网络内网互通。实现场景:账号A的VPC网络中的ECS访问账号B的VPC网络中的ECS与RDS(地域都在华东1),账号A的VPC网段是192.168.0.0/16,... 查看详情

阿里云几种云盘类型如何选择有啥区别

在阿里云服务器选购或维护的过程中,我们会发现,阿里云提供的云盘有好几种,如ESSD云盘、SSD云盘、高效云盘、普通云盘。对于很多刚接触云服务器的人来说,可能不知道这几个类型有啥区别,每种类型的适用的场景等。上... 查看详情

阿里政务云安全实践

...内,面对Tb级的应用层双向流量以及每天上千次的DDoS***,如何实现快速的自动防御、安全检测与应急处置是考验云平台安全防护能力的核心?在进行政务云的安全防护建设上应从整个云的视角来看待安全问题,而非仅从单点;不... 查看详情

jmeter如何控制线程执行?

首先明确如何管理线程执行--使用线程组实现--管理线程的的单位(针对线程按照性质分组管理的结果)--方便管理线程,控制线程执行其次,明确执行的顺序--线程执行顺序1.并发执行--多线程同时执行--线程启动和结束顺序不一致2.顺... 查看详情

阿里云服务器选购云服务器时如何选择实例带宽云盘!

一、实例以新用户关注比较高的阿里云新人特惠活动为例,共享型n4/s6、计算型c5/c6/c6a、通用型g5/g6、内存型r5/r6等多个不同型号的实例规格,不同实例规格适用不同的应用场景,在实际选择的时候,切记不要只看... 查看详情

阿里云服务器选购云服务器时如何选择实例带宽云盘!

一、实例以新用户关注比较高的阿里云新人特惠活动为例,共享型n4/s6、计算型c5/c6/c6a、通用型g5/g6、内存型r5/r6等多个不同型号的实例规格,不同实例规格适用不同的应用场景,在实际选择的时候,切记不要只看... 查看详情

阿里云服务器linux系统中常见的日志介绍

...如下:/var/log/cron可以在cron文件中检查crontab任务调度是否实际执行,执行过程是否发生错误,以及/etc/crontab文件是否有语法错误或编写错误。/var/log/dmesg可以在dmesg文件中检查系统在开机时候内核检测过程所产生的各项信息,包... 查看详情

kafka+flink实现准实时异常检测系统

...决策”,这项技术可以应用于非常多的行业中,比如金融场景中做交易检测、贷款检测;工业场景中做生产线预警;安防场景做***检测等等。根据业务要求的不同,流计算在其中扮演着不同的角色:既可以做在线的欺诈检测,也... 查看详情

recycleview中使用总结以及在项目中的实际运用场景总结(持续更新)

...了许多优秀的第三方开源库。本文总结了在实现项目中是如何运用RecycleView的场景,以及总结了项目中使用时的一些心得,希望对你有所帮助。文章目录1.RecycleView1.1使用RecycleView的优缺点1.2基本用法2.RecycleView中考虑多布局2.1版本... 查看详情

如何使用 DeepFace.detectFace() 实际检测图像中的多个人脸?

】如何使用DeepFace.detectFace()实际检测图像中的多个人脸?【英文标题】:HowtouseDeepFace.detectFace()toactuallydetectaseveralfacesinanimage?【发布时间】:2021-11-1302:42:13【问题描述】:我正在使用深度人脸库来在一张图片中获取多个人脸,Deep... 查看详情