文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

准召率超80%,网易游戏AIOps异常检测及故障定位优化实践

2024-12-01 15:02

关注

一、网易游戏AIOPS落地线路图

2016年开始, 网易游戏在AIOps这条道路上持续探索,力求实现从人工运维到智能化运维的转变。从2016年开始组建智能监控团队,构建智能运维平台,一直到现在,落地了异常检测、预测、关联分析、下钻分析、日志分析、运维机器人、故障定位、故障预警等。除此之外,还有很多其他功能,如火焰图分析、硬件预测、CDN文件发布等,都取得不错的实践效果。

二、异常检测  

异常检测是研究AIOps的必经之路,后续很多场景功能都以异常检测为基础,属于不得不解决的问题。异常检测指通过 AI 算法,自动、实时、准确地从监控数据中发现异常,为后续的诊断、“自愈”提供基础。相比传统阈值配置成本高、误报多、场景覆盖少的问题,异常检测有易配置、准确率高、场景覆盖面广、自动更新等优点。

对于异常检测,其实网上很多文档或者书籍都给出了一些算法或者工具,但在实际运用的过程中,会发现效果往往不是很好,究其原因是这些算法只能有效地针对一些特定的场景、以及需要做很多的优化来适配实际的场景。为了更好地在实际场景中落地,我们对算法做了一些调整优化,并结合业务需求对指标进行划分,达到更好的检测效果。我们将异常检测根据指标类型划分成了三种场景----业务黄金指标(如游戏在线人数)、性能指标(如cpu使用率)、文本数据(如日志),采用不同的检测算法。

1、业务黄金指标

业务黄金指标的特性是周期性强、曲线波动小、指标量级小、准确率和召回率要求高。我们知道有监督模型具有高准召率、高扩展性的优点,因此我们考虑采用有监督模型对业务黄金指标进行异常检测。然而有监督模型需要大量的标注数据,但对异常检测项目很难收集到足够的异常数据。那应该如何去解决和平衡这两者之间的关系呢?我们从样本构建到报警可视化,构建了一整套的检测框架。

1)样本构建

考虑到样本收集困难问题,我们的样本主要来自两个方面——历史KPI数据集和线上用户标注数据。首先,抽样部分KPI数据集,采用简单无监督检测模型如Iforest检测得到异常score,通过不等比例分层抽样筛选出疑似异常样本和正常样本,进行人工标注,并划分成训练集和测试集用户模型训练和测试。功能上线后,收集用户标注数据,用于模型优化。用户标注的数据仅会作用于本项目,避免不同用户异常认知差异导致的错误报警问题。还有一点需要注意,当历史异常数据不足时候,可以通过异常生成的方式生成样本,如加噪声、设计抖动模式等方式。

2)预处理

预处理模块包含曲线分类、缺失标准化处理以及特征计算三个部分。曲线分类采用LSTM+CNN的方式实现,将待检测KPI分成3类(稳定、不稳定、不检测),分类准确率可达到93%+。线性和前值填充的方式进行缺失值处理,并max-min归一化。特征包含统计特征、拟合特征、分类特征、滤波特征、自定义特征等,构建近500维特征。考虑到无效特征问题,需要进行特征选择,再进行建模。  

3)算法模型

模型主要采用常见模型,如RF\XGB\GBDT等,再用LR进行集成,进行检测。

4)可视化

可视化部分包含图文告警、快速标注、异常视图三个模块。通过图文形式进行报警,在报警消息中加上快速标注链接,用户在收到报警后可以快速确认是否有异常发生并标注。

通过有监督模型的方式可达到高准召率的检测效果,线上检测效果可达到90%+,可满足用户的需求。

2、性能指标

有监督检测模型可以很好地对业务黄金指标进行检测,但并不适合性能指标场景。如上面所说,性能指标量级大、指标类型复杂、周期不定等。若依旧考虑采用有监督模型,需要花费巨大的标注成本和训练成本,对于大规模部署的业务很不友好。因此,我们采用无监督模型来检测性能类型指标。

我们按异常类型进行划分,划分成毛刺、漂移、高频、线型趋势四种类型,分别采用不同的检测模型进行检测,用户可以根据自己的需求进行选择报警类型。

最后,均需要进行周期抑制的步骤,避免周期性的误报问题。

无监督的检测模型,准召率可达到80%+,基本可达到用户预期。通过图文告警的方式告警,帮助用户快速确认报警的正确性。

3、文本数据

业务的高速发展,对系统稳定性提出了更高的要求,各个系统每天产生大量的日志:

这些问题,归根到底,是日志信息太多、格式多样,不能很好归类。日志智能分析基于大数据和AI算法,提供实时日志智能分类,以及日志指标异常检测等功能。利用模型根据日志文本的相似性进行归类,自动提取对应的日志模版。如下图,可以从两条日志中提取出模板。

目前业界日志分类的算法相对成熟,有很多的算法都可以达到不错的效果。一次分类我们采用drain算法,然后Spell进行二次分类,解决一次分类长度不同日志分在不同模板的问题。

得到日志模板后,可以基于日志模板数量进行异常检测。智能异常检测会对比不同时间段的分类日志数量,利用机器学习模型自动识别突变或者和历史趋势不一致的日志类型,并发出告警信息:

与指标异常检测不同,日志异常检测可以检测到代码类型异常,对程序排障有重大帮助。此外,日志分类可以对日志治理也要很大的帮助,新项目/服务上线时候通过审查日志模板,可以根据需求整理、删除无效日志。

三、故障定位

在标准的故障处理流程中,故障定位一般可分为两个阶段:

在游戏场景中,随着游戏及系统架构的日渐复杂,运维人员收到的报警信息也变得多种多样,在面对故障时,纷杂的报警信息令运维人员一时难以理清逻辑,甚至顾此失彼,无法在第一时间解决最核心的问题:

1、资源  

资源维度可区分机器、网络渠道、SaaS进行分析给出异常信息。  

1)机器

对最近20min内所有metric进行异常检测,计算异常检测分数。再基于越早发生的异常越有可能是根因、指标异常越严重越可能是根因、机器故障越严重越可能是根因几个准则进行排序,给出topN异常机器。

2)网络/渠道

采用Adtributor算法,按区域、运营商等维度进行下钻分析,给出topN异常维度。

3)saas

目前我们SaaS有比较完善的报警,直接可获取异常结果进行汇总。

2、代码

代码问题直接可通过日志分类和异常检测发现,给出topN异常模板。

3、人为操作

人为部分主要是变更事件,与变更系统联动,关联到故障发生前的变更事件,并异常提醒。

4、历史故障

除了分析机器、代码等问题,还有一个比较有效定位故障根因的方式就是关联历史故障。如果本次故障与历史故障异常表现相似,那么大概率是相同的原因导致,故可以历史故障原因作为本次故障根因的推荐。计算当前故障与历史故障的Tanimoto系数,推荐Tanimoto值最大且超过阈值的topN故障以及其根因。

整体的故障定位流程,检测到故障的发生,基于拓扑资源、代码、人为因素、历史故障这几个角度出发,采用不同的方式进行根因分析。如检测到游戏在线人数下降,出发故障定位流程,检测到机器A 网络连接异常,告警出网络问题,人工进行排查出公网故障导致。

图片

来源:dbaplus社群内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