SLS机器学习服务最佳实践:流式智能巡检-阿里云开发者社区

开发者社区> 人工智能> 正文

SLS机器学习服务最佳实践:流式智能巡检

简介: 一、背景 异常检测是智能运维系统中的很重要的一环,在云上针对各个服务时序指标的巡检成为监控服务质量的重要手段。在云平台上,系统和服务的指标项太多、时序形态丰富、异常类型难以枚举,单单的依靠人工规则来做异常发现很达到预期效果;同时,现有的巡检方法多采用SQL发起机器学习函数的方式,拉取部分数据做模型训练,输出结果,在海量的指标数据下反应延迟,成本昂贵,很难充分学习数据的特征而达到很好的效果。 S

一、背景

异常检测是智能运维系统中的很重要的一环,在云上针对各个服务时序指标的巡检成为监控服务质量的重要手段。在云平台上,系统和服务的指标项太多、时序形态丰富、异常类型难以枚举,单单的依靠人工规则来做异常发现很达到预期效果;同时,现有的巡检方法多采用SQL发起机器学习函数的方式,拉取部分数据做模型训练,输出结果,在海量的指标数据下反应延迟,成本昂贵,很难充分学习数据的特征而达到很好的效果。

SLS团队,对现有的机器学习方法改进提升,采用流式学习的方式,将机器学习函数变为智能化的机器学习服务,让模型在历史数据流上不断记忆,充分学习样本特征,实时反馈,更进一步降低用户的使用门槛。大家只需发起服务,配置一定的告警阈值,即可实现对指标数据的实时智能巡检。

二、实际业务痛点

  • 指标太多
  • 监控对象太多
  • 阈值参数太多
  • ...

在时序监控场景中,用户往往先确定监控对象,并通过其历史数据,结合业务经验,得到不同组的阈值参数,通过各种手段(同比、环比、连续触发几次等)进行监控,往往一个监控对象要设计4~5条监控规则,并配置不同的参数。还有更大的问题,各个参数阈值无法快速的复用到不同的类似观测对象中,当观测对象的规模达到数千,甚至上万后,传统的配置效率底下,无法满足在大规则时序指标数据下的监控需求。流式算法具有天然的优势可以解决上面的问题,用户只需要发起一个机器学习服务,模型自动拉取数据,实时训练,实时反馈(通俗地说:“来一个点,学习一个点,检测一个点”),在极大的降低成本的同时,实现对每一条线的单独建模,单独分析,单独模型参数保存,实现时序异常检测的“千线千面”。

SQL请求式智能巡检截屏2020-07-01 下午12.21.27.png

服务化流式智能巡检截屏2020-07-01 下午12.23.18.png

我们利用Logtail去采集K8S宿主机的秒级指标数据,将数据写入到SLS中去,利用人工经验对这份数据的聚合和采样后,提取出如下8个黄金指标,配置分钟粒度的流式告警。

观测指标

指标名称

系统态CPU使用百分比

cpu_sys

CPU空闲时IO请求时间

cpu_iowait

用户态CPU使用百分比

cpu_user

内存使用情况

mem_usage

存储空间使用情况

disk_usage

使用的文件描述符的个数

fd

网络包重传数量

retrans

系统负载

load

三、功能介绍

SLS 提供了三大机器学习功能供大家使用,具体可以参考如下官方文档:

https://help.aliyun.com/document_detail/172129.html

流式统计算法异常检测
流式树算法异常检测
流式图算法异常检测

三种功能分别采用不同类型的算法,对指标时序进行异常检测:

  1. 流式统计算法异常检测主要采用核密度估计等统计学习算法
  2. 流式树算法异常检测主要采用RRCF等树(森林)学习算法
  3. 流式图算法异常检测主要采用Time2Graph等图学习算法

以上三种方法可以针对不同类型的时序异常进行检测,包括:

 时序变点异常

变点.png

 时序折点异常

折点.png

 时序周期异常

周期.png

不同的算法功能对不同的异常类型各有擅长,具体如下表所示:

 

变点异常

折点异常

周期异常

流式统计算法异常检测

流式树算法异常检测

流式图算法异常检测

大家可以根据自己数据的形态,选择相应的功能进行时序智能巡检。有关算法的具体原理可以参考之前的文章,大家也可以去网上查阅相关资料自行阅读。接下来主要给大家介绍下在SLS中该怎么使用这些功能。

接下来主要给大家介绍下在SLS中该怎么使用这些功能。

 

四、案例实战

我们以一个K8S集群的机器指标数据的案例作为例子,描述如何使用SLS机器学习服务进行指标数据的智能巡检。

4.1 数据导入

我们拉取监控中的机器指标数据,具体的操作步骤可参考:《在SLS中时序指标数据的巡检》

接入数据后,我们可以得到一个按照固定的频率写入SLS中的LogStore的数据,我们可以订阅这个LogStore的数据,并告知算法该数据的Schema,选择需要的检测算法,就可以完成针对数据中的实例(比如:访问日志中的域名、机器指标数据中的机器)进行巡检。

  • 以K8S监控数据为例,一个数据写入的Agent(比如:Python SDK)按照一个固定的频率(60秒)将200多台机器的多维度指标分别写入到LogStore中去,如下图中所展示的:每隔60秒,将每台机器的各种指标,按照[Region, Machine, Index_name, Value]的方式写入到LogStore中;

截屏2020-06-29 下午1.58.18.png

  • 这里每条日志的格式为:

   截屏2020-06-28 下午3.14.21.png

这里, region 表示一个集群,machine 表示一台机器,index_name 表示一个指标,这里我们对8种常用的指标进行监控和分析,包括CPU、内存、负载、网络流量等。 value 表示具体的指标数值。

  • 我们把要进行分析的字段加上索引,开启统计:

截屏2020-06-29 下午5.31.39.png

4.2 参数配置,发起服务

当指标数据接入成功之后,我们可以开启机器学习服务对时序数据进行智能巡检

4.2.1 打开数据加工

  • 我们开启 “数据加工”模式,经过如下截图中的操作步骤

image.png

  • 来到创建数据加工规则的界面,我们要保证填写的AK信息具有对当前LogStore具有可读且能创建消费组的权限,具体操作,请参考《RAM自定义授权场景》;同时在存储目标中,目前仅支持写入到本Project下面,已将创建好的LogStore中,且存储目标中的AK要具有写入权限

image.png

  • 下一步,选择“加工范围”,这里的加工范围所对应的时间是数据达到服务器端的时间,接着就到了模型参数配置部分,针对各个参数的含义我们做一个介绍:
    • 时间列:表示某条日志的时间戳,单位为秒;一般选择 __time__ 这个字段
    • 时间粒度:表示数据写入的频率,这里要求数据对象写入LogStore的频率一致。在这个案例里是60秒
    • 实例列:表示能唯一标记巡检对象的字段,要求是text文本列,可多选。这个案例里是 region machine index_name ,对应了某地区某机器下的某指标。
    • 特征列:表示某巡检对象所对应的特征,要求为数值列,可多选。这个案例里是 value ,即具体的指标数值。

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

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章