本发明涉及计算机技术领域,尤其涉及一种分布式日志系统。
背景技术:
随着云计算、移动互联网、物联网的崛起与发展,大数据的时代已经来临。对大数据业务系统进行日志采集与分析,是评价节点主机健康度、对系统出现的问题进行分析、展示各类报表的依据所在。
在云计算环境下,分布式日志系统旨在为分布式集群下的调用链日志、系统日志提供采集、存储和查询服务,主要解决分布式系统日志分散、日志追踪、问题定位等难点问题。
现有技术的分布式日志系统多采用elk架构,所谓elk架构是指基于elasticsearch、logstash、kibana形成的系统,其中elasticsearch是一个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能,logstash是用来进行日志搜集、分析、过滤的工具,为一个动态数据的收集管道,kibana是一个开源工具,可以作为elk架构的分布式日志系统的用户界面,它将收集的数据进行可视化展示,并提供配置、管理elk架构的界面。logstash消耗资源较大,在系统运行时占用的中央处理器(cpu)及内存的量较高,另外传统的elk架构没有消息队列缓存,存在数据丢失的隐患,通常分布式日志系统每天的日志数据达到tb级别,需要分布式日志系统高效地对日志进行采集,并规避日志采集对业务程序的影响,同时,日志采集需要稳定持续,避免日志数据漏采丢失的情况。
进一步地,由于分布式日志系统每天的日志数据达到tb级别,随着系统建设,日志量将越来越多,大量的日志数据存储对磁盘资源带来了很大的挑战,并且日志数据量过大会影响到分布式日志系统对日志检索的效率,同时,分布式日志系统面对采集到的tb级别的日志数据,需要对日志数据进行挖掘分析,实现日志数据的最大利用,现有的分布式日志系统无法实现。
技术实现要素:
本发明的目的在于提供一种分布式日志系统,能够对日志数据进行实时高效的采集,并且能够降低日志数据的数据量,提升日志检索效率。
为实现上述目的,本发明提供一种分布式日志系统,包括多个日志源、与多个日志源连接的采集模块、与采集模块连接的处理及存储模块以及与处理与存储模块连接的日志检索模块;
所述日志源生成原始日志数据;
所述采集模块采集日志源生成的原始日志数据并进行压缩处理产生压缩日志数据传输至处理及存储模块;
所述处理及存储模块对采集模块传输的压缩日志数据进行存储并生成日志索引;所述日志检索模块接收查询条件并传输至处理及存储模块,所述处理及存储模块依据查询条件及日志索引读取与查询条件对应的压缩日志数据产生对应的查询结果并传输至日志检索模块,所述日志检索模块对查询结果进行可视化显示;
所述采集模块为采用go语言编写的模块。
所述分布式日志系统还包括与处理及存储模块以及采集模块均连接的日志分析模块;所述日志分析模块对采集模块的采集状态参数进行获取以监控采集模块的运行状态;所述日志分析模块存储业务量关键字,统计处理及存储模块存储的所有压缩日志数据中业务量关键字在预设的监控时段内的出现次数并对其进行可视化显示。
所述日志分析模块存储告警关键字,统计处理及存储模块存储的所有压缩日志数据中告警关键字在预设的告警时段内的出现次数,当告警关键字在预设的告警时段内的出现次数大于阈值次数时则进行告警。
所述日志分析模块存储日志轨迹关键字范围、业务内容,统计处理及存储模块存储的所有压缩日志数据中具有位于日志轨迹关键字范围的关键字的压缩日志数据内记载的所述业务内容所对应的开始时间、结束时间及处理时长并进行可视化显示。
所述处理及存储模块产生的查询结果包括与查询条件对应的压缩日志数据解压缩得到的解压缩日志数据的文本和/或利用与查询条件对应的压缩日志数据解压缩得到的解压缩日志数据生成的数据信息列表。
多个日志源生成的原始日志数据具有对应的日志类型,所述采集模块及处理及存储模块中均预存有多个日志模板,每一日志模板与一日志类型对应,每一日志模板包括多个描述性信息,所述采集模块采集日志源生成的原始日志数据后,依据原始日志数据的日志类型所对应的日志模板提取原始日志数据内的多个日志内容,该多个日志内容分别与原始日志数据的日志类型所对应的日志模板的多个描述性信息对应,采集模块将原始日志数据内的多个日志内容以及原始日志数据的日志类型所对应的日志模板的模板id作为与原始日志数据对应的压缩日志数据;
所述处理及存储模块接收查询条件后,依据查询条件及日志索引读取与查询条件对应的压缩日志数据,将该压缩日志数据内的模板id对应的日志模板具有的多个描述性信息分别增加至压缩日志数据内的多个日志内容之前,得到解压缩日志数据。
所述处理及存储模块产生的查询结果还包括其存储的所有压缩日志数据中与查询条件对应的压缩日志数据采集时间前后相邻的压缩日志数据解压后得到的解压缩日志数据的文本。
每一日志源均具有日志数据监控器,当一日志源生成原始日志数据后,该日志源的日志数据监控器向采集模块发送采集信号,采集模块在接收到采集信号后对发送采集信号的日志源的原始日志数据进行采集。
所述采集模块每间隔预设的持久化时长将当前其对日志源生成的原始日志数据的采集进度进行持久化。
所述采集模块具有相连接的主采集单及与从采集单元;从采集单元每隔预设的心跳时长向主采集单元发送心跳信号,主采集单元正常采集数据时在接收到心跳信号后传输反馈信号至从采集单元,若从采集单元发出了心跳信号后接收到由主采集单元传输的反馈信号时,采集模块利用主采集单元采集日志源生成的原始日志数据并传输至处理及存储模块,否则采集模块利用从采集单元采集日志源生成的原始日志数据并传输至处理及存储模块。
本发明的有益效果:本发明的分布式日志系统包括多个日志源、与多个日志源连接的采集模块、与采集模块连接的处理及存储模块以及与处理与存储模块连接的日志检索模块,其中,采用go语言编写采集模块,工作时,采集模块采集日志源生成的原始日志数据并进行压缩处理产生压缩日志数据传输至处理及存储模块,处理及存储模块对采集模块传输的压缩日志数据进行存储并生成日志索引,日志检索模块接收查询条件并传输至处理及存储模块,处理及存储模块依据查询条件及日志索引读取与查询条件对应的压缩日志数据产生对应的查询结果并传输至日志检索模块,日志检索模块对查询结果进行可视化显示,能够对日志数据进行实时高效的采集,并且能够降低日志数据的数据量,提升日志检索效率。
附图说明
为了能更进一步了解本发明的特征以及技术内容,请参阅以下有关本发明的详细说明与附图,然而附图仅提供参考与说明用,并非用来对本发明加以限制。
附图中,
图1为本发明的分布式日志系统的结构示意图。
具体实施方式
为更进一步阐述本发明所采取的技术手段及其效果,以下结合本发明的优选实施例及其附图进行详细描述。
请参阅图1,本发明提供一种分布式日志系统,包括多个日志源10、与多个日志源10连接的采集模块20、与采集模块20连接的处理及存储模块30以及与处理与存储模块30连接的日志检索模块40。
所述日志源10生成原始日志数据。
所述采集模块20采集日志源10生成的原始日志数据并进行压缩处理产生压缩日志数据传输至处理及存储模块30。
所述处理及存储模块30对采集模块20传输的压缩日志数据进行存储并生成日志索引。所述日志检索模块40接收查询条件并传输至处理及存储模块30,所述处理及存储模块30依据查询条件及日志索引读取与查询条件对应的压缩日志数据产生对应的查询结果并传输至日志检索模块40,所述日志检索模块40对查询结果进行可视化显示。
重点需要注意的是,所述采集模块20为采用go语言编写的模块,利用go语言在性能、并发性和通道方面的特点,使得采用go语言编写的采集模块20能够实现多核处理模块,实现高效的日志数据采集。
具体地,请参阅图1,所述分布式日志系统还包括与处理及存储模块30以及采集模块20均连接的日志分析模块50。所述日志分析模块50对采集模块20的采集状态参数(包括采集模块状态、ip地址、采集数据大小、采集积压量等等)进行获取以监控采集模块20的运行状态。
具体地,所述日志分析模块50存储业务量关键字,统计处理及存储模块30存储的所有压缩日志数据中业务量关键字在预设的监控时段内的出现次数并对其进行可视化显示。该日志分析模块50可统计压缩日志文件中对应不同的系统、模块、程序中业务量关键字在预设的监控时段内的出现的次数,从而获取关键业务量的波动情况,该预设的监控时段可以为最近5分钟、最近1小时、最近1天、最近3天、最近1周、最近1月及自定义。
具体地,所述日志分析模块50存储告警关键字,统计处理及存储模块30存储的所有压缩日志数据中告警关键字在预设的告警时段内的出现次数,当告警关键字在预设的告警时段内的出现次数大于阈值次数时则进行告警。该日志分析模块50可统计压缩日志文件中对应不同的系统、模块、程序中告警关键字在预设的告警时段内的出现的次数,在次数超过阈值次数时进行告警,该预设的告警时段可以为最近5分钟、最近1小时、最近1天、最近3天、最近1周、最近1月及自定义。
具体地,所述日志分析模块50存储日志轨迹关键字范围、业务内容,统计处理及存储模块30存储的所有压缩日志数据中具有位于日志轨迹关键字范围的关键字的压缩日志数据内记载的所述业务内容所对应的开始时间、结束时间及处理时长从而获得日志轨迹分析结果,并进行可视化显示。该业务内容可以包括多组内容信息,每组内容信息可包括系统名称及业务名称。
具体地,所述处理及存储模块30产生的查询结果包括与查询条件对应的压缩日志数据解压缩得到的解压缩日志数据的文本和/或利用与查询条件对应的压缩日志数据解压缩得到的解压缩日志数据生成的数据信息列表,也即查询结果可以为文本格式或者列表格式。
进一步地,所述处理及存储模块30产生的查询结果还包括其存储的所有压缩日志数据中与查询条件对应的压缩日志数据采集时间前后相邻的压缩日志数据解压后得到的解压缩日志数据的文本,也即具有上下文检索功能。
具体地,多个日志源10生成的原始日志数据具有对应的日志类型,所述采集模块20及处理及存储模块30中均预存有多个日志模板,每一日志模板与一日志类型对应,每一日志模板包括多个描述性信息,所述采集模块20采集日志源10生成的原始日志数据后,依据原始日志数据的日志类型所对应的日志模板提取原始日志数据内的多个日志内容,该多个日志内容分别与原始日志数据的日志类型所对应的日志模板的多个描述性信息对应,采集模块20将原始日志数据内的多个日志内容以及原始日志数据的日志类型所对应的日志模板的模板id作为与原始日志数据对应的压缩日志数据。所述处理及存储模块30接收查询条件后,依据查询条件及日志索引读取与查询条件对应的压缩日志数据,将该压缩日志数据内的模板id对应的日志模板具有的多个描述性信息分别增加至压缩日志数据内的多个日志内容之前,得到解压缩日志数据。
进一步地,基于现有的日志数据可能存在一条日志数据以多行的方式呈现,因此,本发明中,所述采集模块20采集日志源10生成的原始日志数据时对其进行识别产生与该原始日志数据匹配配置的时间格式,该时间格式表示原始日志数据采用单行呈现方式及多行呈现方式中的哪一种。在原始日志数据采用多行呈现方式时,采集模块20依据原始日志数据的日志类型所对应的日志模板提取原始日志数据内的多个日志内容后将多个日志内容合并成一行以进行压缩。采集模块20将压缩日志数据传输至处理及存储模块30的同时将压缩日志数据对应的原始日志数据的时间格式作为该压缩日志数据的时间格式传输至处理及存储模块30,利用处理及存储模块30存储压缩日志数据的时间格式。在处理及存储模块30接收查询条件并依据查询条件及日志索引读取与查询条件对应的压缩日志数据后,处理及存储模块30对压缩日志数据的时间格式进行分析,判断对压缩日志数据进行解压后是否需要以多行方式呈现,若是,则在将该压缩日志数据内的模板id对应的日志模板具有的多个描述性信息分别增加至压缩日志数据内的多个日志内容之前得到解压缩日志数据后,对解压缩日志数据进行分行使其能够以多行方式呈现。
具体地,每一日志源10均具有日志数据监控器(watchservice),当一日志源10生成原始日志数据后,该日志源10的日志数据监控器向采集模块20发送采集信号,采集模块20在接收到采集信号后对发送采集信号的日志源10的原始日志数据进行采集。
具体地,所述采集模块20每间隔预设的持久化时长将当前其对日志源10生成的原始日志数据的采集进度进行持久化,从而避免异常退出后,再次启动时无法定位日志采集进度,而出现日志漏采或者日志重采的情况。该持久化时长可以根据实际需求进行设置,例如可以为30s。
具体地,所述采集模块20具有相连接的主(master)采集单及与从(slave)采集单元。从采集单元每隔预设的心跳时长向主采集单元发送心跳信号,主采集单元正常采集数据时在接收到心跳信号后传输反馈信号至从采集单元,若从采集单元发出了心跳信号后接收到由主采集单元传输的反馈信号时,采集模块20利用主采集单元采集日志源10生成的原始日志数据并传输至处理及存储模块30,否则采集模块20利用从采集单元采集日志源10生成的原始日志数据并传输至处理及存储模块30。
具体地,所述采集模块20还具有对处理及存储模块30的工作状态进行检测的功能,当处理及存储模块30处于异常状态时,采集模块20对其采集的原始日志数据压缩后缓存,待处理及存储模块30恢复正常状态时再继续向其传输压缩日志数据。
需要说明是,本发明的分布式日志系统通过采用go语言编写采集模块,能够对日志数据进行实时高效的采集,工作时,通过利用采集模块采集日志源生成的原始日志数据并进行压缩处理产生压缩日志数据传输至处理及存储模块,能够降低日志数据的数据量,提升日志检索效率,同时通过设置日志分析模块对日志数据中的各类关键词进行统计,能够对日志数据进行挖掘分析,实现日志数据的最大利用。
综上所述,本发明的分布式日志系统包括多个日志源、与多个日志源连接的采集模块、与采集模块连接的处理及存储模块以及与处理与存储模块连接的日志检索模块,其中,采用go语言编写采集模块,工作时,采集模块采集日志源生成的原始日志数据并进行压缩处理产生压缩日志数据传输至处理及存储模块,处理及存储模块对采集模块传输的压缩日志数据进行存储并生成日志索引,日志检索模块接收查询条件并传输至处理及存储模块,处理及存储模块依据查询条件及日志索引读取与查询条件对应的压缩日志数据产生对应的查询结果并传输至日志检索模块,日志检索模块对查询结果进行可视化显示,能够对日志数据进行实时高效的采集,并且能够降低日志数据的数据量,提升日志检索效率。
以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明权利要求的保护范围。