CN112800008A - 日志消息的压缩、搜索和解压缩 - Google Patents
日志消息的压缩、搜索和解压缩 Download PDFInfo
- Publication number
- CN112800008A CN112800008A CN202011282843.7A CN202011282843A CN112800008A CN 112800008 A CN112800008 A CN 112800008A CN 202011282843 A CN202011282843 A CN 202011282843A CN 112800008 A CN112800008 A CN 112800008A
- Authority
- CN
- China
- Prior art keywords
- log
- numeric
- dictionary
- expression
- query
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24549—Run-time optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/156—Query results presentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24547—Optimisations to support specific applications; Extensibility of optimisers
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Library & Information Science (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
日志消息被压缩、搜索和解压缩。一个词典用于存储在日志消息中找到的非数字表达式。在日志消息中找到的数字表达式和非数字表达式都由占位符表示,它们是一串日志“类型”信息。另一个字典用于存储日志类型信息。压缩的日志消息包含日志类型字典的键和值的序列,这些值是非数字字典的键和/或数字值。可以通过将搜索查询解析为针对压缩日志消息的字典和/或内容的子查询来执行搜索。字典可以引用包含许多日志消息的段,因此对于一些搜索不需要考虑所有日志消息。
Description
相关申请的交叉引用
本申请要求享有于2019年11月14日提交的美国临时申请No.62/935094的权益,其通过引用包含于此。
背景技术
今天的技术公司每天可以生成PB级的日志。这些日志数据可用于各种任务分析,包括故障诊断、入侵检测、安全取证、获取业务洞察力、趋势分析和资源优化。例如,当计算机系统遇到错误或安全入侵时,日志通常是工程师用来搜索根本原因的主要或唯一的信息源。
发明内容
根据本说明书的一方面,一种非暂时性计算机可读介质,包括以下指令:使用定界符将日志消息标记化为标记序列,并解析所述标记序列以区分数字变量和字典变量。所述解析包括:如果标记符合数字模式,则将标记标识为变量的数字表达式;如果所述标记不符合数字模式,则将所述标记标识为变量的非数字表达式。所述指令还用于将键分配给标识的非数字表达式,所述键通过非数字表达式字典与所述标识的非数字表达式相关联;所述指令还用于存储压缩日志消息,作为所述标识的非数字表达式和任何标识的数字表达式的所述键,所述键按照所述标记序列定义的顺序来排列。
根据本说明书的另一方面,一种非暂时性计算机可读介质,包括以下指令:接收查询以搜索多个压缩日志消息,并基于所述查询生成子查询。每个子查询都是一个非数字表达式子查询,可以在存储变量非数字表达式的非数字表达式字典上执行;或是一个日志类型的子查询,可以在存储日志信息的日志类型字典上执行,所述日志信息不包括变量和数值的表达式;或是一个数字子查询,可以在引用日志类型字典的多个压缩日志消息上执行。所述指令还用于执行子查询并输出子查询的执行结果的集合。
根据本说明书的另一方面,一种非暂时性计算机可读介质,包括以下指令:解析压缩的日志消息以区分数值和字典键。所述解析包括:将数值识别为保留值范围之外的值,并将键识别为所述保留值范围内的值。所述指令还用于在非数字表达式字典中查找已标识的键,以获得变量的非数字表达式,并将解压缩后的日志消息作为具有任何标识的数值的非数字表达式输出。
附图说明
图1是用于处理日志消息的系统的框图。
图2是用于压缩日志消息的系统的框图。
图3是用于压缩和解压缩日志消息的字典,以及字典与压缩的日志消息的关联关系的框图。
图4是日志类型和值的有序序列之间的关系的框图,该值可以包括数字值和/或非数字表达式字典的键。
图5是具有实际示例的压缩日志消息的方法的流程图。
图6是日志消息的段与词典之间的关系的框图。
图7是用于搜索日志消息的系统的框图。
图8是示出示例性搜索短语、子查询和子查询的组合的表。
图9是搜索压缩日志消息的方法的流程图。
图10是具有实际示例的对压缩的日志消息进行解压缩的方法的流程图。
图11是高速缓存段的框图。
图12是基于查询创建高速缓存段的方法的流程图。
图13是查询包括高速缓存段的段的方法的流程图。
图14是示出测试日志的表。
图15是示出摄入试验结果的表。
图16是示出比较压缩试验结果的表。
图17是示出测试的搜索查询和查询时间的表。
具体实施方式
海量的日志信息带来了巨大的挑战。首先,存储日志可能会占用大量资源且成本很高。据估计,日志存储的资本折旧和运营成本的下限约为每月2美分/GB。Annamalai等人:“共享碎片:使用akkio大规模管理数据存储位置”;第13届USENIX操作系统设计和实现专题讨论会(OSDI18)(加利福尼亚州卡尔斯巴德,2018年10月),USENIX协会,第445-460页。对一家每天生成1PB日志的公司来说,保留一年内生成的日志可以换算为每年9200万美元。
另外,搜索大量日志也需要大量计算资源。各种常规的日志搜索解决方案通过计算日志的索引并对索引进行搜索来进行操作。索引的大小与日志大小处于相同的数量级,因此使用此类工具需要相当数量的资源。因此,这些解决方案的用户可以选择采用日志保留期限,例如,两周。早于该时间段的日志将被删除并删除其索引。这意味着此类工具通常仅用于在已定义且相对较短的保留期内的日志搜索。
此外,通常会使用常用压缩工具(例如,gzip)来压缩日志以节省空间。但是,用户无法搜索和分析压缩的日志,因为必须先对日志进行解压缩。解压缩大量日志数据的速度往往很慢。另外,对未压缩日志进行搜索操作会消耗相对大量的计算资源。因此,实际上,一旦日志被压缩(例如,使用gzip),再次对其进行分析就变得困难且不切实际。
针对这些问题的各种已知解决方案都需要访问生成日志的程序、可执行文件或源代码。例如,一种类型的压缩算法分析源代码并建立日志消息的模型,特别是对于变量和静态文本,并使用该模型来压缩日志消息。但是,通常情况是,程序运行方不愿或无法将其提供给日志存储解决方案的供给方。可能是由于各种原因(例如,安全性、商业原因和复杂性)而导致这种情况,因为生成大量日志数据的程序通常是相互协作的程序构成的复杂网络,而不是单个文件。
本说明书描述的技术提供了基于日志消息内容的日志消息的有效压缩、搜索和解压缩,且无需访问生成日志消息的一个或多个程序。压缩是无损的,即,解压缩的日志消息与原始日志消息相同。此外,本说明书描述的技术提供了在不解压缩的情况下搜索日志数据。
在日志消息中标识变量值的表达式和静态文本。单独的词典可用于存储变量值,特别是非数字表达式,和静态文本。每个压缩日志消息可以包括用于静态文本的标识符/键、用于变量值的标识符/键的列表、时间戳以及其它编码的变量值(例如,数值)。每个键都是静态文本字典或变量值字典的索引。
与常规技术相比,本说明书描述的技术提供了多种优点。可以节省存储空间。压缩日志消息可能只需要原始日志消息所需存储空间的2.3%。
搜索可以更有效,因为可以直接在压缩日志消息上执行搜索而无需解压缩。压缩日志的大小显著减小,使得搜索性能显著提高。搜索速度可以比搜索原始未压缩日志快100-1000倍。
表达式搜索运算符是可能的。本说明书描述的技术支持复杂的查询,例如,正则表达式(regex)、分组、计数、在特定时间范围内搜索日志、运行命令管道(例如,regex|分组|计数)。
此外,本说明书论述的技术支持应用编程接口(API)。用户可以通过查询API运行任何自定义日志分析程序。这样,可以执行多种多样的日志分析。
图1示出了示例系统10,其被配置为,压缩日志消息12以生成压缩日志消息14。系统10还可以存储压缩日志消息14,并提供对压缩日志消息14的搜索。原始日志消息12可以在压缩后删除。就如将要在本说明书中进一步讨论的,压缩是无损的。
系统10可以包括驻留在诸如服务器的计算设备上的处理器20、存储器22和指令24。可以使用一组互连的服务器,例如,服务器集群。系统10可以由有时被称为“云”的分布式计算机网络来实现。
处理器20可以包括中央处理器(CPU)、微控制器、微处理器、处理核心、处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)或能够执行指令的类似设备。处理器20可以与由非暂时性计算机可读介质实现的存储器22协作,该计算机可读介质可以是对指令24进行编码的电子、磁、光学或其它物理存储设备。所述计算机可读介质可以包括,例如,随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存、存储盘、光驱或类似设备。
指令24是可执行的,或者可以被解释以生成处理器20可执行的指令。指令24可以实现本说明书论述的技术,例如,日志消息的压缩、搜索和解压缩。
日志消息可能由于各种原因由程序生成。日志消息通常存储在文件中,例如,文本文件。一个示例日志文件存储了一系列日志消息,文件的每一行对应一条消息。存在许多其它示例,例如,跨越多行的日志消息。下面是一个示例日志文件的片段:
2018-07-24 06:32:11.995 INFO File Upload job_6368file uploaded byuser user3994,file-ID:34D0058
2018-07-24 06:33:43.151INFO Job job_2936 submitted by user admin128is completed,job completion time:12.863 second
2018-07-24 06:33:52.003,user admin128 logs out
The below example log message from this snippet will be referenced invarious examples discussed herein:
2018-07-24 06:33:43.151 INFO Job job_2936 submitted by user admin128is completed,job completion time:12.863 second
本说明书讨论的技术对日志消息本身进行操作,不需要访问生成日志消息的程序或其源代码。即,在没有对日志消息的格式或内容的进一步了解的情况下处理原始日志数据。
如图2所示,通过标记化日志消息30以获得一组标记32并填充和/或引用字典34、36来执行压缩。可以使用多个不同的词典34、36。压缩日志消息38包括字典34、36的键40以及未存储在字典34、36中的标记32的值42。值42的示例包括原始日志消息30中时间戳的表示以及原始日志消息30中包含的数值。
字典34、36可以包括非数字表达式字典34和对数类型字典36。可以想到,静态文本通常占据日志消息中的大部分空间,但高度重复,而变量的表达式通常较少重复且较小。这样,词典识别并分离每个日志消息的这些组件。此外,由于许多日志消息都包含时间戳,因此时间戳的标识和分隔也可以提高效率,尤其是在将这些时间戳从文本转换为数字格式时尤其如此。
可以通过解析日志消息30来标识时间戳,以将日志消息30的字符与多个不同的时间戳模式50进行比较。然后可以将时间戳转换为整数时间戳,以将其存储为压缩日志消息38中的值42。整数时间戳可以是Unix纪元时间戳。可以以固定大小(例如,64位)存储时间戳。可以针对一组日志消息测试各种不同的时间戳模式。时间戳模式可以是用户可配置的,以便可以找到特定的预期时间戳格式。在上面的示例日志消息中,“2018-07-2406:33:43.151”可以转换为“1532414023151”的时间戳,这是以毫秒为单位的Unix纪元时间。
时间戳可以用于彼此分隔日志消息30。也就是说,时间戳可用于将单个日志消息30与存储在文件中的一系列日志消息30分隔开。可以预期时间戳位于每个日志消息30的开始。这可以是可配置的,例如,通过指示时间戳位于日志消息30末尾的用户选项。另外,如果未检测到时间戳,则可以使用换行符来分隔日志消息30。
可以使用定界符44(例如,单个定界符或一组定界符)来执行标记化。一组定界符的示例包括除以下字符外的任何字符:
1、字母从“a”到“z”,从“A”到“Z”;
2、数字从“0”到“9”;以及
3、字符“+”、“-”、“.”、“/”或“\”。
即,一组定界符44可以是除上述字符之外的所有ASCII字符。因此,上面的示例日志消息包含以下定界符:“”(空格)、“_”、“,”和“:”。这样,示例日志消息可以分为以下标记(不包括定界符和时间戳):
INFO
Job
job
2936
submitted
by
user
admin128
is
completed
job
completion
time
12.863
second
在各种示例中,非数字表达式字典34用于存储由生成日志消息30的程序使用的变量的非数字表达式。出于可读性考虑,许多程序将变量(无论是否为数字)表示为非数字表达式,特别是在日志消息中。非数字变量表达式(或值)可以包括字母、字母和数字的组合、或其它不显示为普通数字的形式。前导为零的整数也可以视为非数字表达式。变量的非数字表达式的示例包括“+23”、“00232”、“user123”和“-23.-3”。非数字表达式字典34的非数字表达式键40可以存储在压缩日志消息38中。
另一方面,出现在日志消息中的普通数字没有存储在字典34、36中,而是作为值42存储在压缩日志消息中。可以想到的是,日志消息中表达的普通数字带有唯一或不可预测的值,因此不值得考虑进行字典压缩。普通数字是符合数字模式46的标记。
示例性数字模式46将整数定义为一个或多个数字(0-9)的连续序列,带有或不带有前导负号(“-”)且不带有前导零(填充零)。例如,来自示例日志消息的标记“2936”被识别为整数表达式。此示例日志消息的所有其它标记都不是整数表达式。作为另一个示例,“-23”也是整数表达式。非整数表达式的示例包括“+23”(因为它具有前面的加号),“00232”(因为它被零填充)和“user123”(因为它包含字母字符)。
数字模式46还可将浮点数定义为一个或多个数字(0-9)和小数点(“.”)的连续序列,带有或不带有前导负号(“-”)。数字模式46还可以对浮点数中的位数进行限制,例如,少于15位。浮点表达式的示例包括“12.863”和“-352.00”。非浮点表达式的示例包括“1.123456789123456”和“-23.-3”。
出现在日志消息30中的数字,无论是整数还是浮点数,都可以作为具有相同位长度(例如,64位)的值42存储在压缩日志消息38中。整数可以直接编码为64位有符号整数。浮点数可以被编码为64位双精度浮点数。例如,日志示例中的标记“12.863”是浮点表达式,可以将其转换为“0x4029b9db22d0e560”进行存储。对浮点数可以强制执行少于15位数的限制,以允许浮点数存储为64位的表示形式。
指令24可以通过将数字模式46应用于每个标记32,并且将符合数字模式46的任何标记32视为数字,来区分数字和非数字表达式。
另外,为了有助于将信息存储在64位块中,数字模式46可以定义保留值的范围,例如,262到263-1。保留值的范围可用于对字典键40编码,如下所述,因此该范围内的数字不解释为数字。
在各种示例中,可以将附加模式48应用于已确定不是数字的标记32,以便找到非数字变量表达式。即,可以针对非数字变量模式48测试标记32,以确定针对数字模式46测试后的一致性。非数字变量模式48可能需要标记32来包含数字。这样,当应用于不符合数字模式并因此而不是数字的标记32时,非数字变量模式48识别不是数字但包含数字的标记32。非数字变量表达式的示例包括:上面示例日志消息中的“admin128”,以及诸如“+23”、“00232”、“user123”、“003.2”和“-23.-3”之类的标记。
这样,方案46、48可以被级联,使得第一次针对模式46测试标记32,然后,如果未能遵循第一次的模式46,则第二次针对模式48进行测试。可以使用模式46、48的任意数量和排列。因此,标记32可以被分类和相应地处理。因此,所有模式46、48都未能被确认的标记32可被视为传达日志消息类型、提供上下文或用于变量表达以外的目的的信息。这样的信息可以被认为是静态文本,并且在本说明书中被称为日志类型信息。在某些情况下,日志类型信息有时可能实际上包含变量的表达式。发生这种情况是因为模式46、48是基于预期的日志内容,而不是基于程序代码的检查。但是,这被认为是可以接受的折衷方案。此外,可以定义和完善模式46、48的定义及其层次结构,以减少、最小化或防止将变量表达式错误分类为日志类型信息。
日志类型字典36存储日志类型信息,即,不符合模式46、48的信息。日志类型字典36的日志类型键40可以存储在压缩日志消息38中。
因此,日志消息30可以分为相对动态的信息,例如,时间戳、数字值以及非数字表达式字典34的键40;相对静态的信息,例如,日志类型字典36的键40。因此可以生成有效的压缩日志消息38。
图3示出了示例压缩日志消息38。压缩日志消息38可以存储时间戳60、日志类型键62和变量序列64。
如上所述,时间戳60可以是整数格式,例如,Unix纪元时间戳。
日志类型键62是对日志类型字典36的唯一引用,该字典存储与一组日志类型键68相关的日志类型信息66。当日志消息被压缩时,在日志类型字典36中搜索在日志消息中标识的日志类型信息。如果找到,则将关联的日志类型键62添加到压缩日志消息38中。如果未找到,则将新的日志类型键62与新的日志类型信息一起添加到字典36中,并进一步添加到压缩日志消息38中。
变量序列64包含数字表达式70和用于非数字表达式的键72。变量序列64可以使用排序模式,使得各个数字表达式70和键72的顺序与它们在原始日志消息中出现的顺序相同。
非数字表达式键72是对非数字表达式字典34的唯一引用,该词典存储与一组非数字表达式键76相关的非数字值74。当日志消息被压缩时,在非数字表达式字典34中搜索在日志消息中标识的非数字表达式。如果找到,则将关联的非数字表达式键72添加到压缩日志消息38中。如果未找到,则将新的非数字表达式键72与新标识的非数字表达式一起添加到字典34中,并进一步添加到压缩日志消息38中。
这样,压缩日志消息38存储对应字典36、34的键62、72,以及未编码到字典的值,例如,数字70和时间戳60。
日志类型信息66、非数字表达式键72以及其它值(例如,数字70和时间戳60)可以具有排列模式,以便可以无损地从压缩日志消息38恢复原始日志消息。
如图4所示,示例排列模式将日志类型66定义为具有占位符82的文本80。文本80可以包括未标识为数字或非数字表达式的标记,以及用于执行标记化的定界符。即,文本80可以是日志消息30中的信息,该信息不符合用于解析日志消息30中的标记32的模式46、48(图2)。
占位符82是插入到文本80中,标识非数字表达式和数字值的位置的代码。占位符82替换日志类型66中的非数字表达式和数值,并且可以指定如何解释被替换的值。压缩日志消息38的变量序列64中的各个键72和数字70的顺序,与日志类型66的文本80中的占位符82的顺序保持相同,以便于在重建原始日志消息时进行简单替换。
示例性占位符82包括整数占位符和浮点占位符。示例整数占位符可以同时替换整数数值和非数值表达式。当在数字模式46中使用一定范围的保留值84时,这样是可能的。例如,落入该范围(例如,262至263-1)内的变量序列64的元素可以被解释为键72,而范围84之外的元素可以被解释为整数。在某种意义上,整数空间被重载以存储整数和用于非数字表达式的键72。整数占位符的示例是“0x11”。
示例浮点占位符可以提供信息以正确表示浮点数,该浮点数可以被存储为整数70。示例浮点占位符不同于整数占位符,它进一步编码转换信息。例如,一个字节的值“0x12”可以与另一个字节组合,其中前4位用于存储小数点之前的位数,后4位存储小数点之后的位数。这允许无损重建原始浮点值。例如,浮点表达式“12.863”可以由日志类型66的文本80中的占位符“0x1223”表示,其中第二个字节“0x23”表示该数字小数点之前和之后分别有2位数字和3位数字。
可以将占位符82转义,例如,当原始日志消息中包含占位符时。原始日志消息中存在的占位符可以使用预定的转义字符进行转义,例如,反斜杠“\”。具体地说,从原始日志消息生成日志类型时,可以将原始日志消息中的任何现有占位符和转义字符修改为以转义字符开头。然后,在对压缩的日志消息进行解压缩时,未转义的占位符将替换为变量值,而转义的占位符也将被取消转义,以逆转转义过程。
另外,使用字典34、36可以允许对数据进行有用的混淆。例如,可以通过改变非数字表达式字典34中的用户名的值74,来实现从所有日志消息中混淆用户名,例如,“johnsmart9”。可以使用表查找(值74作为输入,混淆名称作为输出)对值74进行哈希处理,甚至通过在字典34中将值74直接替换为混淆值来更改值74。类似地,如果用户希望从某个日志类型中隐藏所有用户名,则他们可以简单地修改字典36中的日志类型66以包含特殊的占位符来代替用户名占位符82。特殊占位符可能指示系统在解压缩期间应跳过相应的变量,而将其替换为通用字符串。
图5示出了结合示例值来压缩日志消息120的示例方法100。方法100可以由可与存储器和处理器一起使用的指令来实现。
在方框102处,在日志消息120中解析时间戳122(如果有的话)。可以将多个时间戳模式应用于日志消息120以检测时间戳。标识的时间戳122可以被转换成整数表示124,例如,Unix纪元时间戳。
在方框104处,使用一组定界符将日志消息120的其余部分标记化。获得标记126的有序序列。
在方框106处,分析标记126以识别变量的表达式。在各种示例中,变量表达式被认为是数字和包含数字的文本。可以将数字模式应用于每个标记以确定该标记是否是数字表达式,即,数字。标记126可能被标识为数字表达式,例如,整数表达式128和浮点表达式130。非数字表达式132可以是包含至少一个数字的一系列字母或其它字符。可以应用非数字模式。可以按顺序应用数字模式和非数字模式,以便首先将标记标识为数字,然后测试任何未标识为数字的标记126,以确定它们是否为非数字表达式。
标识为数字或非数字表达式的标记126可以转换为通用格式,例如,64位值。这样的值表示数字表达式的实际值,或者在非数字表达式的情况下,它是字典关键字,用于在字典中查找非数字表达式。
在方框108处,非数字表达式字典134被用于在标记126中标识的任何非数字表达式132。为匹配的非数字表达式获得字典134中的键或ID。如果非数字表达式不在字典134中,则将其添加到字典134新建的键或ID下。
在方框110,标识日志类型136。日志类型可以作为在标识数字和非数字变量表达式,以及定界符之后,留存部分的标记。换句话说,日志类型136可以是没有时间戳的原始日志消息,而且数字和非数字变量表达式已被占位符替换。占位符可以包括作为非数字表达式占位符的双重用途的整数占位符138,和描述如何解析浮点数表示的浮点占位符140。
在方框112处,为标识的日志类型136引用日志类型字典142。针对匹配的日志类型136,获得字典142中的关键字或ID。如果在字典142中不在日志类型136,则将其添加到字典142新建的键或ID下。
在方框114处,生成压缩日志消息144。压缩日志消息144可以存储在数据库表146或类似的数据结构中。压缩日志消息144包括时间戳的表示124、在日志类型字典142中标识日志类型的日志类型关键字或ID148、以及从标记126标识的数字和非数字表达式的有序序列150。时间戳表示124可以存储在数据库表的时间戳字段中,日志类型键148可以存储在日志类型字段中,并且任何非数字键和数值可以作为值的有序序列150存储在变量字段中。原始日志消息120的所有信息都以无损方式存储。有序序列150包含已标识的数字和非数字表达式的通用格式表示,其顺序与在日志类型126和原始消息120中出现的顺序相同。因此,可以使用值的有序序列150对日志类型126中的占位符138、140进行简单的有序替换来重建原始日志消息120。
如图6所示,压缩日志消息38可以存储在段160中。
日志文件可以包括一个或多个日志消息38。在各种示例中,多个日志文件的日志消息38被压缩到段160中。以这种方式,可以生成多个段160,其中每个段160包括多个压缩日志消息38。每个段160可以具有唯一的标识符162。
字典34、36的每个元素可以与其中引用了该元素的段160的标识一起存储。即,非数字表达式字典34中的每个非数字表达式74可以与一个或多个片段160的一个或多个标识符164相关联,所述一个或多个片段160包含压缩日志消息38,该压缩日志消息38包含用于非数字表达式74的键76。类似地,日志类型字典36中的每个日志类型66可以与一个或多个段160的一个或多个标识符166关联,所述一个或多个片段160包含压缩日志消息38,该压缩日志消息38包含用于日志类型66的键68。因此,可以快速识别包含压缩日志消息38的一个或多个段160,该压缩日志消息38引用了特定非数字表达式74和/或日志类型66。这可以加快搜索的速度,因为可以针对字典34、36测试查询,以排除不包含与查询相关的信息的段160。也就是说,不需要进一步考虑与查询匹配的非数字表达式74和/或日志类型66不相关的段160。
对于多个段160,日志类型字典36可以是相同的单个日志类型字典。同样地,对于多个段160,非数字表达式字典34可以是相同的单个非数字表达式字典。通过将单个词典用于大量日志消息,可以提高压缩效率。
图7示出了示例系统170,其被配置为搜索压缩日志消息172。系统170可以与系统10相同,或包含相似或相同的组件。可以参考系统10的描述以获取细节,这里不再赘述。
系统170包括在压缩日志消息172上执行搜索的指令174。压缩日志消息172可以与本说明书讨论的压缩日志消息14、38相似或相同。
指令174接收查询180以搜索压缩日志消息172。可以通过提供给系统170的用户界面176或网络接口178来提供查询180。网络接口178可以连接到处理器20,并且可以在系统170是服务器的实施例中从远程设备接收查询180。用户界面176可以包括键盘、显示设备、触摸屏或类似的设备,在系统170是用户计算机的实施例中,它们可以接收直接输入的查询180。
指令174基于查询180生成一个或多个子查询182。针对不同的目标,例如,由压缩日志消息172引用的非数字表达式字典34、由压缩日志消息172引用的日志类型字典36以及压缩日志消息172的内容,考虑不同的子查询182。指令174执行子查询182并输出结果集合190。
非数字表达式子查询184可以在非数字表达式字典34上执行,以匹配包含在其中的变量的非数字表达式。
日志类型子查询186可在日志类型字典36上执行,以匹配包含在其中的日志信息,例如,排除变量和数值的表达式的日志消息信息。
数字子查询188可在压缩日志消息172上执行,以匹配存储在其中的数字表示。
分析查询180并生成适当的子查询182的规则,可以存储在子查询构造逻辑192中,该逻辑可以对用户透明或可配置。子查询构造逻辑192解析接收到的查询180,并生成相应的子查询182的组合,以非数字表达式字典34、日志类型字典36和压缩日志消息172的形式对压缩日志数据的集合执行查询。子查询182的相应组合的生成是基于逻辑,该逻辑用于分离字典34、36和日志消息172的内容。在本说明书的其它地方给出了这种逻辑的示例,例如,模式46、48。
可以从查询180生成任意数量和组合的子查询182。查询180可以包括搜索短语,并且可以根据期望的搜索结构从搜索短语生成多个不同的子查询。
指令174可以返回与搜索短语匹配的所有重构的日志消息,即,包含作为子字符串的搜索短语的日志消息。
对于给定的搜索短语,指令174标识可以将匹配的元素存储在何处。可以使用数字模式46和非数字模式48。例如,符合数字模式46的搜索短语,可以与压缩日志消息172中的元素匹配,因为这是存储数值的地方。不匹配数字模式46,但是匹配非数字模式48的搜索短语,可以与非数字表达式字典34中的元素匹配,因为这是存储此类元素的地方。与数字模式46和非数字模式48不匹配的搜索短语可以与日志类型字典36中的元素匹配。
也可以使用通配符。例如,星号“*”可用于匹配零个或多个字符、问号“?”可以用来匹配一个字符。因此,指令174可以从包含通配符的搜索短语中生成多个不同的子查询182。例如,给出以下示例查询:
查询1:“user”
查询2:“INFO*by user”
查询3:“job*”
查询4:“completion time:12.*”
查询5:“12*”
查询1的搜索短语“user”只能存储在日志类型字典36中,因此指令174可以将搜索限制在日志类型字典36中,以匹配包含子字符串“user”的日志类型。查询3中的搜索短语“job*”可以是日志类型或非数字表达式的一部分,因此指令174可以生成两个子查询,一个用于日志类型字典36,另一个用于非数字表达式字典34,以查找日志类型和/或包含子字符串“job”的变量表达式。两个子查询可以通过OR逻辑连接,因为满足两个子查询中的一个或两个都满足查询3。
关于数字子查询188,指令174可以首先搜索日志类型字典36,以确定哪些日志类型包含至少一个数值。即,可以标识包含数字占位符的日志信息,并获取日志类型键。然后,可以获得包含所标识的日志类型键的压缩日志消息172的子集。然后将数字子查询188中的数值与压缩日志消息172的子集的内容进行比较,以找到子字符串匹配。这避免了搜索不包含数字的压缩日志消息172,因此没有匹配数字子查询188的机会。这样可以提高搜索速度和/或减少所需的资源。
此外,关于数字子查询188,在生成数字子查询188时,可以引用转换逻辑,该转换逻辑用于在压缩日志消息172中存储整数和浮点数。例如,标识浮点数的搜索短语应转换为压缩日志消息172中存储的浮点数的对应表示形式(例如,64位值)。
指令174在执行子查询182时可以进一步考虑段160(图6)。非数字表达式子查询184可以与非数字表达式字典34中的非数字表达式匹配。如果字典34中匹配的非数字表达式与特定段160相关联(图6),则可以将其它段160从考虑中删除,以进一步处理其它子查询,例如,通过和逻辑(AND)连接到非数字表达式子查询184的数字子查询188。也就是说,当只有段160的子集包含必需的非数字表达式时,不需要在所有段160中搜索数字。类似地,日志类型子查询186可以与日志类型字典36中的日志类型匹配,从而标识段160的相关子集以供其它子查询考虑。
这可以通过以段标识符的形式从子查询获取结果,然后应用组合逻辑来获得段标识符集来实现。数字子查询188被分配了包含至少一个数值的段160的集合,这可以通过以下方式来确定,即搜索日志类型字典36来确定哪些日志类型包含至少一个数值。日志类型子查询186、非数字子查询184从各自的字典36、34返回相应的段160的集合。然后将组合逻辑应用于段160的集合,并且所得的段160的集合包含压缩日志消息,应针对该压缩日志消息执行子查询。其它段可以被忽略。
例如,假定存在10个段,日志类型子查询186将段ID3和4标识为相关,而非数字子查询184将段ID4和5标识为相关。如果子查询186、184通过AND逻辑连接,则仅需考虑ID为4的段。如果子查询186、184通过OR逻辑连接,则仅需考虑ID为3-5的段。
图8示出了有关上述示例查询1到5的更多信息。如图所示,各种搜索短语可以生成一个或多个子查询,可以使用AND、OR或其它组合逻辑来组合这些子查询,以针对相关的信息源执行该查询。这精确地模拟了将原始查询直接应用于原始日志消息的过程。但是,由于信息源(例如,字典34、36和压缩消息172)代表原始日志消息的压缩形式,因此搜索效率更高。
对于图8中显示的前两个搜索,只有一个日志类型子查询。搜索日志类型字典36以获得一组匹配的日志类型以及包含这些日志类型的段。然后检查这些段中的每个压缩日志消息,以确定其日志类型是否在集合中。如果是这样,则将压缩日志消息解压缩并作为结果返回。
对于第三个搜索“job*”,并行执行两个子查询。第一个子查询返回一个集合Slogtype,其中包含匹配日志类型的键,以及一个段标识符的集合S′logtype。第二个子查询返回一个集合Svar,该集合包含匹配的非数字表达式的键,以及一个段标识符的集合S′var。然后对两个段标识符集进行集合并集:S′logtype∪S′var,仅检查该集合并集中的段。对于段中的每个压缩日志消息,如果其日志类型键在Slogtype中,或者它的其中一个表达式键在Svar中,则会将其解压缩并作为搜索结果返回。
对于搜索“completion time:12.*”,组合“SQ1 and(SQ2 or SQ3)”通过将其转换为等效表达式“(SQ1 and SQ2)or(SQ1 and SQ3)”进行处理。(SQ1 and SQ2)的处理与上述搜索示例的处理相似,执行日志类型子查询和非数字表达式子查询。一个区别是,匹配的压缩日志消息需要同时满足两个子查询。通过在日志类型字典36中搜索与SQ1匹配并包含浮点占位符的日志类型来处理组合“(SQ1 and SQ3)”。匹配段中的每个压缩日志消息都会被处理,然后返回匹配日志消息的解压缩版本。
对于搜索“12*”,并行执行三个子查询,并且任何与至少一个子查询匹配的压缩日志消息都将作为结果返回。
图9示出了用于搜索压缩日志消息的方法200。方法200可以通过可用于存储器和处理器的指令来实现。
在方框202处,搜索短语被分割为标记。上文讨论的用于标记日志消息的定界符也可以用于标记搜索短语。如果实现了通配符,则定界符和通配符可以使用相同的字符。在这种情况下,该字符在未转义时可以视为通配符。如果标记与通配符相邻,例如“*”,则“*”可被视为标记的一部分。例如,“job*”被视为标记。如果连续的标记通过“*”连接,则可以考虑标记的各种组合。例如,搜索字符串“var1*var2”,可以解释为一个标记“var1*var2”,或两个标记“var1*”和“*var2”。可以考虑为所有情况中的每一种都生成一个子查询,即,针对“var1*var2”、“var1*”和“*var2”中的每一个的子查询。方框202产生一个考虑通配符的搜索标记集合(如果使用通配符的话)。
在方框204处,每个标记的类别被确定。标记类别包括日志类型、整数,浮点数和非数字表达式。一个标记可以有多个可能的类别。例如,“job*”可以是日志类型或非数字表达式,但不能是整数或浮点数。作为另一个示例,“12*”可以是整数、浮点数或非数字表达式,但不能是日志类型。用于压缩日志消息的模式46、48可应用于将类别分配给标记。
在方框206处,从标记及其类别生成子查询,并且组合子查询。对于具有一个非日志类型的类别的每个标记,可以直接生成基于其类别的子查询。如果标记具有多个类别,则将生成多个子查询,每个类别对应一个子查询。这样的子查询由或(OR)逻辑组成。例如,可以为标记“12*”生成三个子查询,并用OR逻辑连接,如图8所示。对于日志类型类别的所有标记,这些标记将组合到单个日志类型子查询中。例如,对于搜索字符串“INFO*by user”,将所有三个标记“INFO”,“by”和“user”组合成一个子查询“INFO*by user”,该子查询在日志类型字典上执行36。
由AND组合的从搜索短语中的不同标记生成的子查询,表示匹配的日志消息应匹配所有这些子查询。例如,搜索短语“completion time:12.*”会生成三个子查询,如图8所示。SQ1与(SQ2 OR SQ3)具有AND关系,表示匹配的日志消息应匹配SQ1和SQ2,或SQ1和SQ3。
在方框208处,如本说明书其它地方所讨论的,针对适当的数据源执行每个子查询。当存在多个由AND关系组合成的子查询时,可以执行各种优化。首先,如果未找到其中任何一个子查询的结果,则将立即取消整个搜索,并且不会返回任何结果。其次,整数和浮点子查询可以首先根据日志类型字典进行处理,以减少要检查的压缩日志消息的数量。因此,如果两个子查询具有AND关系,并且其中一个是日志类型的子查询,另一个是整数或浮点数子查询,则可以将两个子查询组合成一个针对日志类型字典的子查询。这样的组合子查询搜索日志类型,该日志类型满足日志类型子查询,并且具有整数或浮点表达式。然后,只搜索具有整数或浮点表达式的日志类型其中之一的压缩日志消息。具有OR关系的子查询将并行处理。
在方框210处,将匹配的日志消息作为结果返回。一旦识别出与所有子查询的组合相匹配的所有压缩日志消息,便以无损方式对这些压缩日志消息进行解压缩。因此,将返回原始日志消息。注意,当日志类型字典和非数字表达式字典存储包含每个日志类型和非数字表达式的段列表时,可以使用这些段列表来避免处理不包含匹配日志类型或值的段。
图10示出了用于解压缩压缩日志消息的方法220。方法220可以通过能够用于存储器和处理器的指令来实现。方法220可以用于实现图9的搜索方法200中的方框210。
在方框222处,可以在压缩日志消息中对时间戳的表示进行标识。时间戳表示124可以通过其字段或在压缩日志消息144内的位置来标识。然后可以将时间戳表示124转换为人可读的格式122。
在方框224处,在压缩日志消息中标识日志类型键。日志类型键148可以由其字段或在压缩日志消息144内的位置来标识。
在方框226处,在日志类型字典中查找日志类型键以获得日志信息或日志类型136的表达式。将日志类型键148应用于日志类型字典142以获得日志类型文本136。
在方框228处,在压缩日志消息144中标识值的有序序列150,并对其进行解析以区分数字值和用于非数字信息的字典键。测试有序序列150中的每个值以确定该值代表数字表达式还是非数字表达式。数值可以是被确定为在保留值范围之外的值,例如,在将值存储为64位值的示例中为262至263-1。保留值范围内的值可以视为字典键。
在框230处,在非数字表达式字典134中查找任意一个标识的键242,以获得对应的变量的非数字表达式244。
在框232,生成解压缩的日志消息120。这可以包括遍历日志类型文本136中的占位符138、140,并从值的有序序列150中替换对应的元素。可将查找到的非数字表达式244作为文本直接插入。所标识的数值246可以根据需要被转换或格式化。例如,可以应用浮点占位符140中的小数点信息,然后可以将浮点数的字符串版本插入日志类型文本136中的占位符140位置。标识的整数数值248可以转换为字符串,并替换相应的占位符138。
在方框234处,输出解压缩的日志消息120。解压缩的日志消息120可能看起来与原始日志消息相同。
参考图11,段160(图6)中包含的信息可以被缓存以提供更快和更有效的搜索。可以提供高速缓存段300来存储不经常使用的一种日志类型,该日志类型如日志类型键62所指示的。可以在主机系统的文件/存储限制范围内提供任何数量的高速缓存段300。
高速缓存段300不替换从中获取日志类型的基础段160。而是首先搜索高速缓存段300,以便快速获得不常用的日志类型的结果。当执行查询时,与立即在段160中搜索不经常使用的日志类型62相比,首先搜索缓存段300以减少低效率和搜索时间。例如,不经常使用的日志类型可能出现在10%的日志消息38中。立即搜索段160需要同时考虑其它90%的日志类型。当不经常使用的日志类型存储在缓存段300中,并且在常规段160之前搜索缓存段300时,可以节省段160中考虑其它90%的日志类型所花费的时间。简而言之,在查询执行期间,缓存不常用的日志类型以供初始考虑,可以提供总体时间和效率的增益。
如果日志类型用于少量日志消息38,则可以将其定义为不经常使用。可以建立日志消息38的阈值数量,以确定一个日志类型是否应在高速缓存段300中提供。当决定要保留和移除哪个缓存段300时,可以保留与更少的日志消息38相关联的缓存段。被认为是低的消息数可以基于特定的实现来配置,并且可以由用户选择。
可以在高速缓存段300上设置新旧度限制。如果要生成新的高速缓存段300,并且要移除现有的高速缓存段300,则可以选择最近未完全或部分满足查询的缓存段作为现有的高速缓存段300。被认为是最近的持续时间可以基于特定的实现来配置,并且可以由用户选择。
不经常使用和新旧度条件可以合并使用。例如,当要为新的日志类型创建新的高速缓存段300时,可以将要移除的高速缓存段300选择为i)具有最近未被查询的日志类型,以及ii)具有比要缓存的新日志类型更多的消息关联的日志类型。第一个条件可用于确保缓存最终不会由于第二个条件而被最不常用的日志类型填满。
高速缓存段300的格式可以类似于常规段160的格式。格式上的各种差异可以包括与整个高速缓存段300关联的日志类型键62,而不是常规段160中的单个日志消息38。这是因为,根据定义,高速缓存段300涉及单个日志类型。另外,高速缓存段300的格式可以包括格式数据302,例如,消息号、路径标识符和/或时间戳格式标识符,如果高速缓存段300中的消息来自多种不同的日志文件,则这可能是有用的。
当捕捉到新的日志消息时,段160如上所述地被更新,高速缓存段300也可以被更新以保持不经常使用和最近的日志类型的高速缓存为最新。
图12示出了生成新的缓存段300的示例方法320。方法320可以通过可用于存储器和处理器的指令来实现。
在方框322处,如本说明书其它地方所讨论的,在存储压缩日志消息的段160上执行查询。方框322假定不存在高速缓存段300,或那些存在的高速缓存段300未完全或部分满足查询。要针对现有的高速缓存段300测试查询,请参见图13的方法340。该查询返回一个或多个日志类型的日志消息。如果返回了多个日志类型,则可以针对那些日志类型中的每一个执行方框324-330。
在方框324处,将给定日志类型的返回日志消息的数量与阈值数进行比较,以确定该日志类型是否符合不经常使用而要被缓存。一个恰当的不经常使用的例子是,与仅仅查询段160相反,如果缓存了日志类型,则为该日志类型的查询提供净效率/速度增益。如果日志类型使用过于频繁而无法从缓存中获益,则方法320结束。
如果消息的数量有利于缓存日志类型,则在方框326处,确定是否要移除现有的缓存日志类型以容纳新的日志类型。如果不需要丢弃现有的缓存段,则在方框328处生成新的缓存段300。
如果现有的高速缓存段需要被丢弃,则在方框330处选择现有的高速缓存段。可以使用新旧度和/或不经常使用的条件。也就是说,被移除的缓存段可以是尚未用于满足最近的查询的缓存段,并且那意味着新缓存段要创建更多日志消息。也就是说,可以从高速缓存中删除相对陈旧且经常使用的日志类型,以便为最近查询的日志类型腾出空间,该日志类型表示较低的日志消息频率。在方框328处,生成新的高速缓存段300,并且该方法结束。
图13示出了查询包括任意数量的高速缓存段300的段160的示例方法340。方法340可以通过可用于存储器和处理器的指令来实现。方法340可以用于实现方法320的方框322。
在方框342处,查询首先应用于高速缓存段300。该查询可以包括子查询,如本说明书其它地方所讨论的。可以将由日志类型键62表示的查询中的日志类型,与缓存段300的日志类型键62进行比较。与该查询具有相同的日志类型键62的缓存段300(如果有的话),被标识为包含相关消息。对于查询中与缓存段300不匹配的任何日志类型,如在方框344处确定的,在方框346处考虑常规段160。
按照方框342-346,通过方框348处理查询的日志类型,直到查询完成。
鉴于上述情况,显然,这些技术提供了高效、快速的日志消息压缩、搜索和解压缩。可以搜索压缩的日志消息,而无需先对其进行解压缩。此外,不需要访问生成日志消息的程序。日志消息可以直接处理,而无需了解其格式。
在根据本说明书讨论的技术构建的系统上进行了测试。测试结果与传统技术进行了比较。
测试使用了一台服务器,包含i)两个Intel XeonTM E5-2630V3 2.4GHz,包括总共16个内核(32线程),ii)256GB of DDR4 RAM,以及iii)一个3TB 7200RPM硬盘。使用了2020年6月发布的ElasticsearchTM 7.8.0。所有测试都是在本文所述的系统和硬盘中的Elasticsearch上运行的。
为了比较Elasticsearch和本系统,两个工具均配置了等效的参数。为了存储消息时间戳、其内容和包含消息的文件的路径,如本文所述,Elasticsearch配置了一个定义这些字段及其类型的索引。
将Elasticsearch的“文本”类型分配给“消息”字段,以便可以像当前系统一样使用子字符串进行搜索。由于不需要子字符串搜索,因此将Elasticsearch的“关键字”类型分配给“路径”字段。最后,在“时间戳”字段中分配了Elasticsearch的“日期”类型,以便Elasticsearch可以执行时间戳查询。
Elasticsearch的部署被配置为与当前系统的部署非常匹配。首先,Elasticsearch配置有专用的主节点,与本系统匹配。然而,本系统和Elasticsearch的从属进程的不同之处在于,本系统被实现为使用一个或多个单线程进程来执行搜索,而Elasticsearch使用一个或多个多线程进程。每个Elasticsearch从属进程(数据节点)中的线程数由索引中配置的“分片”数决定。因此,Elasticsearch配置为一个数据节点,为了改变求值过程中线程的数量,分片的数量是不同的。在本系统中,搜索进程的数量是变化的。在提取期间,所有日志数据都直接发送到此数据节点,以避免从主节点到数据节点的不必要的数据混乱。最后,作为Java应用程序,Elasticsearch需要用户指定堆大小。程序启动时,Java虚拟机分配了这个堆。与此相反,本系统被实现为按需分配存储器的C++应用程序。因此,为了匹配这两个工具的最大内存利用率,Elasticsearch的堆大小设置为本系统用于给定线程数的最大内存量。
图14列出了评估中使用的数据集及其特征。HadoopTM数据集由运行HiBenchTM基准套件中的工作负载的Hadoop群集生成。hadoop-258GB数据集是hadoop-14TB数据集的子集。最后,openstack-24hrs数据集是由24小时运行一些VMTM管理操作的OpenStackTM集群生成的。
通过比较从RAM磁盘中摄取hadoop-30GB数据集的速率,评估了本系统和Elasticsearch的摄取性能。从RAM磁盘读取日志以测量Elasticsearch和本系统的性能极限。
为了将日志文件提取到Elasticsearch中,需要一个用于解析此处描述的字段的日志解析器。Elasticsearch套件包含两个可以执行此操作的应用程序:Logstash和Filebeat。此处使用了Filebeat。但是,没有发现可以达到1MB/s以上吞吐率的配置。
本系统的日志解析器连接到Elasticsearch以提供最佳性能。由于Elasticsearch还支持通过RESTAPI进行提取,因此使用了本系统的日志解析器将日志发送到Elasticsearch。在这种情况下,解析器仅会累积几个解析的消息,然后在缓冲区已满时将它们发送到Elasticsearch。使用了两个缓冲区,以便在将一个缓冲区发送到Elasticsearch时继续累积。与Filebeat相比,当前系统的解析器能够实现更高的吞吐率。
摄取性能结果如图15所示。当解析器和Elasticsearch的数据节点都使用32个线程(32个分片)时,使用本系统的解析器的Elasticsearch部署获得的平均接收速率为42.90MB/s。相比之下,当配置32个线程时,本系统的平均摄取速率为523.62MB/s,该速率是Elasticsearch的12.4倍。在本系统和Elasticsearch的情况下,任何更少或更多的线程都会导致性能下降。
这些结果表明,与Elasticsearch相比,使用本系统时,日志数据的检索速度要快得多,使本系统成为一种实时搜索工具。在本系统中,摄取涉及压缩日志数据,而对于Elasticsearch,涉及索引日志数据。对于本系统和Elasticsearch,日志数据在摄取后进行搜索。
本系统、gzipTM和Elasticsearch的压缩率是基于图14所述的数据集进行评估的。注意,尽管Elasticsearch主要用于索引和搜索数据,但默认情况下,它会使用LZ4算法压缩索引数据。使用三个工具的每个数据集的压缩率在图16中列出,以百分比表示压缩数据的大小除以原始数据大小。最后一列显示了本系统与Elasticsearch的压缩率之间的差异。hadoop-14TB数据集上的Elasticsearch结果被省略,因为Elasticsearch所需的存储和摄取时间超出了评估范围。作为替代,可以引用子集hadoop-258GB。
平均而言,本系统将日志数据压缩到其原始大小的3.08%,而Elasticsearch压缩为37.93%。可以看出,与Elasticsearch相比,当前系统的压缩率高出一个数量级(11.8倍),这意味着可以节省大量的存储成本。当前系统的压缩率甚至优于gzip,后者仅将原始数据压缩到其原始大小的5.30%。此外,本系统具有搜索压缩数据的能力,而gzip没有。这些结果还表明,随着数据集的增大,本系统的改进程度也会比其它工具的改进更大。
本系统和Elasticsearch的搜索性能是通过一个查询基准来评估的,该基准测试旨在测试当前系统实现的不同部分。查询在图17中列出,并且具体针对hadoop-258GB数据集。
无变量查询和具有不同类型变量的查询分别用于执行本系统实现的不同方面,即分别搜索日志类型和变量。为了衡量可扩展性,每个查询类别都包括一个返回很少结果的查询,和一个或多个返回许多结果的查询。对于这些实验,本系统的查询缓存配置为,缓存不超过一百万条消息(约占数据集中所有日志的0.01%)的日志类型。每种缓存的日志类型将压缩日志的大小增加了约0.01%。在提供更好的搜索性能的同时,对压缩率的影响可以忽略不计。
请注意,在图17中,每个查询中的引号用于突出显示任何前导或尾随空格,而不是查询的一部分。“best search runtime”列列出了所有评估的线程数中查询的最低运行时。括号中的数字是本系统相对于Elasticsearch的加速。对于本系统,列出了启用和未启用查询缓存时的性能。注意,对于查询3-7,由于查询不满足缓存标准,因此本系统未缓存结果。
为了确保本系统和Elasticsearch在搜索性能评估中具有可比性,选择了从两个工具返回相同结果的查询。
使用以下实验过程对每个查询进行基准测试:
1、清除计算机的文件系统缓存;这是为了模拟搜索冷数据的效果。
2、被测系统(本系统或Elasticsearch)启动。
3、查询运行。
4、记录查询的完成时间和资源使用情况。
5、系统停止。
每个查询重复此过程十次,并报告所有运行的平均值。此外,每个实验都运行1、2、4、8、16和32个线程。请注意,Elasticsearch用一个线程处理每个分片,而本系统中的每个线程都能够处理多个存档。但是,为了在工具之间进行公平的比较,将数据集压缩为与线程一样多的存档。
本系统以另外两个配置进行了评估,这些配置提高了在每个存档中加载字典的性能。在一种配置中,词典存储在SSD中。在另一种配置中,当启动本系统时,字典被预加载到内存中。由于字典的大小不超过压缩日志总大小的0.5%,因此这些配置可以使用户在不牺牲大量昂贵资源的情况下获得更好的搜索性能。
基准测试的结果总结在图17的最后三列中。即使没有查询缓存,本系统在10个查询中的5个中也比Elasticsearch快。通常,对于具有大量结果的查询,本系统速度更快。另外,Elasticsearch在更多线程中的性能往往较差,而本系统在一个以上线程的情况下表现良好,这表明本系统具有更好的可扩展性。总体而言,在启用了预加载词典的情况下,启用本系统的查询缓存后,对于这组基准查询,本系统的平均速度比Elasticsearch高15.5倍,而与不使用查询缓存的Elasticsearch相比,本系统仍然比Elasticsearch快1.4倍。
在其它5个查询中,本系统(没有查询缓存)比Elasticsearch慢,这是因为Elasticsearch通过索引日志数据来工作,并尝试完全从其索引中提供查询而不访问原始数据。此外,这些查询的结果数量很少,因此其中一些是缓存的理想选择。实际上,如图17所示,通过启用本系统的查询缓存,查询8、9和10在0.26s、0.58s和0.25s内返回,这分别比Elasticsearch快77.1倍、3.1倍和7.3倍。
总的来说,这些结果表明,与Elasticsearch相比,即使在节省11.8倍的存储成本的情况下,本系统也可以获得与Elasticsearch相当的性能(图16)。
实验还发现,将本系统的字典存储在SSD上,当线程数从1增加到32时,搜索性能提高了2.66%-26.08%。类似地,随着线程数量的增加,预加载字典可以将性能提高15.12%-27.33%。因此,通过使用SSD或某些内存,可以适度提高本系统的搜索性能。
应当认识到,以上提供的各种示例的特征和方面可以组合到其它示例,其也属于本发明范围内。另外,附图未按比例绘制,并且可能出于说明目的而放大了尺寸和形状。
Claims (23)
1.一种非暂时性计算机可读介质,包括以下指令:
使用定界符将日志消息标记化为标记序列;
解析所述标记序列以区分数字变量和字典变量,包括:
如果标记符合数字模式,则将所述标记标识为变量的数字表达式;以及
如果所述标记不符合数字模式,则将所述标记标识为变量的非数字表达式;
将键分配给标识的非数字表达式,所述键通过非数字表达式字典与所述标识的非数字表达式相关联;
存储压缩日志消息,作为所述标识的非数字表达式和任何标识的数字表达式的所述键,所述键按照所述标记序列定义的顺序来排列。
2.根据权利要求1所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:
通过将所述日志消息的字符与多个不同的时间戳模式进行比较,解析所述日志消息以标识所述日志消息中的时间戳;
将所述时间戳转换为整数时间戳;以及
存储带有所述压缩日志消息的所述整数时间戳。
3.根据权利要求1所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:如果所述标记不符合所述数字模式,并且如果所述标记包括数字,则将所述标记标识为所述变量的非数字表达式。
4.根据权利要求3所述的非暂时性计算机可读介质,其特征在于,所述指令还包括:与所述压缩日志消息一起包括日志类型,所述日志类型表示未被识别为所述数字表达式或所述非数字表达式的标记。
5.根据权利要求4所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:将日志类型键分配给所述日志类型,所述日志类型键通过日志类型字典与所述日志类型相关。
6.根据权利要求5所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:将所述压缩日志消息作为行存储在数据库表中,所述数据库表包括:
时间戳字段,用于存储在所述日志消息中标识的时间戳的指示;
日志类型字段,用于存储所述日志类型的键;以及
一个变量字段,用于存储所述标识的非数字表达式和按照所述序列顺序排列的任何标识的数字表达式的所述键。
7.根据权利要求1所述的非暂时性计算机可读介质,其特征在于:
所述数字模式将整数定义为一个或多个带负号或不带负号的连续数字,它们表示保留值范围之外的值;以及
所述指令还应从所述保留值的范围内选择所述识别的非数字表达式的所述键。
8.根据权利要求7所述的非暂时性计算机可读介质,其特征在于,所述数字模式还将浮点数定义为带或不带负号的一个或多个数字和小数点的连续序列。
9.如权利要求1所述的非暂时性计算机可读介质,其特征在于,所述指令用于:处理包括多个日志消息的多个日志文件,所述多个日志消息包括所述日志消息,其中,所述非数字表达式字典是针对所有所述多个日志文件引用的单个字典。
10.根据权利要求1所述的非暂时性计算机可读介质,其特征在于,所述指令是用于:
处理包括所述日志消息的多个日志消息;
将所述多个日志消息划分为多个段;以及
存储在所述非数字表达式字典中,并与所述标识的非数字表达式相关联,以指示包含所述压缩日志消息的段。
11.根据权利要求1所述的非暂时性计算机可读介质,其特征在于,所述指令是用于:
与所述压缩日志消息一起包括一个表示未标识为数字表达式或非数字表达式的标记的日志类型,并为所述日志类型分配一个日志类型键,所述日志类型键通过日志类型字典与日志类型相关联;
处理包括所述日志消息的多个日志消息;
分割所述多个日志消息为为多个段;以及
存储在所述日志类型字典中,并与所述日志类型相关联,指示包含所述压缩日志消息的段。
12.根据权利要求11所述的非暂时性计算机可读介质,其特征在于,所述多个段中的缓存段包含与单个日志类型相关联的不经常使用的消息,其中,针对所述多个段的多个日志消息评估的查询是在对其它段进行评估之前,先对所述的缓存段进行评估。
13.根据权利要求12所述的非暂时性计算机可读介质,其特征在于,所述指令用于:基于与所述单个日志类型相关联的日志消息的不经常使用性来创建所述高速缓存段。
14.一种非暂时性计算机可读介质,包括以下指令用于:
接收查询以搜索多个压缩日志消息;
根据查询生成子查询,每个子查询为:
一个非数字表达式子查询,该查询可在存储变量非数字表达式的非数字表达式字典上执行;
可在日志类型字典上执行的日志类型子查询,该日志类型子查询存储的日志信息不包括变量和数值的表达式;要么
数字子查询,可在引用日志类型字典的多个压缩日志消息上执行;
执行子查询;以及
输出子查询执行结果的集合。
15.根据权利要求14所述的非暂时性计算机可读介质,其特征在于,所述查询包括搜索短语,并且,其中,所述指令还用于从所述搜索短语生成多个不同的子查询。
16.根据权利要求14所述的非暂时性计算机可读介质,其特征在于,所述指令将通过以下方式来执行数字子查询:
在所述日志类型字典中标识与包含数字占位符的日志信息相对应的日志类型键;
标识包含所述日志类型键的所述多个压缩日志消息的子集;以及
将所述数字子查询的值与存储在所述多个压缩日志消息的所述子集中的值进行比较。
17.根据权利要求14所述的非暂时性计算机可读介质,其特征在于:
所述多个日志消息被分为多个段;
所述非数字表达式字典将变量的所述非数字表达式与所述多个段相关联;
所述日志类型字典将所述日志信息与所述多个段相关联;以及
所述指令还用于:将子查询与所述非数字表达式字典中的非数字表达式或所述日志类型字典中的日志类型进行匹配,并将所述子查询的进一步处理限制到与所述非数字表达式或所述日志类型相关的所述多个段的子集。
18.根据权利要求14所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:使用逻辑运算符来组合所述子查询。
19.如权利要求14所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:基于对包含通配符的标记的不同解释来生成不同的子查询。
20.一种非暂时性计算机可读介质,包括以下指令用于:
解析压缩的日志消息以区分数字值和字典键,包括:
标识数字值为保留值范围之外的值;以及
标识键为所述保留值范围内的值;
查找在非数字表达式字典中已标识的键,以获得变量的非数字表达式;
输出解压缩的日志消息为具有任何标识的数字值的所述非数字表达式。
21.根据权利要求20所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:
标识所述压缩日志消息中的日志类型键;
查找在日志类型字典中的所述日志类型键,以获得不是变量表达式的日志信息表达式;以及
输出日志信息的表达式作为所述解压缩的日志消息的一部分。
22.根据权利要求21所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:替换所述日志信息的表达式中的占位符为所述变量的所述非数字表达式。
23.根据权利要求22所述的非暂时性计算机可读介质,其特征在于,所述指令还用于:替换所述日志信息的表达中的另一个占位符为所述标识的数值。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962935094P | 2019-11-14 | 2019-11-14 | |
US62/935,094 | 2019-11-14 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112800008A true CN112800008A (zh) | 2021-05-14 |
Family
ID=75806323
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011282843.7A Pending CN112800008A (zh) | 2019-11-14 | 2020-11-16 | 日志消息的压缩、搜索和解压缩 |
Country Status (2)
Country | Link |
---|---|
US (2) | US11593373B2 (zh) |
CN (1) | CN112800008A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377553A (zh) * | 2021-06-23 | 2021-09-10 | 浙江素泰智能电子有限公司 | 一种基于压缩字典的在线传输压缩机制 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109408337B (zh) * | 2018-10-31 | 2021-12-28 | 京东方科技集团股份有限公司 | 一种接口运维的方法及装置 |
US11341024B2 (en) * | 2019-09-09 | 2022-05-24 | Palantir Technologies Inc. | Automatic configuration of logging infrastructure for software deployments using source code |
US11755430B2 (en) * | 2021-01-09 | 2023-09-12 | Vmware, Inc. | Methods and systems for storing and querying log messages using log message bifurcation |
CN113220646A (zh) * | 2021-06-03 | 2021-08-06 | 北京锐安科技有限公司 | 一种数据解析方法、装置、计算机设备和存储介质 |
US11816242B2 (en) * | 2021-07-14 | 2023-11-14 | Capital One Services, Llc | Log compression and obfuscation using embeddings |
US20230222100A1 (en) * | 2022-01-11 | 2023-07-13 | Vmware, Inc. | Methods and systems for reducing the storage volume of log messages |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2003081433A1 (en) * | 2002-03-26 | 2003-10-02 | Nokia Corporation | Method and apparatus for compressing log record information |
US9031997B2 (en) * | 2011-10-25 | 2015-05-12 | International Business Machines Corporation | Log file compression |
US9619478B1 (en) * | 2013-12-18 | 2017-04-11 | EMC IP Holding Company LLC | Method and system for compressing logs |
US9729671B2 (en) * | 2014-10-05 | 2017-08-08 | YScope Inc. | Systems and processes for computer log analysis |
US9734005B2 (en) * | 2014-10-31 | 2017-08-15 | International Business Machines Corporation | Log analytics for problem diagnosis |
US10642712B2 (en) * | 2016-10-24 | 2020-05-05 | YScope Inc. | Log processing and analysis |
US11126531B2 (en) * | 2018-06-29 | 2021-09-21 | EMC IP Holding Company LLC | Real-time viewing tool for compressed log data |
US11151089B2 (en) * | 2018-10-29 | 2021-10-19 | EMC IP Holding Company LLC | Compression of log data using pattern recognition |
US11144506B2 (en) * | 2018-10-29 | 2021-10-12 | EMC IP Holding Company LLC | Compression of log data using field types |
US11341024B2 (en) * | 2019-09-09 | 2022-05-24 | Palantir Technologies Inc. | Automatic configuration of logging infrastructure for software deployments using source code |
US11474921B2 (en) * | 2020-07-13 | 2022-10-18 | Micron Technology, Inc. | Log compression |
-
2020
- 2020-11-13 US US17/097,550 patent/US11593373B2/en active Active
- 2020-11-16 CN CN202011282843.7A patent/CN112800008A/zh active Pending
-
2023
- 2023-02-22 US US18/112,777 patent/US20230244667A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377553A (zh) * | 2021-06-23 | 2021-09-10 | 浙江素泰智能电子有限公司 | 一种基于压缩字典的在线传输压缩机制 |
CN113377553B (zh) * | 2021-06-23 | 2024-03-22 | 浙江素泰智能电子有限公司 | 一种基于压缩字典的在线传输压缩机制 |
Also Published As
Publication number | Publication date |
---|---|
US20210149905A1 (en) | 2021-05-20 |
US20230244667A1 (en) | 2023-08-03 |
US11593373B2 (en) | 2023-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112800008A (zh) | 日志消息的压缩、搜索和解压缩 | |
US10318484B2 (en) | Scan optimization using bloom filter synopsis | |
US8838551B2 (en) | Multi-level database compression | |
TWI676903B (zh) | 藉由從駐存在內容相關篩中之主要資料元件取得資料的資料之無損縮減 | |
CN105893337B (zh) | 用于文本压缩和解压缩的方法和设备 | |
RU2464630C2 (ru) | Двухпроходное хеш извлечение текстовых строк | |
US8244767B2 (en) | Composite locality sensitive hash based processing of documents | |
US11023452B2 (en) | Data dictionary with a reduced need for rebuilding | |
US20020152219A1 (en) | Data interexchange protocol | |
US9043293B2 (en) | Table boundary detection in data blocks for compression | |
US20110313980A1 (en) | Compression of tables based on occurrence of values | |
US8316041B1 (en) | Generation and processing of numerical identifiers | |
US10417208B2 (en) | Constant range minimum query | |
Yao et al. | A study of the performance of general compressors on log files | |
TWI720086B (zh) | 儲存在區塊處理儲存系統上的音頻資料和資料的縮減 | |
Brengel et al. | {YARIX}: Scalable {YARA-based} malware intelligence | |
US20150213048A1 (en) | Hybrid of proximity and identity similarity based deduplication in a data deduplication system | |
JP2018524886A (ja) | 基本データシーブを用いて無損失削減されたデータに対する多次元検索、コンテンツ連想的な取出し、ならびにキーワードベースの検索および取出しの実行 | |
Van Durme et al. | Probabilistic counting with randomized storage | |
CN117940894A (zh) | 用于检测代码克隆的系统和方法 | |
US20180349443A1 (en) | Edge store compression in graph databases | |
US8463759B2 (en) | Method and system for compressing data | |
US6886161B1 (en) | Method and data structure for compressing file-reference information | |
US20150082142A1 (en) | Method for storing and applying related sets of pattern/message rules | |
US20230195694A1 (en) | Compression, searching, and decompression of log messages |
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 |