CN117938696A - 一种日志处理方法、读取方法、装置、设备及存储介质 - Google Patents
一种日志处理方法、读取方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117938696A CN117938696A CN202410139934.7A CN202410139934A CN117938696A CN 117938696 A CN117938696 A CN 117938696A CN 202410139934 A CN202410139934 A CN 202410139934A CN 117938696 A CN117938696 A CN 117938696A
- Authority
- CN
- China
- Prior art keywords
- log
- logs
- array
- target field
- values
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000003672 processing method Methods 0.000 title claims abstract description 11
- 238000004458 analytical method Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 description 10
- 230000005540 biological transmission Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 238000013144 data compression Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 210000001072 colon Anatomy 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000005065 mining Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本说明书提供一种日志处理方法、读取方法、装置、设备及存储介质,所述方法包括:获取待处理日志集合,所述待处理日志集合中包含多条日志,所述多条日志包含相同的目标字段;对所述多条日志在所述目标字段中的取值进行去重,将得到的取值写入所述目标字段在日志结构体中对应的第一数组中;在所述日志结构体中增加所述目标字段对应的第二数组,根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
Description
技术领域
本说明书涉及日志处理技术领域,尤其涉及一种日志处理方法、读取方法、装置、设备及存储介质。
背景技术
随着互联网的发展,日志的重要性在各个领域中越发凸显。例如,在云计算领域中,日志用于对各种云服务的监控和审计,便于展示系统和网络的运行状况,并用来诊断和定位问题故障。在大数据领域中,日志是海量数据中的一种,对海量数据的分析和挖掘,可以发现潜在的问题和有价值的数据,为管理决策提供参考。在网络安全领域中,各种安全产品或工具可以产生安全日志,供分析平台来综合分析,以此来发现和预警网络攻击事件,并可以进行溯源。
然而随着这些领域的发展,日志的数据量也呈指数级增长,日志数据体积急速提升,在占用存储的同时,日志传输时的性能损耗问题也日益凸显。
发明内容
为克服相关技术中存在的问题,本说明书提供了一种日志处理方法、读取方法、装置、设备及存储介质。
根据本说明书实施例的第一方面,提供一种日志处理方法,所述方法包括:
获取待处理日志集合,所述待处理日志集合中包含多条日志,所述多条日志包含相同的目标字段;
对所述多条日志在所述目标字段中的取值进行去重,将得到的取值写入所述目标字段在日志结构体中对应的第一数组中;
在所述日志结构体中增加所述目标字段对应的第二数组,根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
可选的,所述根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,包括:查询所述目标字段在日志结构体中对应的第一数组中的取值数量,若所述目标字段在日志结构体中对应的第一数组中仅有一个取值,则所述每条日志对应的索引编号设置为预定义的特殊值。
可选的,所述方法还包括:调用预定义的代码,所述代码由proto文件转换为指定编程语言后得到;
基于所述代码构建空白日志结构体,以用于写入所述待处理日志集合。
可选的,所述方法还包括:将所述日志结构体发送至分析平台进行日志分析。
可选的,所述方法还包括:对所述日志结构体进行压缩。
根据本说明书实施例的第二方面,提供一种日志读取方法,所述方法包括:
获取日志结构体,所述日志结构体中包含目标字段,所述目标字段为所述日志结构体中多条日志包含的相同字段,所述目标字段在所述日志结构体中对应有第一数组和第二数组,所述第一数组中存储有所述多条日志在所述目标字段中去重后的的取值;
从所述目标字段对应的第二数组中读取每条日志在目标字段对应的第一数组中对应的索引编号,所述第二数组中按各条日志之间的排列顺序依次存储有所述多条日志的取值在第一数组中对应的索引编号;
根据所述索引编号,读取所述多条日志在目标字段上的取值。
根据本说明书实施例的第三方面,提供一种日志处理装置,所述装置包括:
第一获取单元,用于获取待处理日志集合,所述待处理日志集合中包含多条日志,所述多条日志包含相同的目标字段;
第一处理单元,用于对所述多条日志在所述目标字段中的取值进行去重,将得到的取值写入所述目标字段在日志结构体中对应的第一数组中;
索引单元,用于在所述日志结构体中增加所述目标字段对应的第二数组,根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
根据本说明书实施例的第四方面,提供一种日志读取装置,所述装置包括:
第二获取单元,用于获取日志结构体,所述日志结构体中包含目标字段,所述目标字段为所述日志结构体中多条日志包含的相同字段,所述目标字段在所述日志结构体中对应有第一数组和第二数组,所述第一数组中存储有所述多条日志在所述目标字段中去重后的的取值;
第二处理单元,用于从所述目标字段对应的第二数组中读取每条日志在目标字段对应的第一数组中对应的索引编号,所述第二数组中按各条日志之间的排列顺序依次存储有所述多条日志的取值在第一数组中对应的索引编号;
读取单元,用于根据所述索引编号,读取所述多条日志在目标字段上的取值。
根据本说明书实施例的第五方面,提供一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如上述第一方面的实施例中所述的方法。
根据本说明书实施例的第六方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述第一方面的实施例中所述方法的步骤。
本说明书的实施例提供的技术方案可以包括以下有益效果:
在本说明书实施例中,基于列式存储思路对日志集合中多条日志的至少一个相同字段中的取值进行去重,只保留去重后的取值,并新增与所述相同字段对应的数组,用于记录每一条日志在所述相同字段中的取值的索引编号,从而实现将重复的取值转换成编号,并且保证在去除冗余值的同时,依旧能够还原完整日志的数据,减小了日志数据的整体体积,并且,通过采用列式存储的思路来批量处理日志,将多条日志的相同字段放到一起,提高了数据压缩率,降低日志数据传输时的功能损耗。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本说明书的实施例,并与说明书一起用于解释本说明书的原理。
图1是本说明书根据一示例性实施例示出的一种日志处理方法的流程图。
图2是本说明书根据一示例性实施例示出的一种列式日志存储的示意图。
图3是本说明书根据一示例性实施例示出的一种优化后的日志存储的示意图。
图4是本说明书根据一示例性实施例示出的一种日志读取方法的流程图。
图5是本说明书根据一示例性实施例示出的一种日志处理装置的框图。
图6是本说明书根据一示例性实施例示出的一种日志读取装置的框图。
图7是本说明书根据一示例性实施例示出的一种电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书的一些方面相一致的装置和方法的例子。
在本说明书使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书。在本说明书和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
随着互联网的发展,日志的重要性在各个领域中越发凸显。相关技术中常采用json或syslog等日志格式,然而由于要携带字段名称信息,以及字符串要用双引号包括,字段名称和字段值之间要用冒号或者等号分割等等,往往数据体积较大,占据较多的日志内容空间,且日志解析时需要正则表达式,传输时的性能上存在较大损耗。
也有一些技术方案采用了protobuf编码的方式来优化日志存储,虽然无需携带字段名称,但当某些字段的值有冗余时,无法去除冗余值,例如每条日志中都有相同的type字段,值都为access时,1万条日志就会有1万个access字段内容,依然存在日志数据体积较大、网络资源消耗高的问题。
因此,本说明书提供了一种日志处理方法,可以缩小日志数据体积,提升日志传输性能。
接下来对本说明书实施例进行详细说明。
如图1所示,图1是本说明书根据一示例性实施例示出的一种日志处理方法的流程图,具体包括以下步骤:
S101,获取待处理日志集合,所述待处理日志集合中包含多条日志,所述多条日志包含相同的目标字段。
具体而言,通过对当前已存储的日志进行定量读取,获得待处理的日志集合,所述待处理日志集合中包括多条日志,且多条日志中存在相同字段,或者,多条日志中至少两条日志存在相同字段,将其中相同的字段作为目标字段。
其中,可以通过设置预设数量,每次提取预定数量的日志以实现对当前已存储的日志进行定量读取;或是通过设置预设时间,每次提取预定时间内产生的的日志以实现对当前已存储的日志进行定量读取。
需要指出的是,在本说明书实施例中,采用列式存储系统对日志进行存储,即在存储日志时具体存储为列的形式,第一列为日志字段名称,其后每一列代表一条日志。通过列式存储日志,能够快速提取日志中的字段,同时减小存储时占用的磁盘空间。
在一些其他的实施例中,也可以通过常规方式存储日志,并逐个提取日志中的字段和对应的日志取值,本说明书对此不作限制。
在一示例性实施例中,由于字符串类型的字段数据体积较大,而数字类型字段本身数据体积较小,因此,所述目标字段中仅包括字符串类型的字段,针对多条日志都包含的其他类型的字符串,例如数字类型字符串,则不进行调整,从而在进行日志处理时减少需要进行操作的字段,提升了处理效率。
举例而言,假设当前存在如下日志内容为待处理日志集合中的内容:
日志1:{“type”:”access”,“timestamp”:1700000001,“src_ip”:”1.1.1.1”,“src_port”:33331,“dst_ip”:”2.2.2.2”,“dst_port”:80,“proto”:”http”,“url”:”/login”,“method”:”GET”,“source”:”3.3.3.3”}
日志2:{“type”:”access”,“timestamp”:1700000002,“src_ip”:”1.1.1.1”,“src_port”:33332,“dst_ip”:”2.2.2.2”,“dst_port”:8080,“proto”:”http”,“url”:”/index”,“method”:”GET”,“source”:”3.3.3.3”}
日志3{“type”:”access”,“timestamp”:
1700000003,“src_ip”:”1.1.1.1”,“src_port”:33333,“dst_ip”:”2.2.2.2”,“dst_port”:80,“proto”:”http”,“url”:”/admin”,“method”:”POST”,“source”:”3.3.3.3”}
日志4:{“type”:”access”,“timestamp”:
1700000004,“src_ip”:”1.1.1.1”,“src_port”:33334,“dst_ip”:”2.2.2.2”,“dst_port”:8888,“proto”:”http”,“url”:”/index”,“method”:”GET”,“source”:”3.3.3.3”}
将上述日志内容以列的形式进行展示,得到如图2所示的日志内容,图2是本说明书根据一示例性实施例示出的一种列式日志存储的示意图。其中,虚线框内的第一列为上述待处理日志集合中日志的字段,后面每一列分别代表日志1~4。由图2可知当前待处理日志集合中所有字段均为四条日志的相同字段,而由于“timestamp”、“src_port”和“dst_port”为数字型字符串,因此将这三个字段以外的所有字段作为目标字段。
在一示例性实施例中,所述方法还包括:调用预定义的代码,所述代码由proto文件转换为指定编程语言后得到;基于所述代码构建空白日志结构体,以用于写入所述待处理日志集合。
具体而言,用户会根据待处理日志集合预先定义对应的proto文件,其中每一个字段都定义成repeated,表明每个字段都是数组,用来存储多条日志的取值。将该proto定义文件通过protobuf的相关工具转换为指定编程语言的代码。需要指出的是,对于同一类型的日志,若日志中的字段没有变化,则所述预先定义的proto文件可重复进行使用。
通过调用所述将生成的代码构建空白日志结构体,所述空白日志结构体中定义了待处理日志中所有字段,所述字段对应的数组用于写入待处理日志集合中的日志数据。
沿用前述举例,则日志结构体具体如下所示:
“syntax="proto2";
packageaccesslog;
messageAccessLog{
repeatedstringlogtype=1;
repeatedint64timestamp=2;
repeatedstringsrc_ip=3;
repeatedint32src_port=4;
repeatedstringdst_ip=5;
repeatedint32dst_port=6;
repeatedstringproto=7;
repeatedstringurl=8;
repeatedstringmethod=9;
repeatedstringsource=10;”
上述日志结构体中每个字段对应有唯一的的标识号,且定义为数组,用于存储多条日志在该字段上的取值,具体的每一个字段数组中相同下标对应的字段属于同一条日志,日志存储在数组中时格式如下,其中,日志下标的数字可根据需求进行预定义:
第x条日志在各个字段中的取值为:
logtype[x-1],timestamp[x-1],src_ip[x-1],src_port[x-1],dst_ip[x-1],dst_port[x-1],proto[x-1],url[x-1],method[x-1],source[x-1]
上述取值分别存储在日志结构体中各个字段对应的数组中。
S102,对所述多条日志在所述目标字段中的取值进行去重,将得到的取值写入所述目标字段在日志结构体中对应的第一数组中。
提取待处理日志集合中的所有字段,针对其中多条日志都包含的目标字段,由于同时对应了多条日志的内容,因此,为目标字段设置对应的数组,用于依次填入每条日志对应的取值。
针对每一个目标字段对应的数组,查找数组中重复的取值,并将所述重复的取值进行去重操作,使得数组中每个不同的取值仅存在一个,将去重后目标字段对应的数组写入目标字段在日志结构体中对应的数组中,并将此数组作为目标字段对应的第一数组。
如图2所示,以字段“method”为例,可知该目标字段下日志1、日志2和日志4的取值重复,都为“GET”,对该取值进行去重,仅留下一个取值。同时,由于日志3对应的取值“POST”不存在重复取值,因此无需处理。则去重后可得到“method”字段对应的第一数组中的取值为“GET”“POST”。
S103,在所述日志结构体中增加所述目标字段对应的第二数组,根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
当完成目标字段中对多条日志对应的取值的去重操作后,在前述日志结构体中增加与所述目标字段对应的索引字段,所述索引字段在日志结构体中对应于与所述目标字段对应的第二数组。
对目标字段在第一数组中的去重后取值进行编号,根据每条日志在目标字段中的取值,与目标字段在第一数组中的去重后的取值进行比对,确定每条日志的取值在第一数组中所对应的取值的编号,将所述编号作为索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
其中,所述目标字段对应的索引字段类型为整形数,具体可以是两个字节的short,也可以是四个字节的int,其取决于每一批日志的最大数量,若数量在65535以内则使用两个字节的short,,若数量在255以内则使用char,若数量大于65535则使用用int。
如图3所示,图3是本说明书根据一示例性实施例示出的一种优化后的日志存储的示意图。以字段“method”为例,在所述日志结构体中增加所述“method”字段对应的索引字段“method_id”,所述索引字段在日志结构体中对应于与所述目标字段对应的第二数组,对第一数组中的取值“GET”和“POST”进行编号,假设编号分别为“1”和“2”。
将日志1~4在字段中的取值与第一数组中保留的取值进行比对,可知日志1、日志2和日志4对应的取值与编号为1的“GET”取值对应,则可得到日志1、日志2和日志4对应的索引编号为“1”,而日志3的取值与编号为2的“POST”取值对应,则可得到日志3对应的索引编号为“2”,将索引编号根据每条日志的顺序依次向所述第二数组中写入相应的索引编号“1”“1”“2”“1”。以此类推,得到目标字段对应的数组和索引字段对应的数值,如图3所示。
将待输入日志集合中的目标字段对应的数组以上述形式写入日志结构体中目,同样的,针对目标字段外的其他字段,将对应的日志取值写入日志结构体中,从而完成日志结构体中待处理日志集合的写入。
沿用前述举例,则得到所述日志结构体为:
“syntax="proto2";
packageaccesslog;
messageAccessLog{
repeatedstringlogtype=1;
repeatedint32logtype_id=2;
repeatedint64timestamp=3;
repeatedstringsrc_ip=4;
repeatedint32src_ip_id=5;
repeatedint32src_port=6;
repeatedstringdst_ip=7;
repeatedint32dst_ip_id=8;
repeatedint32dst_port=9;
repeatedstringproto=10;
repeatedint32proto_id=11;
repeatedstringurl=12;
repeatedint32url_id=13;
repeatedstringmethod=14;
repeatedint32method_id=15;
repeatedstringsource=16;
repeatedint32source_id=17;”
其中每个目标字段对应的第一数组和第二数组分别写入去重后的取值和索引编号。
在一示例性实施例中,查询所述目标字段在日志结构体中对应的第一数组中的取值数量,若所述目标字段在日志结构体中对应的第一数组中仅有一个取值,则所述每条日志对应的索引编号设置为预定义的特殊值。
具体而言,当完成对目标字段的去重后,查询目标字段在日志结构体中对应的第一数组中剩余的取值数量,若所述目标字段在日志结构体中对应的第一数组中仅有一个取值,则说明包含所述目标字段的多条日志在目标字段上的取值全都相同,将每条日志对应的索引编号都设置为预定义的特殊值,用于指示当前字段对应的日志的取值全部相同,以此避免对目标字段中的每一个取值都进行索引再获取取值,提升处理效率。
如图3所示,以字段“type”为例,当前字段去重后对应的第一数组中仅存在一个取值,说明多条日志在该字段上的取值全都相同,则可在定义索引编号时采用预定义得到特殊值,例如“0”,则读取当前日志时,当查询到字段中取值对于的索引编号为“0”时,认为本字段中所有日志中的取值都为同一个值,无需逐个对每条日志的取值进行查询。
通过采用列式存储的思路来批量处理日志,将多条日志的相同字段放到一起,并进行取值去重和增加索引,降低了存储的日志数据体积的同时提升了数据压缩率,降低了日志数据传输时的功能损耗。
在一示例性实施例中,当得到完整的日志结构体后,将所述日志结构体通过网络发送至分析平台进行日志分析。
在一示例性实施例中,在日志结构体进行发送之前,对所述日志结构体进行压缩。具体而言,由于多条日志中相同字段的取值位于同一个数组中,属于连续内存,因此能够提升压缩率,进一步减小日志对应的数据体积大小。
在本说明书实施例中,基于列式存储思路对日志集合中多条日志的至少一个相同字段中的取值进行去重,只保留去重后的取值,并新增与所述相同字段对应的数组,用于记录每一条日志在所述相同字段中的取值的索引编号,从而实现将重复的取值转换成编号,并且保证在去除冗余值的同时,依旧能够还原完整日志的数据,减小了日志数据的整体体积,并且,通过采用列式存储的思路来批量处理日志,将多条日志的相同字段放到一起,提高了数据压缩率,降低日志数据传输时的功能损耗。
如图4所示,图4是本说明书根据一示例性实施例示出的一种日志读取方法的流程图,具体包括以下步骤:
S401,获取日志结构体,所述日志结构体中包含目标字段,所述目标字段为所述日志结构体中多条日志包含的相同字段,所述目标字段在所述日志结构体中对应有第一数组和第二数组,所述第一数组中存储有所述多条日志在所述目标字段中去重后的的取值。
S402,从所述目标字段对应的第二数组中读取每条日志在目标字段对应的第一数组中对应的索引编号,所述第二数组中按各条日志之间的排列顺序依次存储有所述多条日志的取值在第一数组中对应的索引编号;
S403,根据所述索引编号,读取所述多条日志在目标字段上的取值。
具体而言,依次对日志结构体重的多条日志进行读取。当读取第一条日志时,首先读取第一个字段对应的第一数组中的取值,然后对第一字段对应的索引字段下的第二数组中的所引编号进行读取,假设第一条日志在第一字段中的索引编号为“1”,则读取第一数组中索引编号为“1”对应的取值,作为第一条日志中第一字段的取值。以此类推直至完成每条日志中每一个字段的推导。
沿用图1对应的实施例中的举例,获取的日志结构体中的字段及对应的数组数据如图3所示,假设当前在目标字段的第一数组中仅剩一个取值的情况下,设置索引编号特殊值为“0”。
需要指出的是,在本说明书实施例中,每个字段对应的第一数组中存储有去重后的取值,第二数组存储有索引编码,定义第x条日志在第一字段上的索引编号为logtype_id[x-1],其他字段以此类推。
则第一条日志的读取过程包括:
读取第一个字段“logtype”中的取值:首先读取第一字段对应的第二数组中第一条日志对应的索引编码,即logtype_id[0],读取得到对应的索引编码为“0”,则证明第一字段对应的所有日志的取值都相同,第一数组中仅有一个取值,直接读取第一数组中logtype[0]的取值“access”。
读取第二个字段“timestamp”中的取值:由于第二字段不是字符串类型的字段,直接读取timestamp[0]的值。
以此类推,读取第八个字段“url”中的取值:首先读取url_id[0]对应的索引编码,读取得到对应的索引编码为“1”,则读取url[url_id[0]-1]对应的值,即url[1-1],读取url[0]的取值为“/login”。
按照上述算法取出第一条日志在多个字段下的全部取值。
第x条日志的读取过程包括:
读取第y个字段中的取值:首先读取“y索引字段名[x-1]”对应的索引编码,读取得到对应的索引编码为“0”,则直接读取第一数组中“y索引字段名[0]”的取值,读取得到对应的索引编码大于0,则读取“y字段名[y索引字段名[x-1]-1]对应的值。
在一些其他的实施例中,本领域技术人员能够根据需求对目标字段的第一数组和第二数组的编号进行设置,通过其他计算方法得到最终日志取值,但基本的基于列式存储的思想不变,本说明书对此不作限制。
举例而言,若取消特殊值设置,定义第x条日志在第一字段上的索引编号为logtype_id[x],且第一数组中的第一个取值为logtype[1],则读取第一条日志在第一字段上的取值方法即为读取logtype[logtype_id[x]]的值。
在一示例性实施例中,在日志接收端收到日志内容后,如果发送时进行了压缩,则先对日志内容进行解压,得到日志结构体。
通过本实施例,能够快速对图1对应的实施例中的日志结构体进行读取,得到完整的日志集合数据。
与前述方法的实施例相对应,本说明书还提供了装置的实施例。
如图5所示,图5是本说明书根据一示例性实施例示出的一种日志处理装置的框图,所述装置包括:
第一获取单元501,用于获取待处理日志集合,所述待处理日志集合中包含多条日志,所述多条日志包含相同的目标字段;
第一处理单元502,用于对所述多条日志在所述目标字段中的取值进行去重,将得到的取值写入所述目标字段在日志结构体中对应的第一数组中;
索引单元503,用于在所述日志结构体中增加所述目标字段对应的第二数组,根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
在一示例性实施例中,所述根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,包括:查询所述目标字段在日志结构体中对应的第一数组中的取值数量,若所述目标字段在日志结构体中对应的第一数组中仅有一个取值,则所述每条日志对应的索引编号设置为预定义的特殊值。
在一示例性实施例中,所述装置还包括:调用单元504,用于调用预定义的代码,所述代码由proto文件转换为指定编程语言后得到;基于所述代码构建空白日志结构体,以用于写入所述待处理日志集合。
在一示例性实施例中,所述装置还包括:发送单元506,用于将所述日志结构体发送至分析平台进行日志分析。
在一示例性实施例中,所述装置还包括:压缩单元505,用于对所述日志结构体进行压缩。
如图6所示,图6是本说明书根据一示例性实施例示出的一种日志读取装置的框图,所述装置包括:
第二获取单元601,用于获取日志结构体,所述日志结构体中包含目标字段,所述目标字段为所述日志结构体中多条日志包含的相同字段,所述目标字段在所述日志结构体中对应有第一数组和第二数组,所述第一数组中存储有所述多条日志在所述目标字段中去重后的的取值;
第二处理单元602,用于从所述目标字段对应的第二数组中读取每条日志在目标字段对应的第一数组中对应的索引编号,所述第二数组中按各条日志之间的排列顺序依次存储有所述多条日志的取值在第一数组中对应的索引编号;
读取单元603,用于根据所述索引编号,读取所述多条日志在目标字段上的取值。
上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
图7是根据本说明书一示例性实施例示出的一种电子设备的结构示意图。参考图7,在硬件层面,该电子设备包括处理器701、内部总线702、网络接口703、内存704以及非易失性存储器705,当然还可能包括其他业务所需要的硬件。处理器701从非易失性存储器705中读取对应的计算机程序到内存704中然后运行。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现如前述任一实施例示出的一种日志处理方法、投诉方法。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种日志处理方法,其特征在于,包括:
获取待处理日志集合,所述待处理日志集合中包含多条日志,所述多条日志包含相同的目标字段;
对所述多条日志在所述目标字段中的取值进行去重,将得到的取值写入所述目标字段在日志结构体中对应的第一数组中;
在所述日志结构体中增加所述目标字段对应的第二数组,根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
2.根据权利要求1所述的方法,其特征在于,所述根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,包括:
查询所述目标字段在日志结构体中对应的第一数组中的取值数量,若所述目标字段在日志结构体中对应的第一数组中仅有一个取值,则所述每条日志对应的索引编号设置为预定义的特殊值。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
调用预定义的代码,所述代码由proto文件转换为指定编程语言后得到;
基于所述代码构建空白日志结构体,以用于写入所述待处理日志集合。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述日志结构体发送至分析平台进行日志分析。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述日志结构体进行压缩。
6.一种日志读取方法,其特征在于,包括:
获取日志结构体,所述日志结构体中包含目标字段,所述目标字段为所述日志结构体中多条日志包含的相同字段,所述目标字段在所述日志结构体中对应有第一数组和第二数组,所述第一数组中存储有所述多条日志在所述目标字段中去重后的的取值;
从所述目标字段对应的第二数组中读取每条日志在目标字段对应的第一数组中对应的索引编号,所述第二数组中按各条日志之间的排列顺序依次存储有所述多条日志的取值在第一数组中对应的索引编号;
根据所述索引编号,读取所述多条日志在目标字段上的取值。
7.一种日志处理装置,其特征在于,包括:
第一获取单元,用于获取待处理日志集合,所述待处理日志集合中包含多条日志,所述多条日志包含相同的目标字段;
第一处理单元,用于对所述多条日志在所述目标字段中的取值进行去重,将得到的取值写入所述目标字段在日志结构体中对应的第一数组中;
索引单元,用于在所述日志结构体中增加所述目标字段对应的第二数组,根据每条日志在所述目标字段上的取值确定其在所述第一数组中对应的索引编号,并按各条日志之间的排列顺序依次向所述第二数组中写入相应的索引编号。
8.一种日志读取装置,其特征在于,包括:
第二获取单元,用于获取日志结构体,所述日志结构体中包含目标字段,所述目标字段为所述日志结构体中多条日志包含的相同字段,所述目标字段在所述日志结构体中对应有第一数组和第二数组,所述第一数组中存储有所述多条日志在所述目标字段中去重后的的取值;
第二处理单元,用于从所述目标字段对应的第二数组中读取每条日志在目标字段对应的第一数组中对应的索引编号,所述第二数组中按各条日志之间的排列顺序依次存储有所述多条日志的取值在第一数组中对应的索引编号;
读取单元,用于根据所述索引编号,读取所述多条日志在目标字段上的取值。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-6中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如权利要求1-6中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410139934.7A CN117938696A (zh) | 2024-01-31 | 2024-01-31 | 一种日志处理方法、读取方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410139934.7A CN117938696A (zh) | 2024-01-31 | 2024-01-31 | 一种日志处理方法、读取方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117938696A true CN117938696A (zh) | 2024-04-26 |
Family
ID=90755774
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410139934.7A Pending CN117938696A (zh) | 2024-01-31 | 2024-01-31 | 一种日志处理方法、读取方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117938696A (zh) |
-
2024
- 2024-01-31 CN CN202410139934.7A patent/CN117938696A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108932257B (zh) | 多维度数据的查询方法及装置 | |
CN108205577B (zh) | 一种数组构建、数组查询的方法、装置及电子设备 | |
CN111352935B (zh) | 一种块链式账本中的索引创建方法、装置及设备 | |
CN109857744B (zh) | 稀疏张量计算方法、装置、设备及存储介质 | |
CN111367976A (zh) | 基于java反射机制的excel文件数据的导出方法及装置 | |
CN111475105A (zh) | 监控数据存储方法、设备、服务器及存储介质 | |
CN111563109A (zh) | 基数统计方法、装置、系统、设备和计算机可读存储介质 | |
US20200226112A1 (en) | System and method of Bloom Filter for Big Data | |
CN110019347B (zh) | 一种区块链的数据处理方法、装置及终端设备 | |
KR20160113167A (ko) | 최적화된 데이터 콘덴서 및 방법 | |
US20230153455A1 (en) | Query-based database redaction | |
CN117938696A (zh) | 一种日志处理方法、读取方法、装置、设备及存储介质 | |
CN115858322A (zh) | 日志数据处理方法、装置和计算机设备 | |
CN111444194B (zh) | 一种块链式账本中索引的清除方法、装置及设备 | |
CN113505153B (zh) | 一种基于iOS系统的备忘录备份方法和相关设备 | |
CN115658680A (zh) | 数据存储方法、数据查询方法和相关装置 | |
CN111310088A (zh) | 一种页面渲染方法及装置 | |
CN117251384B (zh) | 一种接口自动化测试用例生成方法及系统 | |
US10037148B2 (en) | Facilitating reverse reading of sequentially stored, variable-length data | |
CN112364007B (zh) | 基于数据库的海量数据交换方法、装置、设备和存储介质 | |
CN116821102B (zh) | 数据迁移方法、装置、计算机设备和存储介质 | |
CN116821090A (zh) | 金融系统迁移测试方法、装置、计算机设备和存储介质 | |
CN116910069A (zh) | 数据库更新方法、装置、计算机设备和存储介质 | |
CN116881289A (zh) | 集合数据处理方法、装置、计算机设备和存储介质 | |
CN118193532A (zh) | 数据处理方法、装置、计算机设备、存储介质和产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |