写点什么

苏宁基于服务层知识图谱的真假告警判定

  • 2021-02-26
  • 本文字数:3522 字

    阅读完需:约 12 分钟

苏宁基于服务层知识图谱的真假告警判定

一、概述

在第一篇文章《苏宁基于知识图谱的大规模告警收敛和根因定位实践》中,我们详细阐述了如何构建基础设施层的知识图谱,得到了很多同行的反馈,在实际的线上环境取得了很好的告警收敛效果。但是,线上的异常事件还有另一个非常重要来源:基于 AI 的异常检测。(注:我们的 AI 异常检测复现了亚马逊诸多模型并且进行改进,通过集成算法做母模型取得了与亚马逊模型相当的水准) 异常检测虽然是通向 AIOps 的重要一环,但是由于其预测/检测的不确定性,会存在一定的误告警,当大规模使用在生产环境中时,误告警的数量开始不断叠加,很可能形成告警风暴,这是一个突出及困难的问题。本文的宗旨就是要通过可解释的知识图谱关联出现异常事件的上下文并进行真假告警的判定。此文的另一个贡献就是通过分析服务与服务间的调用关系来构建服务级的知识图谱,同时,在构建过程中,我们借鉴复现并优化了复旦与 eBay 的很有价值 Paper[3]:Graph-Based Trace Analysis for Microservice Architecture Understanding and Problem Diagnosis , 在此特别感谢他们此前做的杰出的工作。

二、痛点及对策

痛点


(1)大规模上线后异常检测形成的误告警很多

例如:某一系统的 3 天指标进行分析,3 日中告警次数为 141 次告警,而用户标记的真实告警仅发生了 7 次。


(2)告警事件中真假样本不均衡

例如:本文分析的某系统 3 天的样本标记数据来看,假告警样本为 134 个,真告警样本为 7 个,进一步分析发现真告警样本的告警类型也是 7 个,也就是每个真实告警类型 3 天内只发生了一次真实告警,进一步地,真实告警的发生频次必然不会太高这也意味着不可能获取到很多的真实告警样本数据。


(3)误告警事件种类多样

  • 抢购活动导致异常指标飙升引发异常检测系统报警

  • 检测指标经常性的在 0 点附近波动,导致异常检测系统发现指标异常触发下限而报警

  • 被检测指标本身波动性较大且无周期性规律,触发异常检测系统报警


(4)标记工作量大

  • 从用户标记的工作量来看,目前每天系统发出近百的告警信息,如果都需要用户去对每一个告警进行人工标记真假也会对用户带来巨大的工作量,影响其本来的正常工作。

  • 由于存在着真实样本较少且样本不平衡的问题,即使通过数据增强等产生真告警样本,也需要大量的工作量去验证样本质量。我们尝试了使用对抗神经网络产生真样本,但是样本质量并不理想。

对策

针对上述痛点,我们经过大量资料翻阅和讨论,决定结合业务上下文指标和历史标记过数据进行推理。技术上构建可解释的服务层知识图谱:使用切分窗口的实时调用链数据构造基于知识图谱的调用关系,并获取调用上下文的关联指标,进而与历史标记过的数据做相似性推理,从而判明真假。

三、架构

图 1 系统架构图

 

(1) 数据管道:利用消息中间件将调用链日志抽取到“日志抽取与分析”模块中。

(2) 日志抽取与分析:主要功能为将抽取的日志进行实时分析,并将分析结果写入到分析型数据库中。

(3) 异常检测系统:利用历史数据和深度学习概率性地计算未来指标波动边界,并以此边界判断指标是否异常。

(4) 知识图谱推理:主要功能是将分析好的调用关系同步至图数据库中,并提供查询分析功能,依据调用上下文的指标数据和历史数据进行告警的真伪判断。

四、流程

图 2 真假告警推理流程图

(1)抽取实时指标数据;

(2)历史实时指标数据集作为输入,通过深度学习模型对异常边界进行预测;

(3)对超出异常边界阈值进行判断,如超出阈值则先判定为“疑似”异常,请求知识图谱推理系统对当前异常的真伪性进行判定;

(4)设定分析窗口(3 分钟,可配置的超参),从分析型数据库中抽取对应的告警日志进行分析;

(5)根据告警日志中的 TraceID 分析出本次告警所在时间窗口内的调用链 PathID 的列表;

(6)依据本次告警所在时间窗口内的调用链 PathID 列表来统计在此列表中同时发生的上下文异常指标,以及指标的发生频次;

(7)对比历史上同告警事件的 PathID,以获得调用链相似度;

