基于Clickhouse的日志检索的方法和装置
文献发布时间:2024-04-18 19:58:21
技术领域
本公开总体上涉及计算机技术领域,更具体地涉及一种基于Clickhouse的日志检索的方法和装置。
背景技术
日志包括系统日志、应用程序日志和安全日志等。系统运维和开发人员可以通过日志了解软硬件信息、检查配置过程中的错误及错误发生的原因,从而了解服务器的负荷、性能安全性并及时采取措施纠正错误。
目前业界普遍采用ELK(ElasticSearch+Logstash+Kibana)技术方案来进行日志的采集和检索。其中,ElasticSearch是一种基于Lucene的分布式全文搜索引擎,其分词和检索功能强大,可用于进行日志的检索,Logstash可用于进行日志搜集、过滤等,Kibana则可用于进行日志的可视化展示。然而,使用ElasticSearch的日志检索系统的存储成本较高。
ClickHouse是一种用于联机分析(Online Analytical Processing,OLAP)的列式数据库管理系统(Database Management System,DBMS),其具有高吞吐、快速检索、高压缩比等优点。
发明内容
在下文中给出了关于本公开的简要概述,以便提供关于本公开的一些方面的基本理解。但是,应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图用来确定本公开的关键性部分或重要部分,也不是意图用来限定本公开的范围。其目的仅仅是以简化的形式给出关于本公开的某些概念,以此作为稍后给出的更详细描述的前序。
根据本公开的第一方面,提供了一种基于Clickhouse的日志检索的方法,所述方法包括:接收与要检索的日志相关联的查询请求;将接收到的查询请求转换为适用于Clickhouse的语法的请求并将转换后的请求发送到Clickhouse;以及从Clickhouse接收所检索的日志数据,并将所述日志数据转换为以适用于数据可视化模块的数据格式,以供数据可视化模块使用。
根据本公开的第二方面,提供了一种基于Clickhouse的日志检索的系统,所述系统包括:Clickhouse,被配置为存储和管理日志数据;数据可视化模块,被配置为:发起日志检索的查询请求,以及对检索到的日志数据进行可视化管理;中间件,被配置为:接收与要检索的日志相关联的查询请求,将接收到的查询请求转换为适用于Clickhouse的语法的请求并将转换后的请求发送到Clickhouse,以及从Clickhouse接收所检索的日志数据,并将所述日志数据转换为以适用于数据可视化模块的数据格式,以供数据可视化模块使用。
根据本公开的第三方面,提供了一种用于基于Clickhouse的日志检索的装置,包括:存储器,其上存储有指令;以及处理器,被配置为执行存储在所述存储器上的指令,以执行以根据本公开的第一方面所述的方法。
根据本公开的第四方面,提供了一种计算机可读存储介质,包括计算机可执行指令,所述计算机可执行指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行根据本公开的第一方面所述的方法。
通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其他特征及其优点将会变得更为清楚。
附图说明
构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
参照附图,根据下面的详细描述,可以更清楚地理解本公开,其中:
图1示出了传统的ELK系统的至少一部分的示意图;
图2示出了根据本公开的实施例的基于Clickhouse的系统的至少一部分的示意图;
图3示出了根据本公开的实施例的基于Clickhouse的日志检索的方法的至少一部分的流程图;
图4示出了根据本公开的实施例的基于Clickhouse的日志检索的方法的至少一部分的流程图;
图5示出了根据本公开的实施例的基于Clickhouse的日志检索的方法的至少一部分的流程图;
图6示出了根据本公开的实施例的基于Clickhouse的日志检索的方法的至少一部分的流程图;
图7示出了根据本公开的实施例的基于Clickhouse的日志检索的计算机系统的至少一部分的示意图。
具体实施方式
参考附图进行以下详细描述,并且提供以下详细描述以帮助全面理解本公开的各种示例实施例。以下描述包括各种细节以帮助理解,但是这些细节仅被认为是示例,而不是为了限制本公开,本公开是由随附权利要求及其等同内容限定的。在以下描述中使用的词语和短语仅用于能够清楚一致地理解本公开。另外,为了清楚和简洁起见,可能省略了对公知的结构、功能和配置的描述。本领域普通技术人员将认识到,在不脱离本公开的精神和范围的情况下,可以对本文描述的示例进行各种改变和修改。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。也就是说,本文中的结构及方法是以示例性的方式示出,以说明本公开中的结构和方法的不同实施例。然而,本领域技术人员将会理解,它们仅仅说明可以用来实施的本公开的示例性方式,而不是穷尽的方式。此外,附图不必按比例绘制,一些特征可能被放大以示出具体组件的细节。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其他示例可以具有不同的值。
图1示出了传统的ELK系统100的至少一部分的示意图。如图1所示,ELK系统100可以包括应用服务器、日志采集模块、缓冲模块、日志收集处理模块、日志存储模块以及可视化管理模块等。日志采集模块用于监视日志文件,收集日志事件并转发日志数据,具体而言,可以利用Beats等从应用服务器Service 01、Service 02等采集日志。缓冲模块可以利用Kafka对来自日志缓冲模块的日志进行缓冲处理并传送到日志收集处理模块,日志收集处理模块可以利用服务器端数据处理管道Logstash将来自缓冲模块的日志进行收集处理并传送到日志存储模块。日志存储模块可以利用ElasticSearch存储和索引日志,以供可视化管理模块使用日志数据。可视化管理模块可以包括Kibana和api接口查询模块等,其可以从日志存储模块搜索日志并对日志进行相应的管理利用,诸如,进行分析和展示。
图2示出了根据本公开的实施例的基于Clickhouse的系统200的至少一部分的示意图。如图2所示,该系统200将传统ELK系统100中的ElasticSearch引擎替换为Clickhouse,以利用Clickhouse的高吞吐、快速检索、高压缩比等优点。与图1所示的ELK系统100类似,系统200可以包括应用服务器、日志采集模块、缓冲模块、日志收集处理模块、日志存储模块以及可视化管理模块等。系统200还可以包括中间件,以使得可视化管理模块能够基于来自Clickhouse的数据工作。该中间件采用Golang语言编码实现,将传统ELK系统中的Elasticsearch的DSL语言转换成Clickhouse的sql查询,并将Clickhouse返回的数据以Elasticsearch的数据格式返回给Kibana。此外,不同于传统ELK系统100中的日志收集处理模块采取Logstash进行收集处理,系统200中的日志收集处理模块可以采取Gohangout,其同样采取Golang语言编码实现。应理解的是,图2中示出的仅仅是根据本公开的系统的一个非限制性示例,可以省略其中一个或多个模块,例如,日志检索系统可以仅包括日志存储模块、中间件和可视化管理模块。图2中所示的系统也可以包括未示出的更多附加的模块。
图3示出了根据该实施例的基于Clickhouse的日志检索的方法300的至少一部分的流程图,该方法300可以在日志检索系统的中间件处执行。如图3所示,在S31处,可以接收与要检索的日志相关联的查询请求;在S32处。可以将接收到的查询请求转换为适用于Clickhouse的语法的请求并将转换后的请求发送到Clickhouse;以及在S33处,可以从Clickhouse接收所检索的日志的数据,并将数据转换为以适用于数据可视化模块的数据格式,以供数据可视化模块使用。优选地,可以进一步对接收到的查询语句进行分析,并根据分析的结果确定要发送到Clickhouse的请求,以下结合图4至图6描述这样的优选实施例。
对于需要查询大时间跨度内的部分日志的检索,例如,需要查询一天中的最后1000条数据的检索,传统的方法往往需要由日志存储模块扫描该时间跨度内(例如,该天内)的所有数据,然后根据扫描到的数据来确定所需返回的日志。
在根据本公开的实施例中,在对查询请求的分析的结果指示需要查询时间跨度大的日志的情况下,中间件可以执行以下操作:向Clickhouse发送统计请求;从Clickhouse接收统计数据,并根据统计数据确定要检索的日志所需查询的时间区间;向Clickhouse发送该时间区间的明细请求;以及从Clickhouse接收所述时间区间的日志数据。与上文所述的传统方法相比,根据本公开的实施例的方法不必利用Clickhouse扫描大量数据以得到所需检索的日志,仅需获取时间上的统计数据,根据该统计数据缩小所需检索的时间范围并根据该时间范围更精确地获取所需数据,从而大大减少Clickhouse的数据扫描量,提升日志查询的速度,并且减轻对数据库的压力。
图4示出了根据该实施例的基于Clickhouse的日志检索的方法400的至少一部分的流程图。如图4所示,在S41处,Kibana可以发起请求,需要一天中的最后1000条日志数据以及一天中每一小时的日志量统计;在S42处,中间件可以分析接收到的请求,并在分析的结果指示需要查询时间跨度大的日志的情况下,响应于该请求而向Clickhouse发送统计请求;在S43处,Clickhouse可以计算统计数据,诸如,该统计数据指示一天中每一小时的日志量;在S44处,中间件可以根据接收到的统计数据,确定满足一天中的最后1000条日志数据所对应的时间区间(优选地为最小时间区间,图4中示出的实施例假定该最小时间区间为1小时),并向Clickhouse发送该时间区间的明细请求;在S45处,Clickhouse可以扫描该时间区间内的日志数据(例如,根据日志数据的时间戳)并将在该时间区间日志数据返回给中间件;在S46处,中间件可以对接收到的数据进行进一步处理,诸如转换格式和封装,并将封装好的数据传送到Kibana;在S47处,Kibana可以显示检索到的日志数据(一天中的最后1000条日志数据)和统计数据。
在根据本公开的实施例中,可以对Clickhouse中的日志数据进行分词处理,并根据分词处理的结果通过布隆过滤器建立二级索引(跳数索引),这些二级索引可以分别指向Clickhouse中存储的包括与该二级索引对应的字段的日志数据。在对查询请求的分析的结果指示需要进行关键词模糊查询的情况下,中间件可以执行以下操作:向Clickhouse发送检索日志表结构的请求;从Clickhouse接收检索到的日志表结构;遍历所述日志表结构中包括的字段,以判断Clickhouse是否建有与所述关键词对应的二级索引;如果建有对应的二级索引,则利用与所述二级索引相关联的函数(诸如,hasToken(content,’error’)等)向Clickhouse查询日志数据。
图5示出了根据该实施例的基于Clickhouse的日志检索的方法500的至少一部分的流程图。如图5所示,在S51处,Kibana可以发起请求,需要针对关键词进行模糊查询;在S52处,中间件可以分析接收到的请求,并在分析的结果指示需要针对关键词进行模糊查询的情况下,响应于该请求而向Clickhouse发送检索日志表结构的请求,该日志表结构指示Clickhouse中存储的数据中已建立的二级索引;在S53处,Clickhouse可以将所请求的日志表结构返回给中间件;在S54处,中间件可以根据接收到的日志表结构,遍历该日志表结构中的字段,以判断Clickhouse是否建有与需要进行模糊查询的关键词对应的二级索引,如果建有二级索引,则利用相应的函数向Clickhouse查询对应的日志;在S55处,Clickhouse可以查询所请求的日志数据并将其返回给中间件;在S56处,中间件可以对接收到的数据进行进一步处理,诸如转换格式和封装,并将封装好的数据传送到Kibana;在S57处,Kibana可以显示检索到的日志数据。
在根据本公开的实施例中,由于来自各应用服务器的日志中包括的字段内容或类型等等不一定是固定的,因此可以在Clickhouse中采取Map类型来存储日志数据。在对查询请求的分析的结果指示需要对Map类型的日志数据的内部字段进行查询的情况下,中间件可以将查询请求修改为与该内部字段相关联的请求。
图6示出了根据该实施例的基于Clickhouse的日志检索的方法600的至少一部分的流程图。如图6所示,在S61处,Kibana可以发起请求,查询Map类型存储的日志数据中的内部字段,例如,如图6所示,查询条件可以为person.name:tom,即,需要查询日志中name的内部字段tom;在S62处,中间件可以分析接收到的请求,并在分析的结果指示需要对Map类型的日志数据的内部字段进行查询的情况下,将查询请求修改为与该内部字段相关联的请求,例如,如图6所示,在匹配到检索条件中有x.y查询的情况下,将查询修改为person[‘name’]=‘tom’;在S63处,Clickhouse可以查询所请求的日志数据并将其返回给中间件;在S64处,中间件可以对接收到的数据进行进一步处理,诸如转换格式和封装,并将封装好的数据传送到Kibana;在S65处,Kibana可以显示检索到的日志数据。
利用根据本公开的方法和装置,能够基于Clickhouse的特性利用中间件快速、准确得对日志数据进行检索,从而节约存储空间,提高CPU利用率,并且提高日志查询的速度。
图7是示意性地示出根据本公开的一个实施例的计算机系统700的至少一部分的结构图。系统700包括一个或多个处理器710、一个或多个存储器720、以及通常存在于计算机等装置中的其它组件(未示出)。一个或多个存储器720中的每一个可以存储可由一个或多个处理器710访问的内容,包括可以由一个或多个处理器710执行的指令721、以及可以由一个或多个处理器710来检索、操纵或存储的数据722。
指令721可以是将由一个或多个处理器710直接地执行的任何指令集,诸如机器代码,或者间接地执行的任何指令集,诸如脚本。本文中的术语“指令”、“应用”、“过程”、“步骤”和“程序”在本文中可以互换使用。指令721可以存储为目标代码格式以便由一个或多个处理器710直接处理,或者存储为任何其它计算机语言,包括按需解释或提前编译的独立源代码模块的脚本或集合。指令721可以包括引起诸如一个或多个处理器710来充当本文中的各模型的指令。本文其它部分更加详细地解释了指令721的功能、方法和例程。
一个或多个存储器720可以是能够存储可由一个或多个处理器710访问的内容的任何临时性或非临时性计算机可读存储介质,诸如硬盘驱动器、存储卡、ROM、RAM、DVD、CD、USB存储器、能写存储器和只读存储器等。一个或多个存储器720中的一个或多个可以包括分布式存储系统,其中指令721和/或数据722可以存储在可以物理地位于相同或不同的地理位置处的多个不同的存储装置上。一个或多个存储器720中的一个或多个可以经由网络连接至一个或多个处理器710,和/或可以直接地连接至或并入一个或多个处理器710中的任何一个中。
一个或多个处理器710可以根据指令721来检索、存储或修改数据722。存储在一个或多个存储器720中的数据722可以包括上文所述的一个或多个存储装置710中存储的各项中一项或多项的至少部分。举例来说,虽然本文所描述的主题不受任何特定数据结构限制,但是数据722还可能存储在计算机寄存器(未示出)中,作为具有许多不同的字段和记录的表格或XML文档存储在关系型数据库中。数据722可以被格式化为任何计算装置可读格式,诸如但不限于二进制值、ASCII或统一代码。此外,数据722可以包括足以识别相关信息的任何信息,诸如编号、描述性文字或符号、专有代码、指针、对存储在诸如其它网络位置处等其它存储器中的数据的引用或者被函数用于计算相关数据的信息。
一个或多个处理器710可以是任何常规处理器,诸如市场上可购得的中央处理单元(CPU)、图形处理单元(GPU)等。可替换地,一个或多个处理器710还可以是专用组件,诸如专用集成电路(ASIC)或其它基于硬件的处理器。虽然不是必需的,但是一个或多个处理器710可以包括专门的硬件组件来更快或更有效地执行特定的计算过程,诸如对影像进行图像处理等。
虽然图7中示意性地将一个或多个处理器710以及一个或多个存储器720示出在同一个框内,但是系统700可以实际上包括可能存在于同一个物理壳体内或不同的多个物理壳体内的多个处理器或存储器。例如,一个或多个存储器720中的一个可以是位于与上文所述的一个或多个计算装置(未示出)中的每一个的壳体不同的壳体中的硬盘驱动器或其它存储介质。因此,引用处理器、计算机、计算装置或存储器应被理解成包括引用可能并行操作或可能非并行操作的处理器、计算机、计算装置或存储器的集合。
在说明书及权利要求中的词语“A或B”包括“A和B”以及“A或B”,而不是排他地仅包括“A”或者仅包括“B”,除非另有特别说明。
在本公开中,对“一个实施例”、“一些实施例”的提及意味着结合该实施例描述的特征、结构或特性包含在本公开的至少一个实施例、至少一些实施例中。因此,短语“在一个实施例中”、“在一些实施例中”在本公开的各处的出现未必是指同一个或同一些实施例。此外,在一个或多个实施例中,可以任何合适的组合和/或子组合来组合特征、结构或特性。
如在此所使用的,词语“示例性的”意指“用作示例、实例或说明”,而不是作为将被精确复制的“模型”。在此示例性描述的任意实现方式并不一定要被解释为比其它实现方式优选的或有利的。而且,本公开不受在上述技术领域、背景技术、发明内容或具体实施方式中所给出的任何所表述的或所暗示的理论所限定。
另外,仅仅为了参考的目的,还可以在下面描述中使用某种术语,并且因而并非意图限定。例如,除非上下文明确指出,否则涉及结构或元件的词语“第一”、“第二”和其它此类数字词语并没有暗示顺序或次序。还应理解,“包括/包含”一词在本文中使用时,说明存在所指出的特征、整体、步骤、操作、单元和/或组件,但是并不排除存在或增加一个或多个其它特征、整体、步骤、操作、单元和/或组件以及/或者它们的组合。
在本公开中,术语“部件”和“系统”意图是涉及一个与计算机有关的实体,或者硬件、硬件和软件的组合、软件、或执行中的软件。例如,一个部件可以是,但是不局限于,在处理器上运行的进程、对象、可执行态、执行线程、和/或程序等。通过举例说明,在一个服务器上运行的应用程序和所述服务器两者都可以是一个部件。一个或多个部件可以存在于一个执行的进程和/或线程的内部,并且一个部件可以被定位于一台计算机上和/或被分布在两台或更多计算机之间。
本领域技术人员应当意识到,在上述操作之间的边界仅仅是说明性的。多个操作可以结合成单个操作,单个操作可以分布于附加的操作中,并且操作可以在时间上至少部分重叠地执行。而且,另选的实施例可以包括特定操作的多个实例,并且在其它各种实施例中可以改变操作顺序。但是,其它的修改、变化和替换同样是可能的。因此,本说明书和附图应当被看作是说明性的,而非限制性的。
虽然已经通过示例对本公开的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。在此公开的各实施例可以任意组合,而不脱离本公开的精神和范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本公开的范围和精神。本公开的范围由所附权利要求来限定。
- 一种基于变长记录的安全日志压缩存储和检索方法
- 基于电视机的行为日志采集方法及装置
- 基于SIP协议的日志时间校正方法、装置及存储介质
- 基于聊天日志的摘要生成方法及装置、存储介质及电子终端
- 一种基于ClickHouse集群的日志处理方法及装置
- 一种基于ClickHouse的高可用Kong网关日志分析方法及系统