如何使用下探分析定位多维指标异常根因

简介: 在系统运维过程中,关键指标的异常变化往往意味着服务异常、系统故障等等。因此我们往往会对一些关键指标进行自动巡检,例如异常检测和时序预测等等,及时感知指标的异常变化,了解系统的健康状况。对于复杂系统来说,感知到异常后直接在系统层面根因定位可能是十分困难的。因此我们需要一些手段缩小问题的排查范围或者直接定位问题,如使用 trace 根因分析等等。阿里云日志服务上线了下探分析功能,用于多维指标异常根因定位。我们将介绍该功能的使用场景和使用案例。

使用场景

很多时序指标可以分解为若干个维度,每一个维度都具有不同的值域。例如网站的访问流量可以按照流量的来源省份分解,如分解为来自河南的访问流量和来自广东的访问流量等等;也可以按照流量的来源渠道分解,如分解为来自 PC 端的流量和来自移动端的流量。也可以按照多个维度的组合对时序指标进行分解,如来自河南的移动端的流量和来自广东的 PC 端的流量等等。如果时序指标可以划分成 n 各维度 dim1, dim2, ... , dimn, 每个维度分别有 m1, m2, ... , mn 个可选值。那么时序指标可以分解为 m1 x m2 x ... x mn 个最细粒度的子时序指标。以访问流量举例,省份维度有 33 个可选值,渠道维度有 2 个可选值,那么总计有 66 个子时序指标。全局的指标是这些子时序指标聚合而成的。如果时序指标可以分解成很多维度,或者某些维度的可选值有很多,那么会有很多子指标序列。全局序列的异常变动往往是由若干个子序列的异常变动导致的。如果我们分别对每一子序列都配置一个异常检测任务,那么这些任务的配置量和维护成本都会很高。往往我们都只对若干聚合后的关键指标配置异常检测任务,如监控网站访问的总流量(不区分其各个维度)。这种情况下如果总流量检测到异常,由于其维度组合数量很多,我们很难人工判断到底是哪些省份,或者是哪些渠道,或者是哪些省份的哪些渠道访问流量异常导致了全局的流量异常。为了处理这种全局指标出现异常时,怎样快速定位异常维度根因的问题,我们上线了下探分析功能,帮助您自动定位多维指标场景的异常根因,缩小故障排查范围。样例总览图如下

image.png


使用案例

下面我们介绍如何使用日志服务提供的智能巡检服务和下探分析服务,对时序指标的异常变动进行多维指标的根因下探。智能巡检任务下探分析任务的详细配置请参考官方帮助文档。我们案例中使用的数据包括三个维度,attr_a,attr_b 和 attr_c,每个维度有 5 个可选值,即有 125 个最细粒度的子指标序列。


智能巡检任务配置

首先我们使用智能巡检任务对指标进行异常检测,由于我们后续使用下探任务进行多维度的根因定位,因此我们只需要对总的序列配置异常检测任务即可。其中主要配置步骤是通过 SQL 构造待检测的指标序列,SQL 需要返回时间列、实体列和指标列,以便智能巡检任务可以使用这些列构造指标序列

image.png

从构造指标序列的 SQL 中我们直接讲各个维度组合的子序列的指标聚合,即仅对总指标序列进行异常检测。其他参数配置参考智能巡检任务帮助文档。

后续的下探分析任务使用智能巡检的检测结果作为异常事件触发多维指标的根因定位。智能巡检的检测结果写入到指定的 internal-ml-log 日志库中。检测结果的  json 形式大致如下,我们对构造异常事件所需的字段简要介绍一下

{
"__tag__:__data_type__": "anomaly_detect",
"__tag__:__instance_name__": "29030-f13218bd704462b86a8b64e27881fa32",
"__tag__:__job_name__": "etl-1681354396022-265300",
"__tag__:__model_name__": "13fd1a10d5921e99bd06b81590017ed6",
"__tag__:__schedule_id__": "f13218bd704462b86a8b64e27881fa32",
"algo_type": "supervised_anomaly_detection",
"entity": {
"entity": "artificial"  },
"meta": {
"project_name": "sls-ml-demo",
"logstore_name": "artificial-series",
"topic": ""  },
"result": {
"dim_name": "metric",
"score": "0.0012267196",
"anomaly_type": "None",
"is_anomaly": false,
"value": 3244.0964077708954  },
"version": "v0.3"}

字段

说明

__tag__:__data_type__

标识数据的类型,值为 anomaly_detect 时表示是异常检测结果,数据的写入时间,__time__ (日志服务保留字段),是异常事件发生的时间

__tag__:__job_name__

标识智能巡检任务的名称

result.score

标识事件的异常程度,取值为 0 ~ 1,取值越大,异常程度越高