(8)利用本次告警与历史告警知识图谱上指标及其指标发生频次来推理出本次告警与历史告警上误告的上下文相似性;

(9)综合调用链相似性与指标上下文的相似性来判断本次告警是否为真实告警。

五、详细的知识图谱构建与分析

5.1 调用链日志数据的解析与入库


  • 设定分析窗口(3 分钟),从消息管道中抽取数据。


  • 按照日志中的 TraceID 进行聚合分析,其中调用链中服务名与操作名有缺失的部分进行丢弃处理,对没有 root 头的 Trace,多余一个 root 的 Trace 进行丢弃处理。在生成 TraceID 后按下列算法计算 PathID 并和已有的 PathID 进行对比,如果不存在则将当前调用链发给知识图谱推理系统进行保存,如果已存在则只更新当前 PathID 的相关信息。



  • 将分析后的 Trace 信息,指标信息写入到实时分析数据库中。

5.2 Trace 明细表构建


  • 以 TraceID 为粒度分析每条 Trace 明细的调用链关系,并生成 PathID。

  • 将日志抽取数据和 PathID 合并,插入到 Trace 明细表中,如下图:


图 3 Trace 表明细

5.3 图谱构建


  • 依据调用链中的引用关系,构建完整的实体树状结构,并计算该调用链的 PathID。

  • 如果 PathID 相同则认为该调用链已存在不用处理,如果不同则认为是条新的调用链关系并将之存入到图数据库中。

图 4 图谱构建

5.4 指标表构建


  • 分析调用链的结构,找到发生在窗口时间内的调用链上的相关指标。

  • 在分析窗口时间内分析相关指标的发生次数。

  • 将相关指标的统计信息记录至指标表中。


图 5 指标表明细

5.2 基于知识图谱的告警真伪分析


  • 首先依据当前告警的调用链 PathID 寻找历史上相同指标发生误报的调用链 PathID。

  • 依据调用链 PathID 搜寻发生在本次调用链上的相关指标以及该指标的发生次数。

  • 通过调用链以及调用链上的相关指标来计算本地告警与历史告警的相似度。

  • 如果相似度高于阈值则认为本次告警是误报,否则为真实告警。

 

图 6 指标图谱

六、效果及后续

效果


(1)现状分析


分析样本抽取某平台 2021 年 1 月 18 日至 2021 年 1 月 20 日 3 天的告警数据,分析结果如下:

  • 总计发生告警 141 次,其中 18 日告警发生 52 次,19 日发生告警 34 次,20 日发生告警 57 次;

  • 进一步分析发现,在这 3 日的告警中误告发生了 134 次,真实告警只发生了 7 次,误告占比非常高;


图 7 告警量现状


图 8 真实告警占比占比

(2)误报类型分析


  • 从该平台告警分析的结果来看,2021 年 1 月 18 日至 2021 年 1 月 20 日 3 天的告警情况分析,共有 59 个类型的指标发生告警;

  • 在这 59 个类型的告警中大致可分为“抢购误报类型”与“波动性误报类型”。

 

图 9 告警次数分析

(3)结果分析


  • “抢购误报类型”我们选择 CSC-32-0023 作为分析目标,从表中可以看出该指标 3 日都在同一时间发生告警,且该时段是有抢购现象。


  • “波动性误报类型”我们选择 SYS-01-0016 作为分析目标,从表中可以看出该指标每天发生在不同的时间段,且从告警现状分析该指标存在明显的波动过大而造成误报的特征。


图 10


  • 对于告警码 CSC-32-0023,18-20 号发出的告警都在每天的同一时刻,其调用链上的指标相似度较高,这三次告警得关联程度达到了 99%以上,通过初始阈值就可过滤掉该指标的误报问题。


  • 对于告警码 SYS-01-0016,18-20 发出得告警分散在每天的不同时刻,其调用链上的指标关联性较低,所以这些告警的关联程度相较前一个告警码有所降低,不同时段调用链的相似度大约在 70%,但通过历史标记数据学习合理的关联程度阈值,可以有效的避免该指标的误报问题。


图 11 结果分析

(4)最终效果


通过分析上述误告数据,在加入知识图谱推理流程后大致能够降低 80%以上的误报,误告从 134 次减少到了 25 次,而真实告警正确率达到了 100%。

