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

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 异常检测是智能运维系统中的很重要的一环,在云上针对各个服务时序指标的巡检成为监控服务质量的重要手段。在云平台上,现有的巡检方法多采用SQL发起机器学习函数的方式,拉取部分数据做模型训练,输出结果,在海量的指标数据下反应延迟,成本昂贵,很难充分学习数据的特征而达到很好的效果。SLS团队,对现有的机器学习方法改进提升,采用流式学习的方式,将机器学习函数变为智能化的机器学习服务,让模型在历史数据流上不断记忆,充分学习样本特征,实时反馈,更进一步降低用户的使用门槛。大家只需发起服务,配置一定的告警阈值,即可实现对指标数据的实时智能巡检。

一、背景

异常检测是智能运维系统中的很重要的一环,在云上针对各个服务时序指标的巡检成为监控服务质量的重要手段。在云平台上,系统和服务的指标项太多、时序形态丰富、异常类型难以枚举,单单的依靠人工规则来做异常发现很达到预期效果;同时,现有的巡检方法多采用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团队结合目前国际主流的流式异常检测算法,包括RRCF、HTM、Skyline等流式算法,Time2Graph等最新时序建模方法,自研三大流式巡检功能,提供给大家使用。下面给大家做详细介绍,具体可以参考SLS官方文档

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

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

  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 ,即具体的指标数值。

image.png
之后就可以选择相应的算法功能进行异常检测。

4.2.2 配置模型
截屏2020-06-30 下午7.54.18.png
模型参数配置如上图所示,所有的操作为可视化操作。大家输入好对应的选项,选择具体要使用的模型,便可以开启机器学习服务。

我们以流式图算法异常检测作为例子来发起机器学习服务。具体的数据形式
截屏2020-06-30 下午7.55.53.png
时间列是 __time__ ,数据是每隔60s采集一个点,从 region - machine - index_name 唯一确定了一条指标时序(地区-机器-指标),其值是 value 。这里,如果大家知道所要巡检数据的上下界,可以直接填入,当数据超出边界时,会直接判断为异常;若大家不明确,这里可以不填。

我们选择 流式图算法异常检测 这个模型,这里有三个参数需要我们填写:时间粒度是60秒,算法检测间隔与时间粒度一致,即来一个点检测一个点。流式图算法异常检测采用Time2Graph算法,数值默认划分为5段。这里,分成多少段大家可以根据自己的巡检需求来进行设定,一般,分段越少,模型对异常越不敏感,报出的异常点就越少;分段越多反之。周期长度默认长度2880个点,即在60秒采集一个点的情况下,周期长度为48小时;大家如果知道数据明确的周期长度,可以更改。

其他模型的参数配置基本类似,以上,参数配置好后,我们便可以发起机器学习服务,对指标数据进行巡检。那么,我们如何看到巡检的结果呢,接下来我们将以SLS的Dashbord功能为例,帮助大家直观的看到模型巡检的结果。

4.3 Join结果,DashBoard可视化

当服务发起后,没过一个检测间隔,算法便会将结果写入到大家制定的存储目标下,如下面的例子:
截屏2020-06-28 下午3.26.36.png
结果的 __time__ 与来源指标数据的 __time__ 保持一致。写出结果中,包含了能指示一条时序的 entity 信息,数据来源的 meta 信息,以及模型判断的result 信息。 result 中包含了模型判断的是否异常的flag is_anomaly ,是以 score 大于一定阈值筛选出的异常点。

之后,通过 Join 指标数据的LogStore与结果输出的 LogStore,我们可以将异常结果打标到时序曲线中。首先我们开启结果输出的LogStore的索引:
截屏2020-06-29 下午5.45.19.png
SQL join 的案例如下:

  • 过滤出某地区某机器的某指标异常检测结果(这里目标写入的LogStore为 ml-detector-res )
* | select time, score, index_name, machine, region from
(select time, cast(score as double) as score, index_name, machine, region from(
    (select __time__ as time, 
           json_extract_scalar(result, '$.score') as score, 
           json_extract_scalar(entity, '$.index_name') as index_name, 
           json_extract_scalar(entity, '$.machine') as machine, 
           json_extract_scalar(entity, '$.region') as region, 
           job_name from ml-detector-res) 
    HAVING score > 0.75) where region = 'aysls-pub-cn-beijing-k8s' and 
                               machine = '192.168.***.***:***' and 
                               index_name = 'mem_usage'

这里,0.75是一个异常分数阈值,代表着模型判断出的异常程度,大家可以自行设定

  • 在原指标数据LogStore中过滤出对应的时序数据
SELECT __time__ - __time__ % 60 AS time, AVG(value) AS value
FROM log
GROUP BY time

注意,这里避免有重复数据,我们对时序数据按时间做一次聚合。这里数据的时间间隔是60s一个点,大家可以根据自己的数据格式自己定义。

  • 有了异常结果打标与时序数据,我们可以通过join 将异常结果整合到时序中,从而帮助大家看到模型的判断。具体的案例如下:
region: "aysls-pub-cn-beijing-k8s" and 
machine: "192.168.***.***:***" and index_name: "mem_usage" | 
select time, value, 
             case when score is null then 0 else score end as score, 
             case when score is null then 0 else 1 end as label from 
        (select A.time, A.value, B.score, 1 as label from 
             ((select __time__ - __time__ % 60 as time, avg(value) as value from log 
            group by time ) as A left join 
           (select time, cast(score as double) as score, 
                     index_name, machine, region from 
                   (select __time__ as time, 
                           json_extract_scalar(result, '$.score') as score, 
                           json_extract_scalar(entity, '$.index_name') as index_name, 
                           json_extract_scalar(entity, '$.machine') as machine, 
                           json_extract_scalar(entity, '$.region') as region, 
                           job_name from ml-detector-res) 
                   HAVING score > 0.75) where region = 'aysls-pub-cn-beijing-k8s' and 
                               machine = '192.168.***.***:***' and 
                               index_name = 'mem_usage') as B 
       on A.time = B.time) 
        ) order by time limit 100000

执行以上SQL,可以得到如下表格:
截屏2020-06-29 下午4.24.49.png
点击线图,进行配置,就可以得到有异常标注的时序曲线:
截屏2020-06-29 下午4.44.42.png
选择X轴和Y轴,以Label作为信息配置散点列及散点大小:
截屏2020-06-29 下午4.45.29.png
之后我们就可以得到有模型异常标注的时序曲线了。

对于海量的机器,及其指标,我们可以在DashBoard中配置一些过滤器(Filter)以及交互行为,从而更方便的查看模型智能巡检的结果:
a. 选择SQL中要替换的内容,生成对应的变量
截屏2020-06-29 下午4.51.03.png截屏2020-06-29 下午4.51.21.png
b. 通过 SQL 找出可选的实例,比如可选的集群、机器、指标等信息,配置交互行为
截屏2020-06-29 下午4.52.20.png
c. 配置过滤器,用户自动调节异常分数,实现用户自己所需要的不同敏感程度的异常检测
截屏2020-06-29 下午4.51.53.png
通过上述配置,我们最终可以得到针对k8s集群的智能巡检分析报表
截屏2020-07-01 下午2.28.06.png

4.4 配置告警,实时巡检

用户在得到巡检报告报表之后,可以查看模型输出的异常检测结果。用户可以根据自己的告警需求,设置告警阈值,进而得到智能化的告警通知。具体的告警配置请见:https://help.aliyun.com/document_detail/98379.html?spm=5176.2020520112.0.0.e5e034c0Hizt6q

联系我们

