首页> 中国专利> 基于分布式数据库日志数据的实时异常检测方法及系统

基于分布式数据库日志数据的实时异常检测方法及系统

摘要

本发明特别涉及一种基于分布式数据库日志数据的实时异常检测方法及系统。该基于分布式数据库日志数据的实时异常检测方法及系统,对多节点日志信息进行解析、分流和存储,并预处理为模型适配的数据输入;将所有节点的异常经验训练到一个模型,然后对实时日志进行解析,并与在训练数据上构建的模板树进行模板匹配得到对应的模板ID,进行模型训练与实时检测;通过HTTP POST输出异常检测记录。该基于分布式数据库日志数据的实时异常检测方法及系统,能够实时监控数据库各个节点的日志状态,更清晰的观测节点的异常情况,并针对各节点的宕机异常给出自动报警,从而保证了数据库的正常运行,减少了人工监控的工作量,降低了数据库运维成本。

著录项

  • 公开/公告号CN112948215A

    专利类型发明专利

  • 公开/公告日2021-06-11

    原文格式PDF

  • 申请/专利权人 浪潮云信息技术股份公司;

    申请/专利号CN202110238361.X

  • 发明设计人 吴思璇;杨以恒;江燕;

    申请日2021-03-04

  • 分类号G06F11/30(20060101);G06F11/32(20060101);G06F16/18(20190101);G06F16/182(20190101);

  • 代理机构37100 济南信达专利事务所有限公司;

  • 代理人郗艳荣

  • 地址 250100 山东省济南市高新区浪潮路1036号浪潮科技园S01号楼

  • 入库时间 2023-06-19 11:22:42

说明书

技术领域

本发明涉及云服务技术领域,特别涉及一种基于分布式数据库日志数据的实时异常检测方法及系统。

背景技术

现代数据库的规模和架构日益复杂和庞大,同时数据库和分布式系统的广泛结合和使用,使得维护成本攀升,如今仅靠人工的软件,监控运行状态和发现运行故障,已经无法维持系统稳定运行。而数据库系统日志作为记录了各种运行状态和节点事件的重要数据,能够帮助运维人员理解系统状态,并且分析、查找故障根本原因。

传统上,运维人员通常基于人工手段检查日志来发现异常分析故障,比如关键字搜索和规则匹配等等,并且人工手段的日志检查通常是对数据库运行的阶段性诊断,或是发生了异常之后进行的诊断,具有一定的滞后性,导致无法及时做出补救措施。而庞大的分布式数据库系统的正常运行依赖于各个节点的稳定工作,一旦系统日志运行出现差错,如果不能及时发现问题并定位问题所在,造成的损失将会是用户无法接受的。其次日志数据本身结构复杂,含有大量的自然语言结构,人工定义异常日志关键字的行为是非常耗时并且容易产生疏漏。因此,基于以上情况,人工检测日志的方法耗力、耗时、不能达到预警效果。

基于此,本发明提出了一种基于分布式数据库日志数据的实时异常检测方法及系统。

发明内容

本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于分布式数据库日志数据的实时异常检测方法及系统。

本发明是通过如下技术方案实现的:

一种基于分布式数据库日志数据的实时异常检测方法,其特征在于:包括以下步骤:

第一步,日志采集

对多节点日志信息进行解析、分流和存储,并对异常告警模型需求格式进行转换,预处理为模型适配的数据输入;

第二步,日志预处理

对采集的多节点原始数据进行处理,通过正则表达式找到日志日志中非结构式信息部分的节点标识符,并遮盖标识符中代表的具体节点信息,将所有节点的异常经验训练到一个模型;然后通过Drain算法对实时日志进行解析,并与在训练数据上构建的模板树进行模板匹配得到对应的模板ID;

第三步,日志宕机异常检测

Drain算法将日志记录转换为匹配的模板ID之后,通过滑动窗口大小和步长大小将单个日志记录转换为日志序列,进行模型训练与实时检测;

第四步,异常报警

根据预设的数间窗口window_size、异常频次阈值cut_off和分流节点数目node_num进行对应的异常检测记录的输出,通过HTTP POST发送并呈现在可视化工具Grafana界面上。