后续


  1. 服务架构理解与异常传播分析:微服务架构的全面应用虽然在开发、部署、维护方面带来极大的易用性,但也带来了微服务间接口调用的复杂性以及对系统全局的清晰理解,基于调用链构建的服务级知识图谱能能够清晰地洞察服务调用的全局,以及更重要的是,当发生故障时,能够洞察故障传播的路径和影响的系统,以便更好地响应排查故障,最大程度地减轻企业的损失。


  1. 结合《苏宁基于知识图谱的大规模告警收敛和根因定位实践》,我们已经构建了多级知识图谱,基于业务领域特点做了实体的解析和关系抽取,但是并没有针对 RDF 语义规范[4]来构建语义知识图谱,并不是说一定要按照 RDF 的标准来构建,相反,如果能够遵循这套标准来构建并使用 SPARQL 以及分布式数据处理[5]等来进行分析推理,那么语义分析的能力将进一步增强,这也是下一步我们将开展的重要工作。

 

参考:


苏宁基于知识图谱的大规模告警收敛和根因定位实践

苏宁 AI 监控运维保障建设实践

Graph-Based Trace Analysis for Microservice Architecture Understanding and Problem Diagnosis

RDF 1.1 Concepts and Abstract Syntax

Distributed Semantic Analytics using the SANSA Stack


作者介绍(排名不分先后):


苏宁科技智能监控 AILab)汤泳、苏宁科技智能监控 AILab)陈延彬、苏宁科技智能监控 AILab)胡创奇、苏宁科技智能监控 AILab)张波、苏宁科技智能监控 AILab)陈松

2021-02-26 08:413683

评论 1 条评论

发布
用户头像
历史数据是固定的数据量?
2021-03-01 11:38
回复
没有更多了
发现更多内容

5大理由告诉你,为什么选择华为云桌面

与时俱进的时代

【世界杯黑技术专题】「原理探索专题」一文解读一下“卡塔尔世界杯”的先进技术之半自动越位技术SAOT+比赛用球Al Rihla

洛神灬殇

12月日更 世界杯 世界杯黑科技

阿里最新产:SpringCloud微服务架构进阶笔记(2023终极版)

程序员小毕

程序员 微服务 后端 架构师 java面试

「实操」结合图数据库、图算法、机器学习、GNN 实现一个推荐系统

NebulaGraph

推荐系统 图数据库 图算法 GNN

卓越实力备受认可 HashData再获权威大奖

酷克数据HashData

金融科技 数据库·

Elasticsearch查询及聚合类DSL语句宝典

京东科技开发者

数据库 存储 ES dsl 查询语句

内卷时代,华为云引领移动办公新潮流

清欢科技

阿里云IoT物联网实例讲解——实践类

阿里云AIoT

阿里云 物联网平台 IoT 设备管理

AI技术赋能数智化转型,激发企业变革创新

用友BIP

天猫联合瓴羊、贝恩,打造“产品致胜”的DTC发展模式

瓴羊企业智能服务

程序员是“短命”职业吗?年龄大了是不是没前途?

千锋IT教育

学生系统架构图

lory(侯保国)

微信业务架构图

lory(侯保国)

学习下Redis内存模型

京东科技开发者

Java 前端 内存 数据存储 内部编码

全网最全 java 进制转换详解

千锋IT教育

协同高效运转,华为云桌面助力企业数字化转型!

科技说

架构实战营第10期模块3作业

Geek_4db2d5

现在即未来,华为云桌面引领桌面变革新潮

科技说

数据库原理及MySQL应用 | 数据表操作

TiAmo

:MySQL 数据库 数据库· 12月月更

基于Redis实现DelayQueue延迟队列设计方案(附源码)

石臻臻的杂货铺

redis

数字孪生赋能智慧港口解决方案,助力港口数字化转型

袋鼠云数栈

数字孪生

华为云桌面,如何助力企业云上轻松办公

科技怪授

云桌面

由浅入深剖析JDK源码!美团大牛手撸并发原理笔记真香

Java永远的神

程序员 并发编程 后端 jdk源码 架构师

TCP-SYN超时重传问题排查

Kevin Wu

高并发 网关 TCP协议

架构实战营第十期模块三作业

刘博

【漏洞分析】Apache ShardingSphere-Proxy <5.3.0 身份认证绕过

墨菲安全

开源 安全漏洞 软件供应链安全

物联网设备端的传感器数据如何实时上报到云平台——实践类

阿里云AIoT

安全 物联网 物联网安全 技术标签

运维自动化之监控平台

大V

DevOps 运维自动化 监控报警

数据可视化软件有哪些?

优秀

数据可视化工具

单测在商家前端业务中的实践

得物技术

架构 前端 Web 测试 单元测试 12 月 PK 榜

Mysql到TiDB迁移,双写数据库兜底方案

京东科技开发者

数据库 开源 开发 迁移 双写数据库

苏宁基于服务层知识图谱的真假告警判定_AI&大模型_汤泳_InfoQ精选文章