纠错或者帮助文档以及最佳实践贡献,请联系:笃林
问题咨询请加钉钉群:
477c776b40abf1fdd879c8b73334c5a0b7276069.jpeg

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
5月前
|
SQL 传感器 人工智能
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
阿里云日志服务(SLS)推出智能分析助手 SLS SQL Copilot,融合 AI 技术与日志分析最佳实践,将自然语言转换为 SQL 查询,降低使用门槛,提升查询效率。其具备原生集成、智能语义理解与高效执行能力,助力用户快速洞察日志数据价值,实现智能化日志分析新体验。
347 1
|
5月前
|
SQL 传感器 人工智能
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。我们将带你深入了解,这一智能分析助手如何从用户真实需求出发,融合前沿 AI 能力与 SLS 十余年日志分析最佳实践,打造出面向未来的智能化日志分析体验。
510 45
|
5月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
552 1
日志收集和Spring 微服务监控的最佳实践
|
5月前
|
负载均衡 监控 安全
5 个 IIS 日志记录最佳实践
IIS日志记录是监控Web服务器性能与安全的关键。本文介绍启用日志、应用池配置、负载均衡、敏感数据防护、日志集中管理及保留策略等五大最佳实践,助力高效分析与合规审计。
369 1
|
9月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
981 54
|
9月前
|
机器学习/深度学习 数据采集 人工智能
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
随着Web技术发展,动态加载数据的网站(如今日头条)对传统爬虫提出新挑战:初始HTML无完整数据、请求路径动态生成且易触发反爬策略。本文以爬取“AI”相关新闻为例,探讨了通过浏览器自动化、抓包分析和静态逆向接口等方法采集数据的局限性,并提出借助机器学习智能识别AJAX触发点的解决方案。通过特征提取与模型训练,爬虫可自动推测数据接口路径并高效采集。代码实现展示了如何模拟AJAX请求获取新闻标题、简介、作者和时间,并分类存储。未来,智能化将成为采集技术的发展趋势。
242 1
智能嗅探AJAX触发:机器学习在动态渲染中的创新应用
|
8月前
|
人工智能 监控 测试技术
云上AI推理平台全掌握 (1):PAI-EAS LLM服务一键压测
在AI技术飞速发展的今天,大语言模型(LLM)、多模态模型等前沿技术正深刻改变行业格局。推理服务是大模型从“实验室突破”走向“产业级应用”的必要环节,需直面高并发流量洪峰、低延时响应诉求、异构硬件优化适配、成本精准控制等复杂挑战。 阿里云人工智能平台 PAI 致力于为用户提供全栈式、高可用的推理服务能力。在本系列技术专题中,我们将围绕分布式推理架构、Serverless 弹性资源全球调度、压测调优和服务可观测等关键技术方向,展现 PAI 平台在推理服务侧的产品能力,助力企业和开发者在 AI 时代抢占先机,让我们一起探索云上 AI 推理的无限可能,释放大模型的真正价值!
|
8月前
|
缓存 人工智能 负载均衡
PAI 重磅发布模型权重服务,大幅降低模型推理冷启动与扩容时长
阿里云人工智能平台PAI 平台推出模型权重服务,通过分布式缓存架构、RDMA高速传输、智能分片等技术,显著提升大语言模型部署效率,解决模型加载耗时过长的业界难题。实测显示,Qwen3-32B冷启动时间从953秒降至82秒(降幅91.4%),扩容时间缩短98.2%。
|
10月前
|
机器学习/深度学习 数据采集 存储
动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
本文介绍了一种基于机器学习的智能嗅探系统,用于自动判定动态渲染页面中AJAX加载的最佳触发时机。系统由请求分析、机器学习判定、数据采集和文件存储四大模块构成,采用爬虫代理技术实现高效IP切换,并通过模拟真实浏览器访问抓取微博热搜及评论数据。核心代码示例展示了如何调用微博接口获取榜单与评论,并利用预训练模型预测AJAX触发条件,最终将结果以JSON或CSV格式存储。该方案提升了动态页面加载效率,为信息采集与热点传播提供了技术支持。
287 15
动态渲染页面智能嗅探:机器学习判定AJAX加载触发条件
|
10月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
623 51

相关产品

  • 日志服务