所述第一步中,对解析后的多节点日志信息进行分流,具体步骤如下:

S1.用户根据目前集群的节点大小配置,自定义分流节点数目node_num;

S2.用户根据所需实际情况的检测异常、显示异常精度自定义设置时间窗口window_size;

S3.用户根据不同实际情况的异常频率范围自定义异常频次阈值cut_off。

所述第二步中,对实时日志进行解析与匹配的实现过程,包括以下步骤:

S1.定义固定参数的正则表达式,通过定义日志中数字、IP或网址类关键字的正则表达式来提高日志解析中参数提取的准确性;

S2.利用Drain算法比对日志消息长度与模板树中各个模板的消息长度,消息长度即为字段总个数,具有相同字段的日志将被分到模板树中的同一分支中;

S3.利用Drain算法比对日志首字段与模板树中各个模板的首字段,首字段为日志消息中的开头关键字,具有相同首字段的日志将被分到模板树中的同一分支中;

S4.利用Drain算法比对日志消息内容与各个模板中消息内容的相似度,计算出的相似度与预设的相似度阈值进行大小比较,当相似度大于等于相似度阈值时,被比较模板被判定为日志的模板,并返回该模板的ID号,否则Drain算法返回空值;

S5.在使用训练数据对模板树进行构建时,如果当前日志在上述过程中找不到匹配的模板,Drain算法以当前日志新添模板分支。反之则不会更新模板树。但在实时检测过程中,无论实时日志是否能在模板树中找到模板,都不会更新模板树。

所述步骤S4中,消息内容相似度ContentSimilarity定义如下:

其中,seq

判定seq

其中,s

所述第三步中,模型训练与实时检测的具体步骤如下:

S1.选择未出现异常的日志序列对LSTM(Long-Short Term Memory,长短期记忆模型)模型进行训练,步骤如下:

S11.输入转换好的日志序列

对各个日志序列依次输入窗口w下h个日志事件所匹配的模板ID,假设窗口下任意时刻的m

S12..LSTM模型通过输入的模板ID分布构建特征矩阵,以交叉熵cross-entropy为函数估计损失,以下一个日志事件模板ID为标签,优化针对下一个出现的日志事件条件概率分布模型:

Pr[m

其中,为m

S2.将训练好的模型接入实时日志流,接收新的日志数据进行宕机异常检测,步骤如下:

S21.将模型w′={m′

Pr[m′

S22.将k′

S23.根据与训练步骤中相同的滑动窗口大小和步长大小,统计每个滑动窗口大小下发生异常的频次,若统计出的异常频次大小大于预设的频次阈值,则达到报警条件。

所述第四步中,判断当前消息对应时间点与上一轮异常报警总结输出时间点的差值,是否超过时间窗口window_size的下一个时间窗口:

如果差值小于时间窗口window_size,则当前时间与上一条消息处于同一个时间窗口内,不输出报警信息,继续模型的异常检测,并记录该条消息对应的异常情况;

如果差值大于时间窗口window_size,则当前时间为下一个时间窗口,将上一个时间窗口中各个节点的异常检测记录结果作为报警信息进行输出,通过HTTP POST发送到对应的HTTP端口,展现在Grafana界面,记录该消息并进行下一轮的异常检测。

一种用于实现上述方法的基于分布式数据库日志数据的实时异常检测系统,包括日志采集模块,日志预处理模块,日志宕机异常检测模块和异常报警模块;

所述日志采集模块,负责通过解析JSON数据对分布式多节点日志信息进行分流预处理,并转换为模型适配的输入数据;

所述日志预处理模块,负责处理日志中非结构式信息部分,遮盖节点相关标识符,并通过Drain算法对日志进行解析,将匹配成功的日志记录转换为对应的日志模板编号,并根据时间窗口大小将日志记录整合成日志序列;

所述日志宕机异常检测模块,负责LSTM模型对整合的日志序列进行实时宕机异常检测,计算异常频次;

所述异常报警模块,负责根据各个节点的日志异常信息,判断异常频次是否超出报警频次,如果超出则根据用户自定义的时间窗口定时告警并处理。

本发明基于分布式数据库日志数据的实时异常检测系统,数据来源为分布式数据库多节点的日志数据,所使用的消息发送组件为Kafka,数据格式为标准JSON格式;所述日志采集模块基于Python,负责利用开源组件Faust逐条处理JSON消息,解析出消息对应的节点、日志以及时间戳信息,根据解析出的节点对逐条JSON消息进行分流,并针对异常告警模型需求格式进行转换。

本发明的有益效果是:该基于分布式数据库日志数据的实时异常检测方法及系统,能够实时监控数据库各个节点的日志状态,更清晰的观测节点的异常情况,并针对各节点的宕机异常给出自动报警,从而保证了数据库的正常运行,减少了人工监控的工作量,降低了数据库运维成本。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

附图1为深度为3的模板树示意图。

附图2为本发明基于分布式数据库日志数据的实时异常检测方法示意图。

具体实施方式

为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

该基于分布式数据库日志数据的实时异常检测方法,包括以下步骤:

第一步,日志采集

对多节点日志信息进行解析、分流和存储,并对异常告警模型需求格式进行转换,预处理为模型适配的数据输入;

所述第一步中,对解析后的多节点日志信息进行分流,具体步骤如下:

S1.用户根据目前集群的节点大小配置,自定义分流节点数目node_num;

例如,采用5节点集群,node_num在初始化时被设置为5,分流过程中会自动创建5个存储不同节点解析信息的队列,对应包含了模型所需要的输入信息。

S2.用户根据所需实际情况的检测异常、显示异常精度自定义设置时间窗口window_size;

例如,采用1分钟作为时间窗口,采集模块会根据当前时间与初始化时间的差值进行判断:是否进行模型输入,是否输出异常信息。

S3.用户根据不同实际情况的异常频率范围自定义异常频次阈值cut_off;

例如,在数据库中启动fault-tolerant模式下运行TPCC压力测试时,cut_off设置为10,异常检测的准确率较高,因此在规定的时间窗口window_size中(如1分钟),大于10的异常频次才会进行输出至报警模块。

第二步,日志预处理

对采集的多节点原始数据进行处理,通过正则表达式找到日志日志中非结构式信息部分的节点标识符,并遮盖标识符中代表的具体节点信息,将所有节点的异常经验训练到一个模型;然后通过Drain算法对实时日志进行解析,并与在训练数据上构建的模板树进行模板匹配得到对应的模板ID;

所述第二步中,对实时日志进行解析与匹配的实现过程,包括以下步骤:

S1.定义固定参数的正则表达式,通过定义日志中数字、IP或网址类关键字的正则表达式来提高日志解析中参数提取的准确性;

S2.利用Drain算法比对日志消息长度与模板树中各个模板的消息长度,消息长度即为字段总个数,比如“refresh audit server setting”字段总个数为4,具有相同字段的日志将被分到模板树中的同一分支中;

S3.利用Drain算法比对日志首字段与模板树中各个模板的首字段,首字段为日志消息中的开头关键字,比如“refresh audit server setting”的首字段为“refresh”,具有相同首字段的日志将被分到模板树中的同一分支中;

S4.利用Drain算法比对日志消息内容与各个模板中消息内容的相似度,计算出的相似度与预设的相似度阈值进行大小比较,当相似度大于等于相似度阈值时,被比较模板被判定为日志的模板,并返回该模板的ID号,否则Drain算法返回空值;

所述步骤S4中,消息内容相似度ContentSimilarity定义如下:

其中,seq

判定seq

其中,s

S5.在使用训练数据对模板树进行构建时,如果当前日志在上述过程中找不到匹配的模板,Drain算法以当前日志新添模板分支。反之则不会更新模板树。但在实时检测过程中,无论实时日志是否能在模板树中找到模板,都不会更新模板树。

第三步,日志宕机异常检测

Drain算法将日志记录转换为匹配的模板ID之后,通过滑动窗口大小和步长大小将单个日志记录转换为日志序列,进行模型训练与实时检测;

所述第三步中,模型训练与实时检测的具体步骤如下:

S1.选择未出现异常的日志序列对LSTM(Long-Short Term Memory,长短期记忆模型)模型进行训练,步骤如下:

S11.输入转换好的日志序列

对各个日志序列依次输入窗口w下h个日志事件所匹配的模板ID,假设窗口下任意时刻的m

S12..LSTM模型通过输入的模板ID分布构建特征矩阵,以交叉熵cross-entropy为函数估计损失,以下一个日志事件模板ID为标签,优化针对下一个出现的日志事件条件概率分布模型:

Pr[m

其中,为m

S2.将训练好的模型接入实时日志流,接收新的日志数据进行宕机异常检测,步骤如下:

S21.将模型w′={m′

Pr[m′

S22.将k′

S23.根据与训练步骤中相同的滑动窗口大小和步长大小,统计每个滑动窗口大小下发生异常的频次,若统计出的异常频次大小大于预设的频次阈值,则达到报警条件。

第四步,异常报警

根据预设的数间窗口window_size、异常频次阈值cut_off和分流节点数目node_num进行对应的异常检测记录的输出,通过HTTP POST发送并呈现在可视化工具Grafana界面上。

所述第四步中,判断当前消息对应时间点与上一轮异常报警总结输出时间点的差值,是否超过时间窗口window_size的下一个时间窗口:

如果差值小于时间窗口window_size,则当前时间与上一条消息处于同一个时间窗口内,不输出报警信息,继续模型的异常检测,并记录该条消息对应的异常情况;

如果差值大于时间窗口window_size,则当前时间为下一个时间窗口,将上一个时间窗口中各个节点的异常检测记录结果作为报警信息进行输出,通过HTTP POST发送到对应的HTTP端口,展现在Grafana界面,记录该消息并进行下一轮的异常检测。

用于实现上述方法的基于分布式数据库日志数据的实时异常检测系统,包括日志采集模块,日志预处理模块,日志宕机异常检测模块和异常报警模块;

所述日志采集模块,负责通过解析JSON数据对分布式多节点日志信息进行分流预处理,并转换为模型适配的输入数据;

所述日志预处理模块,负责处理日志中非结构式信息部分,遮盖节点相关标识符,并通过Drain算法对日志进行解析,将匹配成功的日志记录转换为对应的日志模板编号,并根据时间窗口大小将日志记录整合成日志序列;

所述日志宕机异常检测模块,负责LSTM模型对整合的日志序列进行实时宕机异常检测,计算异常频次;

所述异常报警模块,负责根据各个节点的日志异常信息,判断异常频次是否超出报警频次,如果超出则根据用户自定义的时间窗口定时告警并处理。

本发明基于分布式数据库日志数据的实时异常检测系统,数据来源为分布式数据库多节点的日志数据,所使用的消息发送组件为Kafka,数据格式为标准JSON格式;所述日志采集模块基于Python,负责利用开源组件Faust逐条处理JSON消息,解析出消息对应的节点、日志以及时间戳信息,根据解析出的节点对逐条JSON消息进行分流,并针对异常告警模型需求格式进行转换。

与现有技术相比,该基于分布式数据库日志数据的实时异常检测方法及系统,具有以下特点:

第一、能够实时监控数据库各个节点的日志状态,并针对各节点的宕机异常给出自动报警,减少了人工监控任务。

第二、日志采集模块可以根据实际情况下多节点的数目进行自定义分流数量,进行对应不同节点信息的告警记录,能更清晰的观测某个节点的异常情况。

第三、日志预处理模块针对日志中包含的节点标识符做了遮盖处理,使得训练出的模型可以方便通用检测各个节点的日志数据。

第四、日志宕机异常检测模块能够实时检测日志节点宕机异常,并统计各个节点异常频次。

第五、异常报警模块提供了异常频次阈值作为报警敏感度的调节参数,。针对不同数据库运行场景,可以通过调节异常频次阈值来调节报警敏感度,提高了对不同场景的适应性。

以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号