进入配置的智能巡检任务的仪表盘页面,我们可视化的查看检测到的异常事件(异常分数 result.score 大于设置的阈值的事件),如下所示智能巡检任务检查到若干指标的异常变动

image.png

检测到异常时,我们一般会参考其他的系统指标和服务的运行日志等等,通过各种线索判断系统是否出现异常、确定异常的根因。在复杂系统中这个根因定位过程缓慢繁琐,如果有方法可以自动的缩小异常的排查范围,那么将有效的提高对于服务的运维能力。如果像案例中的检测的指标可以分解为多个维度的子指标序列,那么我们可以尝试使用下探分析任务确定导致异常的根因维度。


下探分析任务配置

进入日志服务智能异常分析的下探分析页面,点击右上方的立即创建创建下探分析作业。


数据配置

进入作业配置,配置作业名称后进入数据配置页面。数据配置包括异常事件源配置和多维指标序列配置。下探分析作业统一使用 SQL 查询语句从日志库中获取这两类数据。


多维指标序列配置

与智能巡检任务配置类似,我们首先需要设置多维指标序列数据源的 project、日志库。之后我们配置 SQL 获取最细粒度的维度组合及其每一时刻的指标值。即 SQL 的查询结果列包含三个部分:时间列、维度列和指标列,通过 SQL 下探分析任务可以获知某个维度组合在某个时间点的取值是多少。如下所示

image.png

相比智能巡检获取全局指标序列的 SQL,下探分析使用的 SQL 显式的获取了各个维度组合序列。例如数据预览中的第一行表示 “满足 attr_a=a5 且 attr_b=b1 且 attr_c=c4 的指标在 2023-04-14 14:05:00(时间戳 1681452300)的取值是 19.665”。SQL 配置完成后,在数据预览框下方配置哪一列是时间列,哪些列是维度列,哪些列是指标列。除此以外,还需要配置 SQL 的调度粒度,由于在我们案例中数据点每隔5分钟采样一次,所以我们配置粒度为300秒(5分钟)。这样下探分析任务会每隔5分钟运行一次配置的 SQL 获取新的多维指标。建议在 SQL 中对待分析的序列按照一定的时间窗口进行聚合,如3分钟,5分钟等,粒度设置为时间窗口的长度即可。


异常事件源配置

在完成配置多维指标序列后,我们需要对异常事件源进行配置。下探分析任务从事件源获知什么时刻出现了异常事件,然后触发对于异常事件的多维指标异常根因定位。点击下方的添加事件配置创建事件源。异常事件使用 SQL 语句从日志库中获取的,我们首先需要配置 project 和日志库。由于我们使用智能巡检任务的检测结果,所以我们配置 project 为巡检任务使用的 project,日志库为保存检测结果的 internal-ml-log 日志库。之后我们通过 SQL 获取检测到的异常事件时间和异常,如下

*and __tag__:__job_name__: etl-1681354396022-265300and __tag__:__data_type__: anomaly_detect |selecttime, IF(score >0.8,true,false)as status
FROM(select    __time__ astime,    cast(json_extract(result,'$.score')asdouble)as score
FROM log
limit all
)limit1000000

在查询分析语句中我们使用 __tag__:__job_name__ 和 __tag__:__data_type__ 字段过滤出配置的智能巡检作业的异常检测结果。在 SQL 部分获取异常的发生事件和异常分数(result.score),只有当异常分数大于 0.8 认为检测到的异常是真实的异常。SQL 的结果列需要至少包含两列,时间列和状态列,只有当状态列取值为 true 或者为正数时,认为在对应时间确实有异常发生。具体配置如下

image.png

如果有多个事件源,也可以通过点击添加事件配置按键继续添加,配置完成后也可以对事件源进行热更新。


算法配置

完成数据配置后点击下一步进入算法配置页面,算法配置项的解释可以参考官方帮助文档。需要关注的是数据延迟配置项,表示下探分析任务在读取数据时需要等待的时间,以秒为单位。如果配置60秒延迟,那么任务需要等到 12:06 再读取 12:00 ~ 12:05 的数据时(延迟一分钟)。这是因为事件源中的异常事件数据写入到日志库中可能有一定的延迟,为了保证下探任务读到异常事件,需要设置其数据延迟大于日志事件的写入延迟。由于智能巡检任务从检测到异常事件到把检测结果写入到日志库大约有60秒的延迟,因此我们设置下探分析的数据延迟为90秒。配置如下

image.png

之后点击下方的完成按键就开始运行下探分析任务了。


下探分析结果说明

点击刚刚配置的下探分析作业,进入分析结果仪表盘。在页面上方选择适当的时间范围、事件源名称和事件发生的时间,就会在下方显示对于这个异常事件的根因定位结果。如果事件时间右侧显示绿色标签 “状态: 成功”,表示下探分析作业定位到了对应的异常事件的根因;如果显示红色标签 “状态: 失败”,表示没有定位到对应异常事件的根因,如下

image.png

如果定位到根因,那么在页面的下方会显示所有可能得根因,以及每一个根因导致异常事件的可能性。通过勾选这些根因,我们可以查看这些根因对于原始序列的影响

  • 正向显示:显示包含这些根因维度的子序列聚合后的序列的形态。如下,可以看到包含异常维度的序列在异常事件发生的时刻也有形态上的异常变化,说明勾选的维度可能确实是异常事件的根因。image.png
  • 反向显示:显示不包含这些根因维度的子序列聚合后的序列的形态。如下,可以看到不包含异常维度的序列在异常事件发生的时刻形态正常、无明显异动,说明勾选的维度可能确实是异常事件的根因。image.png

如果想要增删改事件源,可以点击上方的事件数据管理,进入事件源管理页面。image.png

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
运维 监控 JavaScript
(ARMS-AIOps)一文教你用Attributor算法实现多维下钻分析
常见的AIOps应用路径为:对监控的各种关键性能指标(KPI)进行实时异常检测;对多维指标进行根源分析,快速下钻到异常维度和元素;基于应用拓扑和实时Trace,实现根因定位;结合CMDB、关联等、构建异常根因上下文,帮助快速修复问题。 作为KPI指标, 往往包含了很多维度和元素,最显而易见的则是对每一个维度的元素都进行实时异常检测。 对于维度组合笛卡尔集数量很长的场景, 该方案的成本则有点难以承受
5508 0
|
安全 Unix Linux
操作系统紧急故障修复常见有效方案
操作系统是计算机系统的核心软件之一,如果操作系统出现了紧急故障,将会引起系统的宕机,严重影响业务系统的可用性。因此,对操作系统的紧急故障进行修复是必不可少的。本文将介绍操作系统紧急故障的常见有效方案。
699 1
|
机器学习/深度学习 监控 Web App开发
SLS机器学习最佳实战:根因分析(一)
通过算法,快速定位到某个宏观异常在微观粒度的具体表现形式,能够更好的帮助运营同学和运维同学分析大量异常,降低问题定位的时间。
13255 0
|
2月前
|
存储 SQL Prometheus
图文解析带你精通时序PromQL语法
[阿里云SLS可观测团队发布] 本文通过图文解析深入讲解PromQL的计算原理,涵盖其与SQL的差异、时间线模型、选点机制、聚合函数、窗口函数及常见非预期场景,帮助用户掌握PromQL的核心语法与执行逻辑。
721 10
|
11月前
|
SQL 运维 算法
链路诊断最佳实践:1 分钟定位错慢根因
本文聚焦于线上应用的风险管理,特别是针对“错”(程序运行不符合预期)和“慢”(性能低下或响应迟缓)两大类问题,提出了一个系统化的根因诊断方案。
820 103
|
9月前
|
机器学习/深度学习 运维 自然语言处理
当深度学习遇上故障根因分析:运维人的绝佳拍档
当深度学习遇上故障根因分析:运维人的绝佳拍档
413 17
|
机器学习/深度学习 人工智能 测试技术
阿里云百炼已上线超强推理开源模型QwQ-32B,尺寸更小,性能比肩DeepSeek满血版
通义千问团队推出了320亿参数的QwQ-32B模型,通过大规模强化学习和多阶段训练,在数学、编程及通用能力上达到或超越了DeepSeek-R1等先进模型。QwQ-32B模型已在阿里云百炼上线,支持API调用,用户可通过官方文档了解详细使用方法。未来,团队将继续探索智能体与RL集成,推动人工通用智能的发展。
9197 0
|
JSON 小程序 JavaScript
超详细微信小程序开发学习笔记,看完你也可以动手做微信小程序项目
这篇文章是一份全面的微信小程序开发学习笔记,涵盖了从小程序介绍、环境搭建、项目创建、开发者工具使用、文件结构、配置文件、模板语法、事件绑定、样式规范、组件使用、自定义组件开发到小程序生命周期管理等多个方面的详细教程和指南。
|
存储 人工智能 大数据
Data+AI双轮驱动,阿里云存储服务全面升级
近日,2024云栖大会现场,阿里云宣布对其存储服务进行全面升级,围绕Storage for AI与AI in Storage两大领域,提出“4任意+3智能”的升级方向,揭示存储与AI的双向赋能路径。阿里云存储产品将支持更多AI应用高效创新,同时AI也将助力基础设施迭代,助力企业更好地管理数据资产。
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?