CN111651417A - 日志处理方法及装置 - Google Patents
日志处理方法及装置 Download PDFInfo
- Publication number
- CN111651417A CN111651417A CN202010654842.4A CN202010654842A CN111651417A CN 111651417 A CN111651417 A CN 111651417A CN 202010654842 A CN202010654842 A CN 202010654842A CN 111651417 A CN111651417 A CN 111651417A
- Authority
- CN
- China
- Prior art keywords
- value
- field
- key
- values
- numbering
- 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.)
- Granted
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/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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Computer Security & Cryptography (AREA)
- Marketing (AREA)
- Economics (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Development Economics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种日志处理方法、装置、电子设备及计算机可读存储介质;方法包括:获取待压缩的日志文件,并获取所述日志文件中包括的多个字段;对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对;基于每个所述字段对应的键值对形成压缩材料文件;根据所述压缩材料文件将所述日志文件中的字段值替换为对应的编号,得到压缩后的所述日志文件。通过本发明,能够在使用压缩算法对日志进行压缩前,预先将数据库的日志中冗余的内容进行压缩,以便进一步提高后续日志压缩时的压缩率,进而减少空间使用率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种日志处理方法、装置、电子设备及计算机可读存储介质。
背景技术
相关技术在对日志进行压缩时,通常是直接通过数据压缩算法对日志内容进行强制压缩,在此方案下想要进一步提高数据的压缩率就需要开发性能更为强大的压缩算法。
然而,开发并实际落地一个新的压缩算法所需要的时间十分漫长,导致通过开发新的数据压缩算法来提高压缩效率的可行性难度较大。
发明内容
本发明实施例提供一种日志处理方法、装置、电子设备及计算机可读存储介质,能够将日志中冗余的内容进行有效压缩,以减少空间使用率。
本发明实施例的技术方案是这样实现的:
本发明实施例提供一种日志处理方法,包括:
获取待压缩的日志文件,并获取所述日志文件中包括的多个字段;
对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对;
基于每个所述字段对应的键值对形成压缩材料文件;
根据所述压缩材料文件将所述日志文件中的字段值替换为对应的编号,得到压缩后的所述日志文件。
本发明实施例提供一种日志处理装置,包括:
获取模块,用于获取待压缩的日志文件;
所述获取模块,还用于获取所述日志文件中包括的多个字段;
编号模块,用于对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;
形成模块,用于基于每个所述字段对应的键值对形成压缩材料文件;
替换模块,用于根据所述压缩材料文件将所述日志文件中的字段值替换为对应的编号,得到压缩后的所述日志文件。
上述方案中,所述编号模块,还用于当所述字段的类型为远程主机时,将所述远程主机的多个字段值分别进行进制转化,得到转化字段值;确定所述多个字段值分别对应转化字段值中的最小值,并计算其他的转化字段值与所述最小值的差值,其中,所述其他的转化字段值为除所述最小值之外的转化字段值;当计算得到同一差值的次数超过差值频数阈值时,对所述超过差值频数阈值的差值进行编号,并生成以所述编号为键、以及以所述编号对应的差值为值的键值对;以及用于当计算得到所述最小值出现的次数大于最小值频数阈值时,生成以所述最小值的标识为键,以所述最小值为值的键值对。
上述方案中,所述编号模块,还用于当所述字段的类型为用户名,且所述用户名对应的字段值不为空时,对所述用户名对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对;以及用于当所述字段的类型为用户认证,且所述用户认证对应的字段值不为空时,对所述用户认证对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对。
上述方案中,所述编号模块,还用于当所述字段的类型为时间戳时,将所述时间戳对应的字段值转换成统一长度的字段值;遍历所述转换后的字段值,将每个所述转换后的字段值开头相同的部分作为公共头,并生成以所述公共头的标识为键、以及以所述公共头为值的键值对;计算每个所述转换后的字段值与上一个转换后的字段值的差值,遍历计算后得到的所有差值,将所述所有差值中尾部相同的部分作为尾部值,并生成以所述尾部值的标识为键、以所述尾部值为值的键值对。
上述方案中,所述编号模块,还用于当所述字段的类型为请求行时,针对所述请求行包括的请求方式、请求路径和请求协议版本执行以下操作:针对所述请求方式,对所述请求方式对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对;针对所述请求路径,遍历所述请求路径对应的字段值;针对所述字段值中存在重复的字段值,对所述存在重复的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对;针对所述字段值中不存在重复的字段值,遍历所述不存在重复的字段值,将所述字段值中满足路径深度且路径深度值一致的部分作为路径前缀;对所述路径前缀进行编号,并生成以所述编号为键、以及与所述编号对应的路径前缀为值的键值对;针对所述请求协议版本,对所述请求协议版本对应的字段值进行编号,生成以所述编号为键、以及与所述编号对应的字段值为值的键值对。
上述方案中,所述编号模块,还用于当所述字段的类型为状态码时,遍历所述状态码对应的字段值,对所述状态码对应的字段值进行编号,生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对;以及用于当所述字段的类型为响应尺寸时,将所述响应尺寸对应的字段值进行进制转换,并保存转换后的字段值。
上述方案中,所述编号模块,还用于当所述字段的类型为引用页时,遍历所述引用页对应的字段值,并将所述字段值划分为存在重复的字段值和不存在重复的字段值;针对所述存在重复的字段值,对所述存在重复的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;针对所述不存在重复的字段值,获取所述不存在重复的字段值包括的协议、主机名和端口;对由所述协议、所述主机名和所述端口进行组合得到的组合值进行编号,并生成以所述编号为键、以及与所述编号对应的组合值为值的键值对。
上述方案中,所述编号模块,还用于当所述字段的类型为用户代理时,遍历所述用户代理对应的字段值,将所述字段值中存在重复的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;针对所述字段值中不存在重复的字段值,对所述字段值中包括的每个信息分别进行编号,其中,所述信息的类型包括版本、系统信息、平台、平台细节和扩展信息;针对每个所述编号,生成以所述编号为键、以及与所述编号对应的信息为值的键值对。
上述方案中,所述编号模块,还用于当所述字段的类型为自定义的字段、所述自定义的字段对应的字段值的类型为字符串、且所述字段值具有固定的取值范围时,遍历所述日志文件以对所述字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;以及用于当所述自定义的字段对应的字段值的类型为字符串,且所述字段值具有任意的取值范围时,根据通用格式或者通用分隔符对所述字段值进行分割处理;对经过分割处理后的所述字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的经过分割处理后的字段值为值的键值对;以及用于当所述自定义的字段对应的字段值的类型为数值,且所述字段值具有固定的取值范围时,遍历所述日志文件以对所述字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;以及用于当所述自定义的字段对应的字段值的类型为数值,且所述字段值具有任意的取值范围时,对所述字段值进行进制转换,其中,所述转换后的进制高于所述字段值原始的进制;保存所述转换后的字段值。
本发明实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本发明实施例提供的日志处理方法。
本发明实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本发明实施例提供的日志处理方法。
本发明实施例具有以下有益效果:
通过对日志文件中每个字段对应的字段值进行编号,并生成以编号为键和以与编号对应的字段值为值的键值对,接着,基于每个字段对应的键值对形成压缩材料文件,随后使用压缩材料文件在日志文件对应的位置用编号替换字段值,如此,可以将日志文件的体积大大压缩,从而减少空间使用率。
附图说明
图1是本发明实施例提供的日志处理系统的架构示意图;
图2是本发明实施例提供的服务器的结构示意图;
图3是本发明实施例提供的日志处理方法的流程示意图;
图4是本发明实施例提供的日志处理方法的应用示意图;
图5是本发明实施例提供的针对网络日志进行压缩的流程示意图;
图6是本发明实施例提供的针对网络日志中不同类型的字段进行压缩的示意图;
图7是本发明实施例提供的针对日志中的用户名和用户认证分别建立编号和对应的字段值之间的映射关系示意图;
图8是本发明实施例提供的针对日志中的用户名和用户认证对应的字段值进行压缩的示意图;
图9是本发明实施例提供的针对日志中的用户名建立字典的示意图;
图10是本发明实施例提供的针对日志中的时间戳对应的字段值进行压缩的示意图;
图11是本发明实施例提供的针对日志中的请求方式对应的字段值建立字典的示意图;
图12是本发明实施例提供的针对日志中的请求路径对应的字段值建立字典的示意图;
图13是本发明实施例提供的针对日志中的请求协议版本对应的字段值建立字典的示意图;
图14是本发明实施例提供的针对日志中的状态码对应的字段值建立字典的示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
日志记录了服务器在提供正常服务中用户发起请求所使用的相关参数或者信息。例如,常见的网络(Web)日志中默认包含了日期、时间、客户端IP、用户名和请求方式等字段、以及开发人员自定义添加到日志中的记录信息。
相关技术在对日志进行压缩时,通常是直接通过数据压缩算法对日志内容进行强制压缩。在此方案下想要进一步提高数据的压缩率时,就需要开发性能更为强大的压缩算法。然而,开发并实际落地一个新的压缩算法所需要的时间十分漫长,导致通过开发新的压缩算法来提高压缩效率的可行性难度较大。
在本发明实施例中发现,在实际环境中所产生的日志中往往有着大量重复的内容,例如存在一份XX日产生的日志,日志里面记录了时间戳且时间戳的格式为“2019-12-xxhh:mm:ss”,日志文件中总共有一千条日志。对于整个日志文件内容而言,时间戳中前半部分的“2019-12-xx”是固定的,因此只需要记录一次即可。然而,在实际中则是在每条日志记录中都会将此进行记录,导致日志中存在大量重复的内容。
此外,在本发明实施例中还发现,以下情况也会导致日志中存在大量重复的内容:网站存在大量静态资源、网站存在大量机器访问流量和网站遭受大量的攻击类型扫描。
鉴于此,本发明实施例提供一种日志处理方法、装置、电子设备和计算机可读存储介质,能够在使用数据压缩算法对日志进行压缩前已将日志中冗余的内容进行了压缩,以便进一步提高日志压缩率和减少空间使用率。
下面说明本发明实施例提供的日志处理的电子设备的示例性应用,本发明实施例提供的日志处理的电子设备可以实施为台式机电脑、笔记本电脑等终端设备,也可以实施为服务器。
需要说明的是,上述的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、以及大数据和人工智能平台等基础云计算服务的云服务器,本发明在此不做限制。
参见图1,图1是本发明实施例提供的日志处理系统100的一个可选的架构示意图,为实现对日志文件进行压缩。如图1所示,数据库300中存储有待压缩的日志文件(例如网络日志,当然,也可以是任意类型的日志),该网络日志中记录了网络服务器在提供正常服务中用户发起请求所使用的相关参数或者信息。例如,网络日志中包含了日期、时间、用户名、密码和请求方式等字段。接着,服务器200从数据库300中获取待压缩的日志文件,并对所获取的待压缩日志文件进行压缩(将在下文具体说明压缩过程),从而得到压缩后的日志文件以及压缩材料文件(该压缩材料文件用于对待压缩的日志文件进行压缩、以及后续对压缩后的日志文件进行解压缩)。
需要说明的是,本发明实施例提供的日志处理系统除了可以对日志文件进行压缩,还可以对内容格式与日志格式相近的文本(文本内容为多个固定字段或者由可选字段组成)进行压缩,本发明在此不做限制。
参见图2,图2是本发明实施例提供的服务器200的结构示意图,图2所示的服务器200包括:至少一个处理器210、存储器240、至少一个网络接口220。服务器200中的各个组件通过总线系统230耦合在一起。可理解,总线系统230用于实现这些组件之间的连接通信。总线系统230除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统230。
处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
存储器240可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器240可选地包括在物理位置上远离处理器210的一个或多个存储设备。
存储器240包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Me mory),易失性存储器可以是随机存取存储器(RAM,Random Access Memor y)。本发明实施例描述的存储器240旨在包括任意适合类型的存储器。
在一些实施例中,存储器240能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统241,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块242,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等。
在一些实施例中,本发明实施例提供的日志处理装置可以采用软件方式实现,图2示出了存储在存储器240中的日志处理装置243,其可以是程序和插件等形式的软件,包括以下软件模块:获取模块2431、编号模块2432、形成模块2433和替换模块2434,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。将在下文中说明各个模块的功能。
下面将结合附图对本发明实施例提供的日志处理方法进行具体说明。
参见图3,图3是本发明实施例提供的日志处理方法的流程示意图,以服服务器执行日志压缩处理为例,结合图3示出的步骤进行说明。
在步骤S301中,服务器获取待压缩的日志文件,并获取日志文件中包括的多个字段。
这里,日志文件可以是网络(Web)日志文件,还可以是内容格式与常见网络日志格式相近的文本文件(文本内容为多个固定字段或者可选字段组成)。
示例的,以日志文件为网络日志文件为例,常见的网络日志中默认包含日期、时间、客户端IP、用户名和密码、http请求方法等字段,还可以包括开发人员自定义添加到日志中的记录信息。
例如,一个典型的网络日志格式如下:
127.0.0.1username1 auth-username1[08/Dec/2019:17:02:46+0800]"GET/phpmyadmin/themes/pmahomme/img/arrow_ltr.png HTTP/1.1"200 101"http://127.0.0.1""chrome-webserver-agent-demo-xxxxx"
网络日志中各字段间用空格进行分割,其中,127.0.0.1是远程主机(remotehost)字段对应的字段值,username1是用户名(username)字段对应的字段值,auth-username1是用户认证(auth-username)对应的字段值,[08/Dec/2019:17:02:46+0800]是时间戳(timestamp)字段对应的字段值,"GET/phpmyadmin/t hemes/pmahomme/img/arrow_ltr.png HTTP/1.1"是请求行(request-line)字段对应的字段值,200是状态码(response-code)字段对应的字段值,101是响应尺寸(response-size)字段对应的字段值,http://127.0.0.1是引用页(Referer)字段对应的字段值,"chrome-webserver-agent-demo-xxxxx"是用户代理(User-Agent)字段对应的字段值。
本发明实施例在获取到待压缩的日志文件后,遍历所获取的日志文件,得到日志文件中包括的多个字段,随后,可以针对日志文件中每个字段对应的字段值进行内容的分析,以对内容进行适当的编号,并保存编号和对应值的关系,然后再在日志文件对应的位置用编号进行替换,从而大大减少了日志文件的体积,减少空间使用率。
在步骤S302中,服务器对每个字段对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对。
在一些实施例中,当字段的类型为远程主机时,服务器针对远程主机生成对应的键值对可以通过以下方式实现:将远程主机的多个字段值分别进行进制转化,得到转化字段值;确定多个字段值分别对应转化字段值中的最小值,并计算其他的转化字段值与最小值的差值,其中,其他的转化字段值为除最小值之外的转化字段值;当计算得到同一差值的次数超过差值频数阈值时,对超过差值频数阈值的差值进行编号,并生成以编号为键、以及以编号对应的差值为值的键值对。
示例的,服务器首先遍历所获取的待压缩的日志文件中remotehost字段对应的所有字段值,然后将其转换为十进制的形式(当然,也可以转换为其他进制的形式,例如十六进制的形式),以下称为转换值。例如,IP(即IP地址):1.2.3.4转换为十进制的结果为:16909060。接着,服务器筛选出所有十进制中的最小值,并在最小值对应IP在日志文件中的对应位置使用最小值进行替换。对于其他值,则计算转换值和最小值之间的差值,然后用计算得到的差值替换对应的字段值。当一个差值的出现次数超过差值频数阈值(默认为10,当然也可以由用户进行修改,例如设置为20次或者25次)时,则可以对超出差值频数阈值的差值进行编号,并建立对应的字典进行保存,字典的键(key)为编号,值(value)为对应的差值,保存文件名为:IP距离差。
需要说明的是,上述实施例在保存编号和对应差值时,所采用的数据结构为字典,然而,在实际过程中还可以选用其他形式的数据结构来进行保存,例如xml格式等。
在另一些实施例中,当计算得到最小值出现的次数大于最小值频数阈值时,生成以最小值的标识为键,以所述最小值为值的键值对。
示例的,承接上文,当最小值出现的次数大于最小值频数阈值时(默认为5,当然也可以由用户进行修改),同样也可以建立字典保存,字典键为“min”,值为最小值,并在日志文件对应字段值处用“min”进行替换,保存文件名为:IP最小值。
相应的,在对被压缩的日志文件进行还原时,针对remotehost字段的还原可以采用以下方式:服务器首先检测是否存在文件“IP最小值”,如果存在则从该文件中获取字典,并从key为“min”中获取最小值;如果不存在文件“IP最小值”,则从被压缩的日志文件中对应的remotehost字段中获取最小值。然后将每个差值和最小值进行相加,获取到原IP的十进制结果,最后将十进制结果还原为IP的格式。
在一些实施例中,当字段的类型为用户名和用户认证时,服务器针对用户名和用户认证分别生成对应的键值对可以通过以下方式实现:当用户名对应的字段值不为空时,对用户名对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对;当用户认证对应的字段值不为空时,对用户认证对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对。
示例的,在实际情况中,username字段以及auth-username字段对应的字段值通常都为空,在日志中表现为“--”(-表示该字段值为空)。因此,当在username字段以及auth-username字段对应的字段值同时为空的情况下,则可以直接使用“0”进行替换,例如,将“其他字段--其他字段”替换为“其他字段0其他字段”。
示例的,当username字段对应的字段值不为空、auth-username字段对应的字段值为空,或者username字段对应的字段值为空、auth-username字段对应的字段值不为空时,则可以采取以下的处理方式:
服务器提取所有不为空的字段值并统计所提取的各字段值出现的频数,然后分别生成username字段对应的字典(即编号和编号对应的字段值之间的映射关系)和auth-username字段对应的字典,例如:对于针对username字段生成的字典如下:
1 username1 1
2 username2 2
3 username3 1
在此状态下需要使用两个文件分别保存username字段和auth-username字段分别对应的字典,保存username字段对应的字典的文件名可以为:用户名字典;保存auth-username字段对应的字典的文件名可以为:用户认证字典。
然后,服务器将非空的字段值和空的字段值进行拼接。此时将字段值为空的用“0”表示,然后与另一个不为空的字段值进行拼接(顺序仍然按照先username后auth-username的顺序),例如:username字段对应的字段值为空、auth-username字段对应的字段值不为空,则拼接后为01,username字段对应的字段值不为空、auth-username字段对应的字段值为空,则拼接后为10。最后使用拼接后得到的值替换日志文件中对应位置处的字段值。例如,假设日志文件中原始的字段值为“username1-”,经过替换后变成“10”。
示例的,当username字段和auth-username字段对应的字段值均不为空时,则可以采用以下的处理方式:服务器首先分别遍历username字段对应的字段值以及auth-username字段对应的字段值,然后分别针对username字段和auth-username字段生成各自对应的字典。其中字典的key为编号,value为“字段值和次数”。例如,以username字段为例:假设username字段对应的字段值为:username1 username2 username3 username2,则生成的字典文件为:
此情况下保存username字段的文件名可以为:用户名字典(双);保存auth-username字段的文件名可以为:用户认证字典(双)。
在另一些实施例中,当username字段和auth-username字段对应的字段值均不为空时,也可以不进行压缩,在日志文件中保留username字段和auth-username字段对应的原始字段值。
相应的,在对被压缩的日志文件进行还原时,针对username字段和auth-username字段的还原可以采用以下方式:服务器首先遍历所有被压缩的字段值,如果值为“0”,则直接用“--”进行替换。如果字段值不为“0”,则先判断字段值中“0”的位置及数量:如果“0”仅有一个且出现在字段值的第一位,则表明username字段为空,auth-username字段不为空,此时获取字段值中不为0的剩余部分(即auth-username的编号)并从文件名为“用户认证字典”的文件中找到对应编号的值,然后还原为“-xxx”。如果“0”仅有一个且出现在字段值的最后一位,则表明username字段不为空,auth-username字段为空,此时获取字段值中不为0的剩余部分(即username的编号)并从文件名为“用户名字典”的文件中找到对应编号的值,然后还原为“xxx-”。
在另一些实施例中,当字段的类型为时间戳时,服务器执行以下操作:将时间戳对应的字段值转换成统一长度的字段值;遍历转换后的字段值,将每个转换后的字段值开头相同的部分作为公共头,并生成以公共头的标识为键、以及以公共头为值的键值对;计算每个转换后的字段值与上一个转换后的字段值的差值,遍历计算后得到的所有差值,将所有差值中尾部相同的部分作为尾部值,并生成以尾部值的标识为键、以尾部值为值的键值对。
示例的,服务器首先将日志文件中timestamp字段对应的字段值统一转换为13位长度的时间戳,然后遍历所有字段值取每个字段中开头相同的部分作为公共头,例如:1577794378000、1577795378000、1577796378000的公共头为157779。接着对每个字段值中公共头以外的剩余值进行处理(以下称为剩余头):将当前剩余头和上一个剩余头进行相减获取差值,作为和上一个剩余头的距离。(第一个剩余头保留,因为其没有上一个剩余头)。例如:4378000、5378000、6378000中,第一个剩余头为4378000(没有上一个剩余头),第二个剩余头和上一个(第一个)剩余头的距离为1000000,第三个剩余头和上一个(第二个)剩余头的距离为1000000。将所有字段值的距离计算完毕后,遍历所获得的距离并获取距离中尾部相同的部分,计算尾部值时不需要包括第一个剩余头(以下称为尾部值)。如:1234000、2345000、3456000的尾部值为000。然后将处理完的值替换字段值中原来的部分。最后把公共头值以及尾部值保存下来并分别制作成字典,形如:{“head”:公共头值,“tail”:尾部值},保存字典的文件名可以为:时间戳信息。
相应的,在对被压缩的日志文件进行还原时,针对timestamp字段的还原可以采用以下方式:服务器首先从名字为“时间戳信息”的文件中读取“公共头值”以及“尾部值”信息,然后再从被压缩的日志文件中获取第一个剩余头,然后对每一个被压缩的时间戳先将被压缩值和尾部值进行字符串拼接(被压缩值在前,尾部值在后)。最后,再在最前面添加公共头值,这样就还原为最开始的13位时间戳了(第一个剩余头也要添加公共头值)。
在一些实施例中,当字段的类型为请求行时,服务器针对请求行生成对应的键值对可以采用以下方式实现:服务器针对请求行包括的请求方式、请求路径和请求协议版本分别执行以下操作:针对请求方式,对请求方式对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对;针对请求路径,首先遍历请求路径对应的字段值;针对字段值中存在重复的字段值,对存在重复的字段值进行编号,并生成以编号为键、以及以与编号对应的字段值为值的键值对;针对字段值中不存在重复的字段值,遍历不存在重复的字段值,将字段值中满足路径深度且路径深度值一致的部分作为路径前缀;对路径前缀进行编号,并生成以编号为键、以及与编号对应的路径前缀为值的键值对;针对请求协议版本,对请求协议版本对应的字段值进行编号,生成以编号为键、以及与编号对应的字段值为值的键值对。
示例的,请求行对应的字段值用双引号括起来,且可以用空格分割成三部分:请求方式、请求路径和请求协议版本。例如,某个请求行对应的字段值如下:
"GET/phpmyadmin/themes/pmahomme/img/arrow_ltr.png HTTP/1.1"
其中,请求方式为GET方式,请求路径为/phpmyadmin/themes/pmahomme/img/arrow_ltr.png,请求协议版本为HTTP/1.1。因此,针对请求行的处理也需要分为三个部分进行。
第一部分,针对请求方式的处理:在http协议中请求方式是有固定的种类,因此请求方式值是有限的。所以,服务器首先遍历整个日志文件,获取所有出现的请求方式,然后对出现的请求方式进行编号,并将编号的映射关系(即字典)保存到文件中(Key为编号,value为“请求方式和数量”),文件名可以为:请求方式。例如,假设请求方式对应的字段值为:GET PUT POST GET POS T,则生成的字典文件为:
第二部分,针对请求路径的处理:服务器首先遍历日志文件中请求行字段值中的请求路径,将相同的请求路径筛选出来并进行编号,并把编号后的请求路径和编号值关系保存下来。然后,对剩余的、没有相同路径的请求路径执行以下处理:获取用户给出的路径深度(路径深度是指请求路径中以“/”进行划分的深度,如“/phpmyadmin/themes/pmahomme/img/arrow_ltr.png”中路径深度为5层,第一层的值为phpmyadmin,第二层的值为themes,以此类推),接着遍历请求路径获取请求路径中满足路径深度且路径深度值一致的部分(以下称为路径前缀),并把路径深度值进行编号,然后将对应的映射关系(字典,key为编号,value为路径前缀)进行保存,并在对应位置中用编号进行替换(如“/a/b/c/1.jpg”,会被替换为“1/c/1.jpg”,此时“/a/b/”对应的编号为1,路径深度为2),文件名可以为:路径。
此外,当实际路径值的深度小于给定的深度时,同样可以将其归于路径前缀中。例如路径“/1.jpg”,其路径深度为2,可以将“/1.jpg”同样作为路径前缀进行处理。
第三部分,针对请求协议版本的处理:在http协议中请求协议版本是有固定的种类,因此请求协议版本值也是有限的。所以,服务器首先遍历整个日志文件,获取所有出现的请求协议版本,然后对出现的请求协议版本进行编号,并将编号的映射关系保存到文件中,然后在原字段中用编号进行替换,并保存文件名为:协议版本。
相应的,在对被压缩的日志文件进行还原时,针对request-line字段的还原可以通过以下方式实现:
针对请求方式的还原:服务器首先从文件名为“请求方式”的文件中读取字典关系,然后将请求方式位置的值作为key获取对应的值(这里的值是指原始value中用空格进行切分后的第一个值,即请求方式,第二个值是数量),并进行替换。
针对请求路径的还原:服务器首先从文件名为“路径”的文件中读取字典关系,然后获取请求路径位置的第一个/前的数字,作为key来获取对应的值并在日志文件原位置处进行替换。
针对请求协议版本的还原:与请求方式类似,服务器首先从文件名为“协议版本”的文件中读取字典关系,然后将请求协议版本位置的值作为key获取对应的值,并在日志文件原位置处进行替换。
在一些实施例中,当字段的类型为状态码时,服务器针对状态码生成对应的键值对可以采用以下方式实现:遍历状态码对应的字段值,对状态码对应的字段值进行编号,生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对。
示例的,在http协议中请求的response-code是有固定种类,因此对应的返回码值也是有限的。所以,服务器首先遍历整个日志文件,获取所有出现的response-code,然后对出现的response-code进行编号,并将编号的映射关系以及对应数量保存到文件中。其中编号值为key,value为“response-code值和数量”,保存文件名可以为:状态码。
相应的,在对被压缩的日志文件进行还原时,针对response-code字段的还原可以通过以下方式实现:服务器首先从名称为“状态码”的文件中获取字典关系,然后将response-code位置的值作为key获取对应的值(这里的值是指原始value中用空格进行切分后的第一个值,即response-code,第二个值是数量)最后使用所获取的值在日志文件的原位置处进行替换。
在一些实施例中,当字段的类型为响应尺寸时,服务器执行以下操作:将响应尺寸对应的字段值进行进制转换,并保存转换后的字段值。
示例的,response-size字段对应的字段值是记录http返回信息的大小,一般用十进制进行记录,这里,服务器可以将十进制转换为六十四进制进行处理(当然,也可选用其他进制进行处理)。例如,十进制转为六十四进制示意如下:
十进制的1001转换为六十四进制为:Pp,
十进制的2345转换为六十四进制为:kp。
需要说明的是,此处只需要用文件保存使用何种进制即可,文件名可以为:进制配置。文件内容为:64(表明使用64进制,使用何种进制就用对应进制数的阿拉伯数字即可)。
相应的,在对被压缩的日志文件进行还原时,针对response-size字段的还原可以通过以下方式实现:服务器首先从文件名为“进制配置”的文件中获取压缩所使用的进制值,然后将被压缩的值还原为十进制。
在另一些实施例中,当字段的类型为引用页时,服务器针对引用页生成对应的键值对可以采用以下方式实现:遍历引用页对应的字段值,并将字段值划分为存在重复的字段值和不存在重复的字段值;针对存在重复的字段值,对存在重复的字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;针对不存在重复的字段值,获取不存在重复的字段值包括的协议、主机名和端口;对由协议、主机名和端口进行组合得到的组合值进行编号,并生成以编号为键、以及与编号对应的组合值为值的键值对。
示例的,服务器首先遍历日志文件中referer字段对应的字段值,并根据是否存在重复的字段值进行划分:分为存在重复值的字段和不存在重复值的字段。
存在重复值字段的处理方法:以字段值为值、编号为键构建字典(例如,可以使用A-Z进行编号,超出Z后用A1继续编号,以此类推),然后在对应位置上使用编号进行替换,并保存文件名为:referer重复。
不存在重复值字段的处理方法:服务器首先将字段值按照URL格式进行切割,划分为协议(protocol)、主机名(hostname)、端口(port)、路径(path)和url剩余值。接着,以protocol+hostname+port的值作为标准,并对其进行编号,然后将编号和对应值关系保存为字典(key为编号,value为所合并的值),最后在referer字段中相应位置进行替换,文件名为:referer非重复。
相应的,在对被压缩的日志文件进行还原时,针对referer字段的还原可以通过以下方式实现:服务器首先判断压缩文件中的该位置的值是否为英文或英文加数字的组合,如果是,表明是重复字段值,则从文件名为“referer重复”的文件中获取对应的字典关系,然后根据对应的key获取对应的值并进行替换(key);如果不是,表明字段值被切割,则从文件名为“referer非重复”的文件中获取对应字典关系,然后根据对应key获取对应的值,并替换原来的编号(key)。
在一些实施例中,当字段的类型为用户代理时,服务器针对用户代理生成对应的键值对可以采用以下方式实现:遍历用户代理对应的字段值,将字段值中存在重复的字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;针对字段值中不存在重复的字段值,对字段值中包括的每个信息分别进行编号,其中,信息的类型包括版本、系统信息、平台、平台细节和扩展信息;针对每个编号,生成以编号为键、以及与编号对应的信息为值的键值对。
示例的,服务器首先遍历日志文件中user-agent字段对应的字段值,将user-agent字段值相同的值进行编号,并把编号对应的映射关系进行保存。对于没有相同字段值的user-agent则采用以下方法进行压缩:按照user-agent的格式获取其中的版本(version)、系统信息(system-information)、平台(platform)、平台细节(platform-details)以及扩展(extensions)信息,并将信息以字典形式进行编号,字典键为编号值,字典值为获取的信息,然后将字典保存到文件中(文件名分别为ua1、ua2、ua3、ua4、ua5)。
相应的,在对被压缩的日志文件进行还原时,针对user-agent字段的还原可以通过以下方式实现:服务器首先分别从文件ua1-ua5中获取version、system-informatin、platform、platform-details以及extensions信息,然后对压缩值通过空格进行分割,获取对应的编号值,并根据对应编号值从对应的文件中获取值,如果编号值为0,则表示该处为空,最后组装为完整的ua头。
在另一些实施例中,当字段的类型为自定义的字段时,服务器针对自定义的字段生成对应的键值对可以采用以下方式实现:当自定义的字段对应的字段值的类型为字符串、且字段值具有固定的取值范围时,遍历日志文件以对字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;当自定义的字段对应的字段值的类型为字符串,且字段值具有任意的取值范围时,根据通用格式或者通用分隔符对字段值进行分割处理;对经过分割处理后的字段值进行编号,并生成以编号为键、以及以与编号对应的经过分割处理后的字段值为值的键值对;当自定义的字段对应的字段值的类型为数值,且字段值具有固定的取值范围时,遍历日志文件以对字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;当自定义的字段对应的字段值的类型为数值,且字段值具有任意的取值范围时,对字段值进行进制转换,其中,转换后的进制高于字段值原始的进制;保存转换后的字段值。
示例的,对于自定义的字段,服务器首先判断字段值的类型是字符串类型还是数值类型。如果是数值类型,则继续判断字段值是有固定取值范围的还是任意值。如果是存在固定取值范围的,则遍历整个日志文件,然后对字段值进行编号,获取其编号和字段值的对应关系。如果是任意类型的字段值,则对字段值进行编码转换,转换为高位数的编码形式。
如果是字符串类型,则同样继续判断字段值存在固定取值范围还是属于任意值类型。如果是固定取值范围,则遍历整个日志文件,对字段值进行编号,获取其编号和字段值的对应关系。如果是任意值类型,则先从字段值中提取通用格式或通用分隔符(或者直接由使用者提供)。然后根据获取的通用格式或通用分隔符对应字段值进行分割(后续称被分割后出来的结果成为割后值),然后遍历所有分割后的字段值并以编号为键,字段值为值建立字典。然后用编号在原始字段中进行替换。
本发明实施例提供的日志处理方法,对日志格式中已有字段的字段值进行内容的分析,将内容分为有限集(即日志文件中默认的字段)和无限集(即自定义的字段)。对于有限集,则遍历集合中的内容,并对集合中的内容进行适当的编号。然后再在对应的位置用编号进行替换,并保存编号和对应值的关系。对于无限集,则首先判断其为字符串类型或数值类型。如果是字符串类型,则遍历日志中所有出现的字符串,如果存在频繁出现的字符串,则对其用编号进行替换;如果是满足某种固定格式的字符串,则保存其固定格式并计算字符串中除固定格式以外的字符是否存在频繁出现的字符串,若是同样用编号进行替换。如果是数值类型的内容,则用高进制进行替换,如此,从日志内容角度进行压缩,在日志中存在大量重复内容的情况下,可以将其体积进行大大压缩,从而在使用压缩算法前能尽量的将日志文件的体积进行减少。
在步骤S303中,服务器基于每个字段对应的键值对形成压缩材料文件。
在一些实施例中,服务器在对日志文件中包括的每个字段生成对应的键值对后,可以采用字典形式的数据结构保存每个字段对应的键值对,以形成压缩材料文件,也可以采用其他形式的数据结构(例如xml格式)来保存每个字段对应的键值对,以形成压缩材料文件。此外,服务器可以将一个键值对保存为一个单独的文件,也可以将多个键值对保存在同一个文件中,本发明实施例在此不做限制。
在步骤S304中,服务器根据压缩材料文件将日志文件中的字段值替换为对应的编号,得到压缩后的日志文件。
在一些实施例中,在根据步骤S301至步骤S303得到压缩材料文件后,服务器根据所得到的压缩材料文件将日志文件中的字段值替换为对应的编号,从而得到压缩后的日志文件。
本发明实施例提供的日志处理方法,首先读取需要进行压缩的日志文件,然后遍历整个日志文件的每一行,分析每一行中的各个字段值,并根据字段值的内容生成对应的键值对。在得到每个字段对应的键值对后,形成压缩材料文件,然后根据压缩材料文件对日志内容进行相对应的替换(即压缩过程)。在完成所有的替换后,便生成了压缩后的日志文件及保存相关压缩信息的压缩材料文件,如此,通过对日志文件中存在的重复内容进行压缩,使得日志在使用压缩算法进行压缩前已将冗余的内容进行了压缩,以便进一步提高日志压缩率,减少空间使用率。
在另一些实施例中,本发明实施例提供的日志处理方法还可以结合区块链技术实现。
区块链是指由区块形成的加密的、链式的交易的存储结构。它是一个共享数据库,存储于其中的数据或者信息,具有不可伪造、可以追溯、集体维护的特点。
示例的,参见图4,图4是本发明实施例提供的日志处理方法的应用示意图,包括区块链网络600(示例性示出了共识节点610-1至共识节点610-3)、认证中心700和业务主体800和900,下面分别进行说明。
区块链网络600的类型是灵活多样的,例如可以为公有链、私有链或联盟链中的任意一种。以公有链为例,任何业务主体的电子设备,都可以在不需要授权的情况下接入区块链网络600而成为客户端节点;以联盟链为例,业务主体在获得授权后其下辖的电子设备可以接入区块链网络600而成为客户端节点。
作为示例,当区块链网络600是联盟链时,业务主体800/900从认证中心700进行登记注册获得各自的数字证书,数字证书中包括业务主体的公钥、以及认证中心700对业务主体800/900的公钥和身份信息签署的数字签名,用来与业务主体针对交易的数字签名一起附加到交易(例如,用于对日志文件进行压缩和对压缩后的日志文件进行解压缩等)中,并被发送到区块链网络600,以供区块链网络600从交易中取出数字证书和数字签名,验证交易的可靠性(即是否未经篡改)和发送消息的业务主体的身份信息,区块链网络600会根据身份进行验证,例如是否具有发起交易的权限。
在一些实施例中,客户端节点可以只作为区块链网络600的观察者,即提供支持业务主体发起交易功能,对于区块链网络600的共识节点610的功能,例如排序功能、共识服务和账本功能等,客户端节点可以缺省或者有选择性(例如,取决于业务主体的具体业务需求)地实施。从而,可以将业务主体的数据和业务处理逻辑最大程度迁移到区块链网络600中,通过区块链网络600实现数据和业务处理过程的可信和可追溯。
区块链网络600中的共识节点接收来自不同业务主体(例如图4中示出的业务主体800/900)的客户端节点提交的交易,执行交易以更新账本或者查询账本,执行交易的各种中间结果或最终结果可以返回业务主体的客户端节点中显示。
下面以服务器调用区块链网络的智能合约对日志文件进行压缩为例,说明区块链网络的示例性应用。
首先,业务主体800(即服务器)向区块链网络600发送针对日志文件进行压缩的请求,生成对应的交易,交易包括:为了对日志文件进行压缩所需要调用的智能合约、以及向智能合约传递的参数;交易还包括服务器的数字证书、签署的数字签名,并将交易广播至区块链网络中的共识节点。
接着,区块链网络600中的共识节点610-1在接收到交易时,对交易携带的数字证书和数字签名进行验证,验证成功后,根据交易中携带的业务主体800的身份,确认业务主体800是否是具有交易权限,数字签名和权限验证中的任何一个验证判断都将导致交易失败。验证成功后签署共识节点自己的数字签名(例如,使用节点的私钥对交易的摘要进行加密得到),并继续在区块链网络600中广播。
然后,区块链网络600中的共识节点610-1接收到验证成功的交易后,将交易填充到新的区块中,并进行广播。区块链网络600中的共识节点610-1广播的新区块时,会对新区块进行验证,例如,验证新区块中交易的数字签名是否有效,如果验证成功,则将新区块追加到自身所存储的区块链的尾部,并根据交易的结果更新状态数据库,执行新区块中的交易:对于提交的针对日志文件进行压缩的交易,在状态数据库中添加压缩后的日志文件。
下面再以客户端在区块链网络中请求解压后的日志文件为例,说明区块链网络的示例性应用。
在一些实施例中,首先对业务主体900(即客户端)的权限进行验证,当客户端具有发起请求解压后的日志文件的权限时,可以由客户端生成用于请求解压后的日志文件的交易并提交到区块链网络600中,从共识节点610-1执行交易以从状态数据库中查询相应的压缩后的日志文件,随后,调用执行解压缩的智能合约对压缩后的日志文件进行解压,并将解压后的日志文件返回至客户端。
下面继续说明本发明实施例提供的日志处理装置243实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器240的日志处理装置243中的软件模块可以包括:获取模块2431、编号模块2432、形成模块2433和替换模块2434。
获取模块2431,用于获取待压缩的日志文件;获取模块2431,还用于获取日志文件中包括的多个字段;编号模块2432,用于对每个字段对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;形成模块2433,用于基于每个字段对应的键值对形成压缩材料文件;替换模块2434,用于根据压缩材料文件将日志文件中的字段值替换为对应的编号,得到压缩后的日志文件。
在一些实施例中,编号模块2432,还用于当字段的类型为远程主机时,将远程主机的多个字段值分别进行进制转化,得到转化字段值;确定多个字段值分别对应转化字段值中的最小值,并计算其他的转化字段值与最小值的差值,其中,其他的转化字段值为除最小值之外的转化字段值;当计算得到同一差值的次数超过差值频数阈值时,对超过差值频数阈值的差值进行编号,并生成以编号为键、以及以编号对应的差值为值的键值对;以及用于当计算得到最小值出现的次数大于最小值频数阈值时,生成以最小值的标识为键,以最小值为值的键值对。
在一些实施例中,编号模块2432,还用于当字段的类型为用户名,且用户名对应的字段值不为空时,对用户名对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对;以及用于当字段的类型为用户认证,且用户认证对应的字段值不为空时,对用户认证对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对。
在一些实施例中,编号模块2432,还用于当字段的类型为时间戳时,将时间戳对应的字段值转换成统一长度的字段值;遍历转换后的字段值,将每个转换后的字段值开头相同的部分作为公共头,并生成以公共头的标识为键、以及以公共头为值的键值对;计算每个转换后的字段值与上一个转换后的字段值的差值,遍历计算后得到的所有差值,将所有差值中尾部相同的部分作为尾部值,并生成以尾部值的标识为键、以尾部值为值的键值对。
在一些实施例中,编号模块2432,还用于当字段的类型为请求行时,针对请求行包括的请求方式、请求路径和请求协议版本执行以下操作:针对请求方式,对请求方式对应的字段值进行编号,并生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对;针对请求路径,遍历请求路径对应的字段值;针对字段值中存在重复的字段值,对存在重复的字段值进行编号,并生成以编号为键、以及以与编号对应的字段值为值的键值对;针对字段值中不存在重复的字段值,遍历不存在重复的字段值,将字段值中满足路径深度且路径深度值一致的部分作为路径前缀;对路径前缀进行编号,并生成以编号为键、以及与编号对应的路径前缀为值的键值对;针对请求协议版本,对请求协议版本对应的字段值进行编号,生成以编号为键、以及与编号对应的字段值为值的键值对。
在一些实施例中,编号模块2432,还用于当字段的类型为状态码时,遍历状态码对应的字段值,对状态码对应的字段值进行编号,生成以编号为键、以及与编号对应的字段值和字段值的数量为值的键值对;以及用于当字段的类型为响应尺寸时,将响应尺寸对应的字段值进行进制转换,并保存转换后的字段值。
在一些实施例中,编号模块2432,还用于当字段的类型为引用页时,遍历引用页对应的字段值,并将字段值划分为存在重复的字段值和不存在重复的字段值;针对存在重复的字段值,对存在重复的字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;针对不存在重复的字段值,获取不存在重复的字段值包括的协议、主机名和端口;对由协议、主机名和端口进行组合得到的组合值进行编号,并生成以编号为键、以及与编号对应的组合值为值的键值对。
在一些实施例中,编号模块2432,还用于当字段的类型为用户代理时,遍历用户代理对应的字段值,将字段值中存在重复的字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;针对字段值中不存在重复的字段值,对字段值中包括的每个信息分别进行编号,其中,信息的类型包括版本、系统信息、平台、平台细节和扩展信息;针对每个编号,生成以编号为键、以及与编号对应的信息为值的键值对。
在一些实施例中,编号模块2432,还用于当字段的类型为自定义的字段、自定义的字段对应的字段值的类型为字符串、且字段值具有固定的取值范围时,遍历日志文件以对字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;以及用于当自定义的字段对应的字段值的类型为字符串,且字段值具有任意的取值范围时,根据通用格式或者通用分隔符对字段值进行分割处理;对经过分割处理后的字段值进行编号,并生成以编号为键、以及以与编号对应的经过分割处理后的字段值为值的键值对;以及用于当自定义的字段对应的字段值的类型为数值,且字段值具有固定的取值范围时,遍历日志文件以对字段值进行编号,并生成以编号为键、以及与编号对应的字段值为值的键值对;以及用于当自定义的字段对应的字段值的类型为数值,且字段值具有任意的取值范围时,对字段值进行进制转换,其中,转换后的进制高于字段值原始的进制;保存转换后的字段值。
需要说明的是,本发明实施例装置的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本发明实施例提供的日志处理装置中未尽的技术细节,可以根据图3、5任一附图的说明而理解。
下面,以对网络日志进行压缩为例,说明本发明实施例提供的日志处理方法。
网络日志记录了网络服务器在提供正常服务中用户发起请求所使用的相关参数或者信息。常见的网络日志中默认包含日期、时间、客户端IP、用户名/密码、http请求方法等字段,以及开发人员自定义添加到日志中的记录信息。
相关技术在对日志进行压缩时,通常是直接通过数据压缩算法对日志内容进行强制压缩,在此方案下想要提高数据的压缩率就需要开发性能更为强大的压缩算法。然而,开发并实际落地一个新的压缩算法所需要的时间十分漫长,导致通过开发新的数据压缩算法来提高压缩效率的可行性难度较大。
在实施本发明实施例的过程中发现,在实际环境中所产生的日志中往往有着大量重复的内容,如以下情况所示:
假设存在一份XX日产生的日志,日志里面记录了时间戳且时间戳的格式为“2020-6-xx hh:mm:ss”,日志文件中总共有一千条日志。对于整个日志文件而言,时间戳中前半部分的“2020-6-xx”是固定的,因此只需要记录一次即可。而实际中则是每条日志记录中都会将此进行记录,导致存在大量重复的内容。
鉴于此,本发明实施例提供的日志处理方法针对日志中存在的大量重复内容进行基于内容的压缩,以便在使用压缩算法前可先大大减少日志内重复的内容。
本发明实施例提供的日志处理方法可以应用于对网络日志或者日志内容格式与常见网络日志格式相近的文本(文本内容为由多个固定字段或者可选字段组成)进行压缩的场景。
示例的,参见图5,图5是本发明实施例提供的针对网络日志进行压缩的流程示意图,将结合图5示出的步骤进行说明。
在步骤S501中,服务器读取待压缩的日志文件内容。
在步骤S502中,服务器遍历日志文件内容获取压缩所要使用的材料(即字典),并将材料保存到文件中。
在步骤S503中,服务器根据所获取的材料对日志的各字段进行压缩。
在一些实施例中,日志中的字段可以包括常见字段和用户自定义的字段,即步骤S503中服务器对日志的各字段进行压缩可以分为步骤S504中服务器对日志中的常见字段进行压缩和步骤S505中服务器对日志中用户自定义的字段进行压缩。
在步骤S506中,服务器根据所获取的材料在日志对应位置处将原始的字段值替换为压缩值。
在步骤S507中,压缩完成,生成日志文件对应的压缩文件。
本发明实施例提供的针对网络日志进行压缩的整个流程可以概括如下:服务器首先读取需要进行压缩的日志文件,然后遍历整个日志文件的每一行,分析每一行中的各个字段值,并根据字段值的内容生成对应的材料(即字典)。在获取了所有材料后,服务器将材料保存到相应的文件中,然后根据材料对日志内容进行相对应的替换(即压缩过程)。在完成所有的替换后便生成了压缩后的日志文件以及保存相关压缩信息的文件。
下面,对网络日志格式进行说明。网络日志中各字段间用空格进行分割,常见的记录字段包括远程主机(remotehost)、用户名(username)、用户认证(auth-username)、时间戳(timestamp)、请求行(request-line)、状态码(response-code)、响应尺寸(response-size)、引用页(Referer)以及用户代理(User-Agent)等。
示例的,一条典型的网络日志格式如下:
127.0.0.1username1 auth-username1[08/Dec/2019:17:02:46+0800]"GET/phpmyadmin/themes/pmahomme/img/arrow_ltr.png HTTP/1.1"200 101"http://127.0.0.1""chrome-webserver-agent-demo-xxxxx"
其中,各字段和字段值的对应关系为:
remotehost:127.0.0.1
username:username1
auth-username:auth-username1
timestamp:[08/Dec/2019:17:02:46+0800]
request-line:"GET/phpmyadmin/themes/pmahomme/img/arrow_ltr.png HTTP/1.1"
response-code:200
response-size:101
Referer:http://127.0.0.1
User-Agent:"chrome-webserver-agent-demo-xxxxx"
一行即为一条日志,一条日志中各字段值之间用空格进行分割。
下面,对获取材料(即字典)以及各字段的详细处理过程进行说明。
本发明实施例提供的日志处理方法首先对需要进行压缩的日志文件进行遍历,然后对日志中各字段所出现的字段值建立键值对(key-value)形式的字典。然后根据同一个键对应的值的类型和数量多少判断是否需要进行下一步的压缩,之后对键、值进行分类和编号,并将分类信息和编号保存在另外的文件中。最后,用完成的编号对日志文件中原字段的字段值进行替换。
示例的,参见图6,图6是本发明实施例提供的针对网络日志中不同类型的字段进行压缩的示意图。如图6所示,本发明实施例提供的日志处理方法可以对网络日志常见的字段进行压缩,包括对远程主机(remotehost)字段、用户名(username)和用户认证(auth-username)字段、时间戳(timestamp)字段、请求行(request-line)字段、状态码(response-code)字段、响应尺寸(response-size)字段、引用页(Referer)字段以及用户代理(User-Agent)字段进行压缩。下面将分别进行说明。
1)针对远程主机(remotehost)字段的处理:
首先遍历获取所有的remotehost字段值,然后将其全部转为十进制的形式(下面称转换值)。例如IP:1.2.3.4转换为十进制的结果为:16909060。然后筛选出所有十进制中的最小值(下面用最小值进行描述),并在最小值对应IP在日志中的对应位置使用最小值进行替换。对于其他值,计算转换值和最小值的距离(即两者之差)。然后用差值在字段值中进行替换。
如果一个差值的出现的次数超过差值频数阈值(阈值默认为10,可由用户进行修改),则建立字典保存,字典key为编号,value为对应的差值,保存文件名为:IP距离差。
如果最小值出现的次数大于最小值频数阈值(默认为5,可由用户进行修改),同样建立字典保存,字典key为“min”,value为最小值。对应字段值处用“min“进行替换,保存文件名为:IP最小值。
2)针对用户名(username)和用户认证(auth-username)字段的处理
在实际情况中,username字段以及auth-username字段通常都为空,在日志中表现为“--”(-表示该字段值为空)。因此如果在字段中username以及auth-username同时为空的情况下直接使用“0”进行替换,形如:“其他字段--其他字段”变为“其他字段0其他字段”。
在username字段不为空、auth-username字段为空,或者username字段为空、auth-username字段不为空的情况下,则采取下面的压缩方式:
提取所有不为空的字段值并统计字段值频数,然后针对username和auth-username分别建立编号和对应的字段值之间的映射关系(即建立字典,key为编号,value为对应值),如图7所示。
此状态下需要用两个文件分别保存username以及auth-username的映射关系(即字典)。保存username映射关系的文件名为:用户名字典;保存auth-username映射关系的文件名为:用户认证字典。
示例的,参见图8,图8是本发明实施例提供的针对日志中的用户名和用户认证对应的字段值进行压缩的示意图。如图8所示,在针对日志中的用户名和用户认证分别建立对应的字典之后,将非空的字段值和空的字段值进行拼接。此时将字段值为空的用0表示,然后与另一个不为空的字段值进行拼接(顺序仍然按照先username后auth-username的顺序),形如:username字段为空、auth-username不为空则拼接后为01,username字段不为空、auth-username为空为拼接后为10,最后在日志文件对应的字段位置进行替换,从而完成针对username字段和auth-username字段的压缩。
需要说明的是,此处的处理完成后的替换方式是将两个字段看作一个字段进行处理。如“--”处理后的结果为“0”,“username1-”的处理结果为“10”(username1的编号为1)。
在一些实施例中,对于两个字段同时有值的情况默认不做压缩,如果要进行压缩可使用下述方法:
分别遍历username字段以及auth-username字段,建立各自的字典。其中字典的key为编号,value为“字段值和次数”。
示例的,以username字段为例,参见图9,图9是本发明实施例提供的针对日志中的用户名建立字典的过程示意图,如图9所示,遍历日志中的username字段,对不同的字段值进行编号,并建立以编号为key,以字段值和该字段值出现的次数为value的字典。此情况下保存username字段的文件名为:用户名字典(双);保存auth-username字段的文件名为:用户认证字典(双)。
3)针对时间戳(timestamp)字段的处理
示例的,参见图10,图10是本发明实施例提供的针对日志中的时间戳对应的字段值进行压缩的示意图。如图10所示,首先将日志中的各timestamp字段的值统一转换为13位长度的时间戳,然后遍历所有字段值取每个字段中开头相同的部分作为公共头,如:1577794378000、1577795378000、1577796378000的公共头为157779。接着对每个字段值中公共头以外的剩余值进行处理(以下称为剩余头):将当前剩余头和上一个剩余头进行相减获取差值,作为和上一个剩余头的距离。(第一个剩余头保留,因为其没有上一个剩余头)。如:4378000、5378000、6378000中,第一个剩余头为4378000(没有上一个剩余头),第二个剩余头和上一个(第一个)剩余头的距离为1000000,第三个剩余头和上一个(第二个)剩余头的距离为1000000。将所有字段值的距离计算完毕后,遍历所获得的距离并获取距离中尾部相同的部分,计算尾部值时不需要包括第一个剩余头(以下称为尾部值)。如:1234000、2345000、3456000的尾部值为000。然后将处理完的值替换字段值中原来的部分。最后把公共头以及尾部值保存下来并分别制作成字典,形如:{“head”:公共头值;“tail”:尾部值},并保存字典的名称为:时间戳信息。
4)针对请求行(request-line)字段的处理
请求行(request-line)对应的字段值用双引号括起来,其中用空格进行分割为三部分:请求方式、请求路径和请求协议版本。如字段值"GET/phpmyad min/themes/pmahomme/img/arrow_ltr.png HTTP/1.1"中,请求方式为GET方式,请求路径为/phpmyadmin/themes/pmahomme/img/arrow_ltr.png,请求协议版本为HTTP/1.1。因此,针对request-line字段的压缩也分为三部分。
4.1)针对请求方式的压缩
示例的,参见图11,图11是本发明实施例提供的针对日志中的请求方式对应的字段值建立字典的示意图。如图11所示,在http协议中请求方式是有固定的种类,因此请求方式值是有限的。所以,服务器首先遍历整个日志文件,获取所有出现的请求方式,然后对出现的请求方式进行编号,并将编号的映射关系(字典)保存到文件中(Key为编号,value为“请求方式和该请求方式的数量”),文件名为:请求方式。
4.2)针对请求路径的压缩
示例的,参见图12,图12是本发明实施例提供的针对日志中的请求路径对应的字段值建立字典的示意图。如图12所示,服务器首先遍历日志文件中request-line字段值中的请求路径,将相同的请求路径筛选出来并进行编号,并把编号后的请求路径和编号值关系保存下来。然后,对剩余的、没有相同路径的请求路径执行以下处理:获取用户给出的路径深度(路径深度是指请求路径中以“/”进行划分的深度,如“/phpmyadmin/themes/pmahomme/img/arrow_ltr.png”中路径深度为5层,第一层的值为phpmyadmin,第二层的值为themes,以此类推),然后遍历请求路径获取请求路径中满足路径深度且路径深度值一致的部分(以下称为路径前缀),并把路径深度值进行编号,然后将对应的映射关系(字典,key为编号,value为路径前缀)进行保存,并在对应位置中用编号进行替换(如“/a/b/c/1.jpg”,会被替换为“1/c/1.jpg”,此时“/a/b/”对应的编号为1,路径深度为2),并保存文件名为:路径。
在一些实施例中,如果实际路径值的深度小于给定的深度,同样将其归于路径前缀中。例如路径“/1.jpg”,其路径深度为2,则将“/1.jpg”同样作为路径前缀进行处理。
4.3)针对请求协议版本的压缩
示例的,参见图13,图13是本发明实施例提供的针对日志中的请求协议版本对应的字段值建立字典的示意图。如图13所示,在http协议中请求协议版本是有固定的种类,因此请求协议版本值也是有限的。所以,服务器首先遍历整个日志文件,获取所有出现的请求协议版本,然后对出现的请求协议版本进行编号,并将编号的映射关系保存到文件中,然后在原字段中用编号进行替换,并保存文件名为:协议版本。
5)针对状态码(response-code)字段的处理
示例的,参见图14,图14是本发明实施例提供的针对日志中的状态码对应的字段值建立字典的示意图。如图14所示,在http协议中请求的response-code是有固定种类,因此对应的返回码值也是有限的。所以,服务器首先遍历整个日志文件,获取所有出现的response-code,然后对出现的response-code进行编号,并将编号的映射关系以及对应数量保存到文件中,其中编号值为key,value为“response-code值和该response-code值的数量”,并保存文件名为:状态码。
6)针对响应尺寸(response-size)字段的处理
Response-size字段值是记录http返回信息的大小,一般用十进制进行记录,这里将十进制转换为六十四进制进行压缩(当然,也可选用其他进制进行代替)。
示例的,十进制转为六十四进制的示意如下:
十进制的1001转换为六十四进制为:Pp,
十进制的2345转换为六十四进制为:kp。
需要说明的是,此处只需要用文件保存使用何种进制即可,文件名为:进制配置。文件内容为:64(表明使用64进制,使用何种进制就用对应进制数的阿拉伯数字即可)。
7)针对引用页(Referer)字段的处理
服务器首先遍历日志文件中的Referer字段,并根据是否存在重复的字段值进行划分:分为存在重复值的字段和不存在重复值的字段。
存在重复值字段的处理方法:以字段值为值、编号为键构建字典(例如,可以使用A-Z进行编号,超出Z后用A1继续编号,以此类推),然后在日志文件的对应位置上使用编号进行替换,并保存文件名为:referer重复。
不存在重复值字段的处理方法:先将字段值按照URL格式进行切割,划分为协议(protocol)、主机名(hostname)、端口(port)、路径(path)、url剩余值。接着以protocol+hostname+port的值作为标准,并对其进行编号,然后将编号和对应值关系保存为字典(key为编号,value为所合并的值),最后在referer字段中相应位置进行替换,并保存文件名为:referer非重复。
8)针对用户代理(User-Agent)字段的处理
服务器首先遍历日志文件中的user-agent字段,将user-agent字段值相同的值进行编号,并把编号对应的映射关系进行保存。
对于没有相同字段值的user-agent,则采用以下方法进行压缩:按照user-agent的格式获取其中的版本(version)、系统信息(system-information)、平台(platform)、平台细节(platform-details)以及扩展(extensions)信息,并将信息以字典形式进行编号,字典键为编号值,字典值为获取的信息,然后将字典保存到文件中(文件名分别为ua1、ua2、ua3、ua4、ua5)。
示例的,以User-Agent对应的字段值为“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/80.0.3987.132Safari/537.36”为例进行说明。
这里,version信息为:Mozilla/5.0。需要说明的是,按照官方规定version信息应该只是5.0这部分,但在本发明实施例中将前面的Mozilla字段值也纳入到version信息中(即/符号前的字符串)。System-information信息为第一个括号中的值,platform信息为第一个括号与第二个括号的中间值(不算空格),platf orm-details值为第二个括号的内部值,extensions信息为最后的剩余部分值。在实际当中某些字段值可能为空,此时把对应值设为0,继续处理。因为在字典中编号从1开始,因此字段为空的值直接用0进行填充。这里假设各个都不为空,且编号都为1,那么得出的结果是“1 1 1 1 1”。如果extensions信息为空,其余信息不为空,且编号都为1,那么得出的结果是“1 1 1 1 0”。
9)针对其他字段的处理
服务器首先判断字段值的类型是字符串类型还是数值类型。如果是数值类型,则先判断字段值是有固定取值范围的还是任意值。如果是存在固定取值范围的,则遍历整个日志文件,然后对字段值进行编号,获取其编号和字段值的对应关系。如果是任意类型的字段值,则对字段值进行编码转换,转换为高位数的编码形式。
如果是字符串类型,同样先判断字段值存在固定取值范围还是属于任意值类型。如果是固定取值范围,则遍历整个日志文件,对字段值进行编号,获取其编号和字段值的对应关系。如果是任意值类型,则先从字段值中提取通用格式或通用分隔符(或者直接由用户提供)。然后根据获取的通用格式或通用分隔符对应字段值进行分割(后续称被分割后出来的结果成为割后值),然后遍历所有分割后的字段值并以编号为键,字段值为值建立字典,最后用编号在原始字段中进行替换。
需要说明的是,上述实施例在保存编号与对应值中,所采用的数据结构为字典,在实际处理过程中还可以选用其他形式的数据结构进行保存,例如xml格式等。此外,在将相关键值对(key-value)形式的字典保存为文件中,上述实施例只是提供了最简单的通过序列化的手段进行保存。然而,可以理解的是,对于如何保存键值对(key-value)还存在很多的替代方案,例如可以直接将键值对形式的字典逐行写入到文件中,并且可以是将一个键值对关系保存为一个单独的文件,还可以是将多个键值对关系保存在一个文件中,本发明实施例在此不作限制。
下面对压缩后的日志文件进行还原的过程进行说明。
1、针对remotehost字段的还原
服务器首先检测是否存在文件“IP最小值”,如果存在,则从该文件中获取字典,并从key为“min”中获取最小值;如果不存在文件“IP最小值”,则从被压缩的日志文件中对应的remotehost字段中获取最小值。然后将每个差值和最小值进行相加,获取到原IP的十进制结果,最后将十进制结果还原为IP的格式。
2、针对username和auth-username字段的还原
服务器首先遍历所有的被压缩的字段值,如果值为“0”则直接用“--”进行替换。
如果字段值不为“0”,则先判断字段值中“0”的位置及数量。如果“0”仅有一个且出现在字段值的第一位,则表明username字段为空,auth-username字段不为空,此时获取字段值中不为0的剩余部分(auth-username的编号)并从文件名为“用户认证字典”的文件中找到对应编号的值,然后还原为“-xxx”。如果“0”仅有一个且出现在字段值的最后一位,则表明username字段不为空,auth-username字段为空,此时获取字段值中不为0的剩余部分(username的编号)并从文件名为“用户名字典”的文件中找到对应编号的值,然后还原为“xxx-”。如果“0”出现的次数不为一次,则根据其位置进行判断:
第一位为0,则该情况与“username为空,auth-username不为空”一致;
最后一位为0,则该情况与“username不为空,auth-username为空”一致;
首位和最后一位同时为0,则该情况与“username为空,auth-username为空”一致(编号都是从1开始,因此开头为0则一定是username为空)。
3、针对timestamp字段的还原
服务器首先从名字为“时间戳信息”的文件中读取“公共头”以及“尾部值”信息,然后再从被压缩的文件中获取到第一个剩余头,然后对每一个被压缩的时间戳先将被压缩值和尾部值进行字符串拼接(被压缩值在前,尾部值在后)。最后再在最前面添加公共头,这样就还原为最开始的13位时间戳了(第一个剩余头也要添加公共头)。
4、针对request-line字段的还原
分为以下三个步骤:
4.1、请求方式:先从文件名为“请求方式”的文件中读取字典关系,然后将请求方式位置的值作为key获取对应的值(这里的值是指原始value中用空格进行切分后的第一个值,即请求方式,第二个值是数量),并进行替换。
4.2、请求路径:从文件名为“路径”的文件中读取字典关系,然后获取请求路径位置的第一个/前的数字,作为key来获取对应的值并在原位置进行替换。
4.3、请求协议版本:与请求方式类似,从文件名为“协议版本”的文件中读取字典关系,然后将请求协议版本位置的值作为key获取对应的值,并进行替换。
最后,将结果还原为“请求方式请求路径请求协议版本”的方式。
5、针对response-code字段的还原
从文件名为“状态码”的文件中获取字典关系,介质将response-code位置的值作为key获取对应的值(这里的值是指原始value中用空格进行切分后的第一个值,即response-code,第二个值是数量),然后再进行替换。
6、针对response-size字段的还原
从文件名为“进制配置”的文件中获取压缩所使用的进制值,然后将被压缩的值还原为十进制。
7、针对referer字段的还原
首先判断压缩文件中的该位置的值是否为英文或英文加数字的组合,如果是,表明是重复字段值,则从文件名为“referer重复”的文件中获取对应的字典关系,然后根据对应的key获取对应的值并进行替换(key)。
如果不是,表明字段值被切割,则从文件名为“referer非重复”的文件中获取对应字典关系,然后根据对应key获取对应的值,并替换原来的编号(key)。
8、针对user-agent字段的还原
分别从文件ua1-ua5中获取version、system-informatin、platform、platform-details以及extensions信息,然后对压缩值通过空格进行分割,获取对应的编号值,并根据对应编号值从对应的文件中获取值,如果编号值为0则表示该处为空,最后组装为完整的ua头。
本发明实施例提供的日志处理方法从日志内容角度对日志文件进行压缩,在日志中存在大量重复内容的情况下,可以将其体积进行大大压缩,从而在使用压缩算法前能尽量的将日志文件的体积进行减少,以便进一步提高日志压缩率和减少空间使用率。
本发明实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本发明实施例上述的日志处理方法。
本发明实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本发明实施例提供的方法,例如,如图3示出的日志处理方法。
在一些实施例中,存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以被存储在保存其它程序或数据的文件的一部分,例如,存储在超日志标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上所述,通过本发明实施例具有以下有益效果:
通过对日志格式中已有字段的字段值进行内容的分析,将内容分为有限集(即日志中默认的字段)和无限集(即用户自定义的字段)。对于有限集,则遍历集合中的内容,并对集合中的内容进行适当的编号。然后再在对应的位置用编号进行替换,并保存编号和对应值的关系。对于无限集,则判断其为字符串类型或数值类型。如果是字符串类型,则遍历日志中所有出现的字符串,如果存在频繁出现的字符串,则对其用编号进行替换;如果是满足某种固定格式的字符串,则保存其固定格式并计算字符串中除固定格式以外的字符是否存在频繁出现的字符串,若是,则同样用编号进行替换。如果是数值类型的内容,则用高进制进行替换,如此,针对日志中存在的大量重复内容实现了基于内容的压缩,从而在使用压缩算法对日志进行压缩前已对日志中冗余的内容进行了压缩,进一步提高了日志压缩率和减少空间使用率。
以上所述,仅为本发明的实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。
Claims (10)
1.一种日志处理方法,其特征在于,所述方法包括:
获取待压缩的日志文件,并获取所述日志文件中包括的多个字段;
对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对;
基于每个所述字段对应的键值对形成压缩材料文件;
根据所述压缩材料文件将所述日志文件中的字段值替换为对应的编号,得到压缩后的所述日志文件。
2.根据权利要求1所述的方法,其特征在于,所述对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对,包括:
当所述字段的类型为远程主机时,将所述远程主机的多个字段值分别进行进制转化,得到转化字段值;
确定所述多个字段值分别对应转化字段值中的最小值,并计算其他的转化字段值与所述最小值的差值,其中,所述其他的转化字段值为除所述最小值之外的转化字段值;
当计算得到同一差值的次数超过差值频数阈值时,对所述超过差值频数阈值的差值进行编号,并生成以所述编号为键、以及以所述编号对应的差值为值的键值对;
所述方法还包括:
当计算得到所述最小值出现的次数大于最小值频数阈值时,生成以所述最小值的标识为键,以所述最小值为值的键值对。
3.根据权利要求1所述的方法,其特征在于,所述对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对,包括:
当所述字段的类型为用户名,且所述用户名对应的字段值不为空时,对所述用户名对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对;
当所述字段的类型为用户认证,且所述用户认证对应的字段值不为空时,对所述用户认证对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述字段的类型为时间戳时,将所述时间戳对应的字段值转换成统一长度的字段值;
遍历所述转换后的字段值,将每个所述转换后的字段值开头相同的部分作为公共头,并生成以所述公共头的标识为键、以及以所述公共头为值的键值对;
计算每个所述转换后的字段值与上一个转换后的字段值的差值,遍历计算后得到的所有差值,将所述所有差值中尾部相同的部分作为尾部值,并生成以所述尾部值的标识为键、以所述尾部值为值的键值对。
5.根据权利要求1所述的方法,其特征在于,所述对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对,包括:
当所述字段的类型为请求行时,针对所述请求行包括的请求方式、请求路径和请求协议版本执行以下操作:
针对所述请求方式,对所述请求方式对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对;
针对所述请求路径,遍历所述请求路径对应的字段值;
针对所述字段值中存在重复的字段值,对所述存在重复的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对;
针对所述字段值中不存在重复的字段值,遍历所述不存在重复的字段值,将所述字段值中满足路径深度且路径深度值一致的部分作为路径前缀;
对所述路径前缀进行编号,并生成以所述编号为键、以及与所述编号对应的路径前缀为值的键值对;
针对所述请求协议版本,对所述请求协议版本对应的字段值进行编号,生成以所述编号为键、以及与所述编号对应的字段值为值的键值对。
6.根据权利要求1所述的方法,其特征在于,所述对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对,包括:
当所述字段的类型为状态码时,遍历所述状态码对应的字段值,对所述状态码对应的字段值进行编号,生成以所述编号为键、以及与所述编号对应的字段值和所述字段值的数量为值的键值对;
所述方法还包括:
当所述字段的类型为响应尺寸时,将所述响应尺寸对应的字段值进行进制转换,并保存转换后的字段值。
7.根据权利要求1所述的方法,其特征在于,所述对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对,包括:
当所述字段的类型为引用页时,遍历所述引用页对应的字段值,并将所述字段值划分为存在重复的字段值和不存在重复的字段值;
针对所述存在重复的字段值,对所述存在重复的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;
针对所述不存在重复的字段值,获取所述不存在重复的字段值包括的协议、主机名和端口;
对由所述协议、所述主机名和所述端口进行组合得到的组合值进行编号,并生成以所述编号为键、以及与所述编号对应的组合值为值的键值对。
8.根据权利要求1所述的方法,其特征在于,所述对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对,包括:
当所述字段的类型为用户代理时,遍历所述用户代理对应的字段值,将所述字段值中存在重复的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;
针对所述字段值中不存在重复的字段值,对所述字段值中包括的每个信息分别进行编号,其中,所述信息的类型包括版本、系统信息、平台、平台细节和扩展信息;
针对每个所述编号,生成以所述编号为键、以及与所述编号对应的信息为值的键值对。
9.根据权利要求1所述的方法,其特征在于,所述对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的字段值为值的键值对,包括:
当所述字段的类型为自定义的字段、所述自定义的字段对应的字段值的类型为字符串、且所述字段值具有固定的取值范围时,遍历所述日志文件以对所述字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;
当所述自定义的字段对应的字段值的类型为字符串,且所述字段值具有任意的取值范围时,根据通用格式或者通用分隔符对所述字段值进行分割处理;
对经过分割处理后的所述字段值进行编号,并生成以所述编号为键、以及以与所述编号对应的经过分割处理后的字段值为值的键值对;
当所述自定义的字段对应的字段值的类型为数值,且所述字段值具有固定的取值范围时,遍历所述日志文件以对所述字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;
当所述自定义的字段对应的字段值的类型为数值,且所述字段值具有任意的取值范围时,对所述字段值进行进制转换,其中,所述转换后的进制高于所述字段值原始的进制;
保存所述转换后的字段值。
10.一种日志处理装置,其特征在于,所述装置包括:
获取模块,用于获取待压缩的日志文件;
所述获取模块,还用于获取所述日志文件中包括的多个字段;
编号模块,用于对每个所述字段对应的字段值进行编号,并生成以所述编号为键、以及与所述编号对应的字段值为值的键值对;
形成模块,用于基于每个所述字段对应的键值对形成压缩材料文件;
替换模块,用于根据所述压缩材料文件将所述日志文件中的字段值替换为对应的编号,得到压缩后的所述日志文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010654842.4A CN111651417B (zh) | 2020-07-09 | 2020-07-09 | 日志处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010654842.4A CN111651417B (zh) | 2020-07-09 | 2020-07-09 | 日志处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111651417A true CN111651417A (zh) | 2020-09-11 |
CN111651417B CN111651417B (zh) | 2021-09-28 |
Family
ID=72345942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010654842.4A Active CN111651417B (zh) | 2020-07-09 | 2020-07-09 | 日志处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111651417B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297154A (zh) * | 2021-05-04 | 2021-08-24 | 西安博达软件股份有限公司 | 一种网站日志压缩方法及装置 |
CN117478149A (zh) * | 2023-12-27 | 2024-01-30 | 深圳市活力天汇科技股份有限公司 | 一种数据压缩的方法、装置、计算机设备和可读存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5327557A (en) * | 1988-07-18 | 1994-07-05 | Digital Equipment Corporation | Single-keyed indexed file for TP queue repository |
CN102098571A (zh) * | 2009-12-14 | 2011-06-15 | 中国电信股份有限公司 | 一种数据动态推送的方法及系统 |
CN102523131A (zh) * | 2011-12-07 | 2012-06-27 | 上海海高通信发展有限公司 | 用户上网行为收集方法、分析方法和系统 |
CN103379140A (zh) * | 2012-04-17 | 2013-10-30 | 中国移动通信集团公司 | 一种日志处理规则同步方法及相关设备和系统 |
CN103379136A (zh) * | 2012-04-17 | 2013-10-30 | 中国移动通信集团公司 | 一种日志采集数据压缩方法、解压缩方法及装置 |
CN103885721A (zh) * | 2012-12-24 | 2014-06-25 | 中国移动通信集团公司 | 一种在键-值系统中的数据存储或读取方法、装置 |
US20160197621A1 (en) * | 2015-01-04 | 2016-07-07 | Emc Corporation | Text compression and decompression |
CN106354617A (zh) * | 2016-08-29 | 2017-01-25 | 广州华多网络科技有限公司 | 程序压缩性日志文件输出方法及装置 |
US9570124B2 (en) * | 2012-01-11 | 2017-02-14 | Viavi Solutions Inc. | High speed logging system |
CN110032894A (zh) * | 2019-04-09 | 2019-07-19 | 北京信安世纪科技股份有限公司 | 一种数据库日志记录方法及系统和数据库日志检测方法 |
CN111026604A (zh) * | 2019-11-01 | 2020-04-17 | 苏宁云计算有限公司 | 一种日志文件解析方法及装置 |
-
2020
- 2020-07-09 CN CN202010654842.4A patent/CN111651417B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5327557A (en) * | 1988-07-18 | 1994-07-05 | Digital Equipment Corporation | Single-keyed indexed file for TP queue repository |
CN102098571A (zh) * | 2009-12-14 | 2011-06-15 | 中国电信股份有限公司 | 一种数据动态推送的方法及系统 |
CN102523131A (zh) * | 2011-12-07 | 2012-06-27 | 上海海高通信发展有限公司 | 用户上网行为收集方法、分析方法和系统 |
US9570124B2 (en) * | 2012-01-11 | 2017-02-14 | Viavi Solutions Inc. | High speed logging system |
CN103379140A (zh) * | 2012-04-17 | 2013-10-30 | 中国移动通信集团公司 | 一种日志处理规则同步方法及相关设备和系统 |
CN103379136A (zh) * | 2012-04-17 | 2013-10-30 | 中国移动通信集团公司 | 一种日志采集数据压缩方法、解压缩方法及装置 |
CN103885721A (zh) * | 2012-12-24 | 2014-06-25 | 中国移动通信集团公司 | 一种在键-值系统中的数据存储或读取方法、装置 |
US20160197621A1 (en) * | 2015-01-04 | 2016-07-07 | Emc Corporation | Text compression and decompression |
CN106354617A (zh) * | 2016-08-29 | 2017-01-25 | 广州华多网络科技有限公司 | 程序压缩性日志文件输出方法及装置 |
CN110032894A (zh) * | 2019-04-09 | 2019-07-19 | 北京信安世纪科技股份有限公司 | 一种数据库日志记录方法及系统和数据库日志检测方法 |
CN111026604A (zh) * | 2019-11-01 | 2020-04-17 | 苏宁云计算有限公司 | 一种日志文件解析方法及装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297154A (zh) * | 2021-05-04 | 2021-08-24 | 西安博达软件股份有限公司 | 一种网站日志压缩方法及装置 |
CN117478149A (zh) * | 2023-12-27 | 2024-01-30 | 深圳市活力天汇科技股份有限公司 | 一种数据压缩的方法、装置、计算机设备和可读存储介质 |
CN117478149B (zh) * | 2023-12-27 | 2024-04-16 | 深圳市活力天汇科技股份有限公司 | 一种数据压缩的方法、装置、计算机设备和可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111651417B (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8344916B2 (en) | System and method for simplifying transmission in parallel computing system | |
CN111580884B (zh) | 配置更新方法、装置、服务器和电子设备 | |
US5953503A (en) | Compression protocol with multiple preset dictionaries | |
CN111651417B (zh) | 日志处理方法及装置 | |
US10324896B2 (en) | Method and apparatus for acquiring resource | |
US11070231B2 (en) | Reducing storage of blockchain metadata via dictionary-style compression | |
CN112468520A (zh) | 一种数据检测方法、装置、设备及可读存储介质 | |
CN112306879A (zh) | 接口参数校验方法、装置、设备及存储介质 | |
CN113238912B (zh) | 一种网络安全日志数据的聚合处理方法 | |
CN112988770A (zh) | 序列号更新的方法、装置、电子设备和存储介质 | |
CN116560581A (zh) | 一种虚拟机磁盘文件迁移方法、系统、存储介质及设备 | |
CN112579958B (zh) | 网页转换方法、装置、计算机设备及可读存储介质 | |
CN107979595B (zh) | 私有数据保护方法及网关系统 | |
CN112765169A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN114065269B (zh) | 无绑定型非同质化代币的生成方法和解析方法和存储介质 | |
CN114925044A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN113282347B (zh) | 插件运行方法、装置、设备及存储介质 | |
CN111177751B (zh) | 一种pdf文件的加密方法、设备及可读介质 | |
CN115495621A (zh) | 一种敏感词数据的屏蔽方法、装置、设备及存储介质 | |
CN114125071A (zh) | 数据压缩传输方法及装置 | |
CN113656474A (zh) | 业务数据的接入方法、装置、电子设备及存储介质 | |
CN116136844A (zh) | 实体标识信息的生成方法、装置、介质及电子设备 | |
CN113900990A (zh) | 文件分片存储方法、装置、设备及存储介质 | |
CN111782615A (zh) | 基于区块链的大文件存储方法、系统和计算机设备 | |
CN112989404A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |