掌桥专利:专业的专利平台
掌桥专利
首页

基于内存的日志预警方法、系统、计算机设备和存储介质

文献发布时间:2023-06-19 18:35:48


基于内存的日志预警方法、系统、计算机设备和存储介质

技术领域

本申请涉及日志预警处理技术领域,特别是涉及一种基于内存的日志预警方 法、系统、计算机设备和存储介质。

背景技术

随着当今IT互联网领域,电子商务的发展、企业上云、数字化推进等衍生 出了众多业务以及软件系统,这些系统同时也输出了大量的日志,比如业务层面 的应用日志、安全审计日志、web服务器日志、用户行为日志,数据中心层面的 网络设备日志、服务器的硬件日志、操作系统日志等,日志是一种事件,记录了 软件或者系统的一些状态,对于IT运维人员来讲,在数据中心场景下如此海量 的日志,业务系统出现问题,如何快速、准确的定位问题、分析问题、解决问题 是当下亟待解决的难题。

基于上述问题的现状,当前有一些技术:比如ELK日志体系,elk解决了日 志采集、消费、存储、分析展示的功能,但它的劣势elasticsearch是使用java 语言开发,使用倒排索引技术实现的全文搜索功能。

但上述技术存在以下问题:由于其并不是在内存中运行的数据库,因此计算 处理的速度慢,读写数据的延迟较高,成本较大。

发明内容

本发明实施例提供了一种基于内存的日志预警方法、系统、计算机设备和存 储介质,以至少解决相关技术中并不能在内存中进行日志分析和预警的问题。

根据本发明的一个实施例,提供了一种基于内存的日志预警方法,包括:

对日志数据进行分类采集;

按照日志类别,将所述日志数据上传至消息队列中对应的消息集合;其中, 所述消息队列包括多个消息集合,每个消息集合对应一种日志类别;每个消息集 合包括多个分区,所述日志数据缓存于所述分区中;

按照所述分区的数量开启多个预聚合线程;

根据所述多个预聚合线程从所述消息队列中消费日志数据进行预聚合处理, 得到预聚合数据;

对所述预聚合数据进行聚合计算,得到聚合计算结果;

根据所述聚合计算结果和预设日志预警规则进行日志预警。

进一步地,所述对日志数据进行分类采集,具体包括:

按日志数据中的日志格式、日志级别和日志字段分类日志;

使用日志采集器采集分类后的日志并上传到消息队列。

进一步地,所述根据所述多个预聚合线程从所述消息队列中消费日志数据进 行预聚合,得到预聚合数据,具体包括:

根据所述日志格式判断日志是否为Json格式的日志,如不是,使用预设的 正则表达式转换为JSON格式的日志,再进行预聚合处理;

如是,则直接进行预聚合处理。

进一步地,所述使用预设的正则表达式转换为JSON格式的日志,具体包括:

使用预设的正则表达式对每一行的所述日志进行字符匹配,生成的键值对数 据。

进一步地,根据所述多个预聚合线程从所述消息队列中消费日志数据进行预 聚合处理,得到预聚合数据,还包括:

当对所述日志数据进行预聚合处理后,删除预设时间窗口内的日志数据。

进一步地,所述根据所述聚合计算结果和预设日志预警规则进行日志预警, 具体包括:

所述聚合计算结果符合所述预设预警规则的条件时,将所述预聚合数据写入 数据库。

进一步地,所述根据所述聚合计算结果和预设日志预警规则进行日志预警, 具体包括:

所述聚合计算结果符合所述预设预警规则的条件时,根据所述日志分区预设 的联系人发送预警信息。

根据本发明的另一个实施例,提供一种基于内存的日志预警系统,所述系统 包括:

分类采集模块:对日志数据进行分类采集;

日志分配模块:按照日志类别,将所述日志数据上传至消息队列中对应的消 息集合;其中,所述消息队列包括多个消息集合,每个消息集合对应一种日志类 别;每个消息集合包括多个分区,所述日志数据缓存于所述分区中;

线程启用模块:按照所述分区的数量开启多个预聚合线程;

预聚合处理模块:根据所述多个预聚合线程从所述消息队列中消费日志数据 进行预聚合处理,得到预聚合数据;

聚合处理模块:对所述预聚合数据进行聚合计算,得到聚合计算结果;

预警模块:根据所述聚合计算结果和预设日志预警规则进行日志预警。

根据本发明的又一个实施例,还提供了一种计算机设备,包括存储器和处理 器,所述处理器与存储器耦合,所述存储器中存储有至少一条程序指令或代码, 所述至少一条程序指令或代码由所述处理器加载并执行,以使所述计算机设备实 现权利要求1-7所述的基于内存的日志预警方法。

根据本发明的又一个实施例,还提供了一种计算机可读存储介质,其上存储 有计算机程序,所述计算机程序被执行时实现权利要求1-7中任一项所述的方法 的步骤。

通过本发明,由于将日志进行分类后缓存到指定分区,并按分区进行一次预 聚合处理和一次聚合处理,因此,可以实现日志预警分析可以在内存中实现,进 而可以解决在数据库中分析日志计算处理的速度慢,读写数据的延迟较高,成本 较大问题,达到计算速度快和成本较低的效果。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分, 本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。 在附图中:

图1为本申请实施例提供的本申请的日志预警方法架构图;

图2为本申请实施例提供的应用环境的示意图;

图3为一个实施例中的基于内存的日志预警方法的流程示意图;

图4为一个实施例中的日志采集架构图;

图5为一个实施例中多线程消费示意图;

图6为一个实施例中基于内存的日志预警系统的示意性结构框图;

图7为一个实施例中计算机设备的示意性结构框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述, 显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于 本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的 所有其他实施例,都属于本申请保护的范围。

请参阅图1,为本申请实施例提供的一种基于内存的日志预警系统的一个架 构图,包括采集节点和处理节点,其中,采集节点将采集后的日志上传到消息队 列中,处理节点从消息队列中获取数据并进行处理。

其中,该采集节点可以是计算机设备,例如服务器,台式计算机,笔记本电 脑等,或者还可以是其他具有存储功能的设备,具体此处不做限定。

需要说明的是,在实际应用过程中,该基于内存的日志预警系统还可以包括 更多的设备。例如,还可以包括用户设备,在需要使用该基于内存的日志预警系 统时,用户设备会通过发送指令对采集节点和处理节点进行操作。

基于上述图1所示的基于内存的日志预警系统架构,以下对本申请实施例中 的方法作详细说明。

本申请提供的基于内存的日志预警方法,可以全部在服务器一侧执行,也可 以全部在客户端一侧执行,还可以由服务器和客户端共同执行。在基于内存的日 志预警方法由服务器和客户端共同执行时,可以应用于如图2所示的应用环境中。 其中,客户端102与服务器104通过网络进行通信。

服务器104可以获取到终端102发送的日志处理请求,且服务器104可以执 行日志处理预警。

其中,客户端102执行发送日志处理请求。

其中,客户端102可以但不限于是各种计算机、笔记本电脑、智能手机、平 板电脑和便携式智能设备,服务器104可以用独立的服务器或者是多个服务器组 成的服务器集群来实现。

请参阅图3,为本申请实施例提供的一种基于内存的日志预警方法一个流程 示意图。

步骤301:对日志数据进行分类采集;

在本实施例中,按日志数据中的日志格式、日志级别和日志字段分类日志; 使用日志采集器采集分类后的日志并上传到消息队列。

具体的,首先是确定要分析采集的日志分类,比如linux操作系统日志、物 理服务器硬件日志、nginx日志、网络设备日志、mysql慢查询日志、mysql错误 日志等。其中,日志格式在本实施例中,需要确定日志是否为json格式,有些 日志是可以直接使用json格式的,而另一部分日志,只能输出普通文本格式, 对于业务日志、网络设备等日志;日志级别在本实施例中分为以下四种:DEBUG, WARNING,INFO,ERROR;之后提取日志字段,每行日志需要包含哪些字段,三要 素:日志事件发生的时间戳、日志消息、日志级别(部分场景的没有日志级别), 额外附加字段的选取,举个例子:某一台硬件服务器,需要采集它的硬件事件日 志,需要确定它隶属于的数据中心、可用区、机柜号、U位、IP地址。

参照图4所示,为本实施例的日志采集架构图,在进行上述的日志分类和定 义后,进行日志采集,网络设备日志、服务器硬件日志可以直接发送到syslog 服务器上,其它的比如mysql慢查询日志,mysql错误日志,应用日志,nginx 日志都是以文件的形式存在磁盘上,以上所有涉及到的日志可以通过日志采集器 读取。

步骤302:按照日志类别,将日志数据上传至消息队列中对应的消息集合; 其中,消息队列包括多个消息集合,每个消息集合对应一种日志类别;每个消息 集合包括多个分区,日志数据缓存于分区中。

在本实施例中,将消息队列分为多个消息集合,每个消息集合又分成多个分 区,其中,经过上述日志采集器采集后的日志,按类别上传到每个消息集合中, 每个消息集合内对应缓存一类日志,之后将此类日志中按上述的日志格式、日志 级别和日志字段放置指定的分区中。在日志采集的过程中,主要用于起到异步与 缓冲的作用,防止下游的日志处理程序因为日志量太大的问题,而产生系统崩 溃。

步骤303:按照分区的数量开启多个预聚合线程;

在本实施例中,参照图5所示,按上述创建的分区的数量创建同等数量的预 聚合线程,每个预聚合线程对应处理相应的分区内的日志数据。

步骤304:根据多个预聚合线程从消息队列中消费日志数据进行预聚合处理, 得到预聚合数据;

在本实施例中,将上述分区内的数据开启多个预聚合线程,并将某一分区的 日志进行预聚合处理,计算分区内日志的信息。

具体的,在预聚合处理之前,根据日志格式判断日志是否为Json格式的日 志,如不是,使用预设的正则表达式对每一行的日志进行字符匹配,生成的键值 对数据,即将日志转换为同一的json文件再进行预聚合处理;如是,则直接进 行预聚合处理。

其中,当对日志数据进行预聚合处理后,删除预设时间窗口内的日志数据。

步骤305:对预聚合数据进行聚合计算,得到聚合计算结果;

在本实施例中,上述分多线程处理进行预聚合后的日志数据,同时进行聚合 计算,合并并输出为一条数据,该数据为计算日志信息是否超过预警规则的数据。

步骤306:根据聚合计算结果和预设日志预警规则进行日志预警。

在本实施例中,会以预设的时间窗口为节点,并计算满足所有条件的日志的 数据,看此日志数据综合计算是否超过预设规则,如超过则预警。

具体的,针对每一种日志类型,可以根据预先设置好的日志预警规则,举例 说明,如下所示:

1、5分钟时间窗口内error级别的日志数量>10条,满足条件之后发送 预警通知;

2、5分钟时间窗口内关键字null pointer的数量>5条,满足条件之后 发送预警通知;

3、10分钟时间窗口内总日志数量>10000条,满足条件之后发送预警通 知;

4、5分钟时间窗口内,nginx平均响应时间>1秒,满足条件之后发送预警 通知;

5、5分钟时间窗口内,nginx pv大于200000,满足条件之后发送预警通 知;

6、5分钟时间窗口内,nginx uv大于10000,满足条件之后发送预警通知;

7、5分钟时间窗口内,nginx平均发送字节>1M字节,满足条件之后发送 预警通知;

8.服务器硬件日志中,存在error级别的日志,满足条件之后发送预警通 知;

9.存在mysql慢查询日志,满足条件之后发送预警通知;

10.应用日志错误率(error级别日志的数量/日志总数量*100)>2%,满 足条件之后发送预警;

其中,聚合计算结果符合预设预警规则的条件时,根据日志分区预设的联系 人发送预警信息。具体的,当满足条件之后,根据每种日志设置的联系人,将预 警信息通过各种通讯方式,比如邮件、短信、语音电话的方式通知联系人。如触 发日志预警规则的数据,可以选择执行IT工单系统的http API,创建日志预警工 单,工单会自动派给当前日志的联系人处理;以基于写入到数据库的日志预警数 据,制作日志预警的可视化的数字化大屏。

进一步的,聚合计算结果符合预设预警规则的条件时,将预聚合数据写入数 据库。

具体的,目的是为了进一步统计数据,将上述的预聚合数据存入数据库中, 就可以跟踪更长时间内预警的日志信息,同时,可以计算更长时间的聚合数据, 来进行统计。如:最近半个月,每天触发日志预警的数量趋势;

最近半个月,nginx平均响应时间最长的域名top 10排行榜;

最近半个月,nginx平均响应字节最长的域名top 10排行榜;

最近半个月,应用日志错误率最高的应用top 10排行榜;

最近半个月,,基于触发的日志预警规则的数量统计饼图;

更具体的,具体的,90条日志数据通过日志采集器上传到了消息队列中,由 消息队列的3个分区来保存。每个预聚合线程负责将以上普通格式的数据解析为 json数据,同时计算3个预聚合的结果,以上3个预聚合线程的数据通通过rpc 的方式,发送进行聚合,将3条数据进行聚合合并操作,最终产生1条数据,最 后合并预聚合之后的日志,然后检查预定义的日志预警规则,发送预警信息、记 录日志预警信息、与其它IT系统实现联动。

在一个实施例中,提供了一种基于内存的日志预警系统,如图6所示,包括:

分类采集模块:用于对日志数据进行分类采集;

日志分配模块:用于按照日志类别,将日志数据上传至消息队列中对应的消 息集合;其中,消息队列包括多个消息集合,每个消息集合对应一种日志类别; 每个消息集合包括多个分区,日志数据缓存于分区中;

线程启用模块:用于按照分区的数量开启多个预聚合线程;

预聚合处理模块:用于根据多个预聚合线程从消息队列中消费日志数据进行 预聚合处理,得到预聚合数据;

聚合处理模块:用于对预聚合数据进行聚合计算,得到聚合计算结果;

预警模块:用于根据聚合计算结果和预设日志预警规则进行日志预警。关于 基于内存的日志预警系统的具体限定可参见上文中对于基于内存的日志预警方 法的限定,在此不再赘述。上述基于内存的日志预警系统中的各个模块可全部或 部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于 计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中, 以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,本申请实施例提供的计算机设备, 可以是服务器,也可以是客户端:如图7所示,为本申请实施例提供的计算机设 备的结构示意图。

处理器1701、存储器1702、总线1705、接口1704,处理器1701与存储器 1702、接口1704相连,总线1705分别连接处理器1701、存储器1702以及接口 1704,接口1704用于接收或者发送数据,处理器1701是单核或多核中央处理单 元,或者为特定集成电路,或者为被配置成实施本发明实施例的一个或多个集成 电路。存储器1702可以为随机存取存储器(random access memory,RAM),也 可以为非易失性存储器(non-volatile memory),例如至少一个硬盘存储器。存 储器1702用于存储计算机执行指令。具体的,计算机执行指令中可以包括程序 1703。

本实施例中,该处理器1701调用程序1703时,可以使图7中的管理服务器 执行基于内存的日志预警方法操作,具体此处不再赘述。

应理解,本申请上述实施例提供的处理器,可以是中央处理单元(centralprocessing unit,CPU),还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application-specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用 处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

还应理解,本申请中以上实施例中的计算机设备中的处理器的数量可以是一 个,也可以是多个,可以根据实际应用场景调整,此处仅仅是示例性说明,并不 作限定。本申请实施例中的存储器的数量可以是一个,也可以是多个,可以根据 实际应用场景调整,此处仅仅是示例性说明,并不作限定。

还需要说明的是,当计算机设备包括处理器(或处理单元)与存储器时,本申 请中的处理器可以是与存储器集成在一起的,也可以是处理器与存储器通过接口 连接,可以根据实际应用场景调整,并不作限定。

本申请提供了一种芯片系统,该芯片系统包括处理器,用于支持计算机设备 (客户端或服务器)实现上述方法中所涉及的控制器的功能,例如处理上述方法 中所涉及的数据和/或信息。在一种可能的设计中,芯片系统还包括存储器,存 储器,用于保存必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以 包括芯片和其他分立器件。

在另一种可能的设计中,当该芯片系统为用户设备或接入网等内的芯片时, 芯片包括:处理单元和通信单元,处理单元例如可以是处理器,通信单元例如可 以是输入/输出接口、管脚或电路等。该处理单元可执行存储单元存储的计算机 执行指令,以使该客户端或管理服务器等内的芯片基于内存的日志预警方法步骤。 可选地,存储单元为芯片内的存储单元,如寄存器、缓存等,存储单元还可以是 客户端或管理服务器等内的位于芯片外部的存储单元,如只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存 储器(random access memory,RAM)等。

本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序, 该计算机程序被计算机执行时实现上述任一方法实施例中与客户端或管理服务 器的控制器执行的方法流程。对应的,该计算机可以为上述计算机设备(客户端 或服务器)。

应理解,本申请以上实施例中的提及的控制器或处理器,可以是中央处理单 元(central processing unit,CPU),还可以是其他通用处理器、数字信号处 理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件 组件等中的一种或多种的组合。通用处理器可以是微处理器或者该处理器也可以 是任何常规的处理器等。

还应理解,本申请中以上实施例中的计算机设备(客户端或服务器)或芯片 系统等中的处理器或控制器的数量可以是一个,也可以是多个,可以根据实际应 用场景调整,此处仅仅是示例性说明,并不作限定。本申请实施例中的存储器的 数量可以是一个,也可以是多个,可以根据实际应用场景调整,此处仅仅是示例 性说明,并不作限定。

还应理解,本申请实施例中以上实施例中的计算机设备(客户端或服务器) 等中提及的存储器或可读存储介质等,可以是易失性存储器或非易失性存储器, 或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储 器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、 可擦除可编程只读存储器(erasablePROM,EPROM)、电可擦除可编程只读存储 器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器 (random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制 性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、 动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM, ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存 总线随机存取存储器(direct rambus RAM,DR RAM)。

本领域普通技术人员可以理解实现上述实施例的全部或部分由计算机设备 (客户端或服务器)或者处理器执行的步骤可以通过硬件或程序来指令相关的硬 件完成。程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以 是只读存储器,随机接入存储器等。具体地,例如:上述处理单元或处理器可以 是中央处理器,通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现 场可编程门阵列(FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或 者其任意组合。上述的这些功能究竟以硬件还是软件方式来执行,取决于技术方 案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同 方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

当使用软件实现时,上述实施例描述的方法步骤可以全部或部分地以计算机 程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上 加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功 能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。 计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质 向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、 计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL)) 或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数 据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或 者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半 导体介质等。

本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用 于区别

类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的 术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象 在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变 形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产 品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方 法、产品或设备固有的其它单元。

在本申请实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在 限制本发明。在本申请实施例中所使用的单数形式的“一种”、“”和“该”也旨 在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,在本申请的描 述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B 可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表 示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和 B,单独存在B这三种情况,其中A,B可以是单数或者复数。

取决于语境,如在此所使用的词语“如果”或“若”可以被解释成为“在…… 时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境, 短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定 时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈 述的条件或事件)”。

以上,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照 前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依 然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进 行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实 施例技术方案的范围。

技术分类

06120115627022