0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用机器学习解决数据库运维难题

西西 来源:feiyan 作者:51cto 2018-12-02 10:43 次阅读

回顾整个运维的发展史,从最开始的系统管理到基础脚本运维,再到自动化运维,最后发展到了智能运维。经过这些年的发展,运维人员的工作内容发生了翻天覆地的变化:

十几年前,我们不知道故障会出现在哪,也不知道什么时候会出现故障,只有在故障出现的时候才能去查找根因并解决故障,这是一种很被动的方法。

到后来大规模的脚本引入,我们处理问题的方式变得更加科学了,速度也差强人意,但还是没有改变这一种被动解决问题的本质现象;有了先前的经验,很多公司引入了监控系统,发展了自己的自动化运维平台,旨在问题发生或者即将发生时能够自动地去解决问题,这种方式刚突破了之前所有的“被动运维”的本质,能够防患于未然,将故障扼杀在摇篮中。但与之而来的却是大量的告警及海量的监控数据,如何更加高效地解决故障成了我们现在必须解决的难题。

人工智能时代的来临恰好解决了上面我们所面临的问题,而AIOps就是希望基于已有的运维数据(日志、监控信息、应用信息等),并通过机器学习的方式来进一步解决自动化运维没办法解决的问题。

我们目前正在积极推动数据库运维从自动化到智能化的转变。众所周知,数据挖掘和机器学习离不开海量的数据作为基础,而平安科技通过这几年的自动化运维的应用,已经积累了海量多维的数据库性能数据、日志数据和主机数据。

利用这些数据,我们可以通过机器学习等方法在时间序列异常检测、根因分析、邮件告警收敛、容量预测等多个应用场景中获取我们想要的信息,从而进行故障的自动发现、自动诊断和自动解决。

一、时间序列异常检测

时序数据是AIOps的基础数据,有着规模大、种类多、需求多样的特点。在自动化运维阶段,我们所采用的大多是恒定阈值的方法。

这种方法简单易实现,但是缺点也显而易见:它不够灵活,发现故障也不够及时,无法满足现在的告警需求。如下图所示,传统的阈值告警会忽略掉两个波动的异常:

恒定阈值方法

动态阈值的方法在此时应运而生,传统的动态阈值的方法采用了基于同比和环比的统计方法,这种方法解释性强,易于实现,但是灵活性较差,受节假日影响较大(如下图中,9月24号为中秋节,流量和上周相比下降明显,此时环比和同比的方法不适用),发现问题也不够及时。

还有许多公司采用带权移动平均的方法来做动态阈值,他们认为在同一个维度下,某一个点的数值必然和它之前一段时间的数据有关,如以下公式所示:

9/18-9/25指标数据图

我们目前正将机器学习应用在时序数据异常检测中,和上述方法相比,机器学习的方法更为准确,成本也更大。

时间序列异常检测本质上也可以看做“正常”和“异常”的二分类问题,通过将历史的监控数据打上标签,再将有监督和无监督算法结合建立模型,可以判断当前的时间序列是否是正常的。

如何用机器学习解决数据库运维难题

二、根因分析

大多数情况下,由于监控指标的相关联性,如果某个指标异常了,很多相关指标也会异常。如果同时对所有的告警指标进行分析和处理,会浪费许多人力。为了解决这个问题,我们需要进行根因分析来进行针对性处理。

通常我们可以通过下列3种方法对数据进行根因分析:

相关度指标获取,找到和异常指标在特定时间段内相似的指标。

在大量的样本中,找出经常一起出现的异常指标(该问题就转换成了频繁序列挖掘问题),实现方法有关联规则、APRIORI、FP_GROTH等。

利用决策树的强可解释性,对正负样本进行分类,然后通过异常指标的分类树途径,找到频繁的异常指标集。

Oracle数据库的DB_TIME偏高为例:

第一种方法找出当前时间段内与DB_TIME指标有相似曲线的指标,并将最相似指标TOP N作为根因;

第二种方法则是在历史数据中,当DB_TIME异常时,把其他异常的指标组成若干个项集,再从这些项集里面利用关联规则找出强相关组合,则这些组合中的其他指标被视为根因;

第三种方法,则是在历史数据中根据DB_TIME是否异常,将历史数据分为正、负样本,训练决策树模型得到最终的根因。

如何用机器学习解决数据库运维难题

根因分析方法一

如何用机器学习解决数据库运维难题

根因分析方法二

根因分析方法三

三、告警收敛

当监控业务发展到一定规模时,每日收到的告警邮件数会呈指数型增长,尤其是一些监控频率较高的监控项出现问题时,这种情况特别明显。

为了解决这一问题,在最开始,我们设定了告警频率,让同一种告警在一段时间内只出现一次。

这种方法确实会减少一部分告警,但是还有一些显而易见的告警可以通过制定规则的方法来实现进一步的告警收敛。比如同一个集群内的数据库都出现了ping不通的问题,又比如同一个网段内的所有IP流量突增,就可以将这些告警整合后再发送。

而在AIOps时代,告警收敛和根因分析往往是一起进行的。

和根因分析方法二类似,我们可以先获取告警项集数据,并提取频繁项。如果在频繁告警项集中,告警A和告警B经常一起出现并且在A出现的时间比B早,则在邮件告警中,我们可以忽略B告警,只将A告警推送给运维人员。

不同场景下的告警收敛有着不同的需求,和AIOps相比,传统的告警收敛方法更加简单和高效,基于规则的方法也具有很强的拓展性和解释性;而AIOps却能挖掘出我们利用常识和经验无法发现的关联项并进行告警收敛。

四、容量预测

容量预测在数据库运维中的很多地方都应用着,不同的应用场景有不同的特性,我们很难找到一个模型去适应所有的数据。

在容量预测上,我们的典型应用是数据库DB_SIZE容量预测,数据库容量具有总体上升、无规律、波动大的特点。对数据库容量进行合理的预测,短期可以提前发现可能的故障,进行主动预防和提前解决,无需在问题发生时被动处理;长期可以进行合理的容量规划和资源分配。

最开始,我们想到的是线性回归加上简单的数据预处理,但是结果十分不理想。由于业务规模的落差,不同数据库的容量有着很大的差别,并且在数据库进行导表,扩容等操作时,线性拟合或者非线性拟合的效果不尽人意。

显然,传统的线性回归方法虽然简单,但是预测效果较差,不能满足要求。为了解决这一问题,我们将容量数据进行了分类,分为周期型和突升突降型,分类的方法可以采用统计方法,也可以使用聚类或分类的方法。

对于周期型数据,我们可以认为其实线性可拟合的,因为在总体上升的趋势上,周期型的数据在周期内的增长值是线性递增的。对于这种类型的数据,我们可以采用线性回归的机器学习方法来对数据库容量进行预测。

周期型数据

而对于突增突降型的数据,线性拟合效果较差,这时我们使用环比增量求和的方法,求得历史数据中星期一到星期天的具体每天增量的加权平均值;再将这个增量应用到预测中。和单纯的线性拟合方法相比,这种方法的准确性提高了很多,平均预测数据的均方残差缩小了近一倍。

突升突降型数据

以上四个应用场景的技术开拓都是致力于通过AI让运维更加高效,让更多的故障可以被提前发现和解决。关于AIOps,我们还有很多东西可以去尝试和探索,如智能问答机器人、日志集中分析平台等,后续有相关成果再与大家分享。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3782

    浏览量

    64335
  • 机器学习
    +关注

    关注

    66

    文章

    8397

    浏览量

    132518
  • 运维
    +关注

    关注

    1

    文章

    254

    浏览量

    7558
收藏 人收藏

    评论

    相关推荐

    何用labview显示数据库的表格内容

    何用labview显示数据库的表格内容?谢谢
    发表于 05-16 10:27

    请教如何用SQL语句来压缩ACCESS数据库

    通过对ACCESS数据库的“修复与压缩”会使程序的运行更加稳定和提高运行速度。——请教如何用SQL语句来压缩ACCESS数据库,只用SQL语句哟!谢谢!
    发表于 11-29 21:54

    何用labview创建SQLite数据库

    何用labview创建SQLite数据库,谢谢
    发表于 01-22 17:19

    请问查询sql数据库的表格结果都是升序排列的,如何用降序排列?二数组排列也只能升序?

    本帖最后由 一只耳朵怪 于 2018-5-25 10:46 编辑 求教 查询sql数据库 的表格结果都是升序排列的 如何用降序排列 二数组排列也只能升序
    发表于 05-25 10:36

    学习Linux发展方向

    发布等工作需求,如果公司较小的话,可能还会兼职一下网管、网络工程师、数据库管理员、安全工程师、技术支持等职务。  那么,涉及到的Linux平台上的工具有哪些呢?答曰:Linux系统,Linux
    发表于 07-25 17:15

    跨平台嵌入式数据库EffiProz介绍

    EffiProz:面向.NET程序员的跨平台嵌入式数据库 EffiProz:面向.NET程序员的跨平台嵌入式数据库EffiProz:面向.NET程序员的跨平台嵌入式数据库作者 Jonathan Allen 译者 张龙 发布于 2
    发表于 12-21 06:00

    ADO 控件访问数据库的各种技巧探讨

    本文讲述了使用ADO 控件访问数据库时如何用程序来实现数据库的连接和数据感知控件与数据库的绑定、如何实现动态查询和动作查询以及如
    发表于 06-10 14:35 31次下载

    数据库,数据库是什么意思

    数据库,数据库是什么意思 数据是当今信息社会的一种极为重要的资源,人们的一切活动都离不开数据。如学校中的学生档案、学习成绩记录、学
    发表于 03-18 15:05 5218次阅读

    SQL Server数据库学习总结

    经过一段时间的学习,也对数据库有了一些认识。数据库基本是由表,关系,操作组成;对于初学者首先要学的:1.数据库是如何存储数据的.表,约束,触
    发表于 11-28 17:36 4645次阅读
    SQL Server<b class='flag-5'>数据库</b><b class='flag-5'>学习</b>总结

    MySQL数据库误删后的回复技巧

    在日常工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!然而是人总难免会犯错误,
    发表于 05-05 08:02 2346次阅读
    MySQL<b class='flag-5'>数据库</b>误删后的回复技巧

    数据自动化应该注意哪些事项

    DB主要是所有IT系统的数据库信息,包括管理系统本身的数据库。由于数据库的重要性,所以在基础数据
    发表于 06-23 10:01 1017次阅读
    <b class='flag-5'>数据</b>自动化<b class='flag-5'>运</b><b class='flag-5'>维</b>应该注意哪些事项

    数据库学习教程之数据库的发展状况如何数据库有什么新发展

    本文档的主要内容详细介绍的是数据库学习教程之数据库的发展状况如何数据库有什么新发展主要内容包括了:1 数据库技术发展概述2
    发表于 10-25 16:29 5次下载
    <b class='flag-5'>数据库</b><b class='flag-5'>学习</b>教程之<b class='flag-5'>数据库</b>的发展状况如何<b class='flag-5'>数据库</b>有什么新发展

    数据库系统的常见用户

    数据库管理员(DatabaseAdministrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于工程师的一个分支,主要负责业务
    的头像 发表于 02-22 16:28 9299次阅读

    python有什么用 如何用python创建数据库

    开发、游戏开发、机器学习、自然语言处理等领域。 在本文中,我们将介绍如何使用Python创建数据库。首先,让我们了解一下什么是数据库。 什么是数据库
    的头像 发表于 08-28 16:41 1165次阅读

    企业上云后还需要数据库吗?真实答案看过来!

    企业上云后还需要数据库吗?企业上云后,数据库仍然是必不可少的。尽管云计算带来了许多便利和
    的头像 发表于 11-08 10:02 125次阅读