首页> 中国专利> 在支持查询的同时高效地存储日志数据

在支持查询的同时高效地存储日志数据

摘要

一种日志记录系统包括事件接收器和存储管理器。接收器接收日志数据,对其进行处理并输出基于列的数据“块”。管理器接收并存储块。接收器包括存储事件的缓冲器和存储关于缓冲器的内容的元数据的元数据结构。每个缓冲器与特定的事件字段相关联并包括来自一个或多个事件的来自该字段的值。对于每个“感兴趣字段”而言,元数据包括反映缓冲器中的所有事件上的该字段的值范围的最小值和最大值。为每个缓冲器生成块,并且该块包括元数据结构和缓冲器内容的压缩版本。在查询事件数据时元数据结构充当搜索索引。该日志记录系统可以与安全信息/事件管理(SIEM)系统相结合地使用。

著录项

  • 公开/公告号CN102239472A

    专利类型发明专利

  • 公开/公告日2011-11-09

    原文格式PDF

  • 申请/专利权人 ARC景象有限责任公司;

    申请/专利号CN200980144159.8

  • 发明设计人 W.黄;Y.周;B.于;W.唐;C.F.比德金;

    申请日2009-09-04

  • 分类号G06F7/00(20060101);

  • 代理机构72001 中国专利代理(香港)有限公司;

  • 代理人刘春元;王洪斌

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 03:43:07

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-06-29

    专利权的转移 IPC(主分类):G06F7/00 登记生效日:20180608 变更前: 变更后: 申请日:20090904

    专利申请权、专利权的转移

  • 2017-04-12

    授权

    授权

  • 2014-01-15

    专利申请权的转移 IPC(主分类):G06F7/00 变更前: 变更后: 登记生效日:20131225 申请日:20090904

    专利申请权、专利权的转移

  • 2011-12-21

    实质审查的生效 IPC(主分类):G06F7/00 申请日:20090904

    实质审查的生效

  • 2011-11-09

    公开

    公开

说明书

对相关申请的交叉引用

本申请要求2008年9月5日提交的美国临时申请No. 61/094,762的优先权,该临时申请被整体地通过引用结合到本文中。本申请是2007年12月28日提交的美国申请No. 11/966,078的部分继续申请,美国申请No. 11/966,078要求2006年12月28日提交的美国临时申请No. 60/882,289的优先权,这两者都被整体地通过引用结合到本文中。

技术领域

本发明一般涉及安全信息/事件管理(SIM或SIEM),并且特别地涉及在支持查询的同时高效地存储安全信息/事件。

背景技术

安全信息/事件管理(SIM或SIEM)的领域通常涉及1)从网络和联网设备收集反映设备的网络活动和/或操作的数据和2)分析数据以提高安全性。例如,可以分析数据以识别对网络或联网设备的攻击并确定哪个用户或机器负责。如果攻击正在进行中,则可以执行抵制措施以挫败该攻击或减轻该攻击造成的损坏。所收集的数据通常源自于消息(诸如事件、警报、或警告)或日志文件中的条目,其是由联网设备生成的。示例性联网设备包括防火墙、入侵检测系统和服务器。

每个消息或日志文件条目(“事件”)被存储以供未来使用。可以以多种方式来组织所存储的事件。就写事件数据、搜索事件数据和删除事件数据而言,每个组织方法具有其自己的优点和缺点。

考虑以下情形:每个事件包括称为事件接收时间的属性。由于事件接收时间属性的值被频繁地用于搜索,所以基于事件的事件接收时间来存储事件。例如,针对一天的每分钟创建一个文件。为了存储事件,确定事件的事件接收时间。将事件附加于与事件接收时间的该分钟相对应的文件。

当后续事件到达时,其事件接收时间将始终单调增加。这意味着写后续事件数据将仅要求附加操作。不需要存储介质的查寻。这导致写事件数据方面的良好的效率。为了基于事件接收时间来搜索事件数据,一旦已经识别了第一事件,则通过按顺序读取存储介质可获得后续事件。再次地,不需要查寻。这在基于事件接收时间来搜索事件数据方面导致良好的效率。为了删除最旧的事件数据,将最旧文件删除。如果始终首先删除最旧文件,则存储介质将不会变得破碎。这在删除事件数据方面导致良好的效率。

这种方法的问题在于基于除事件接收时间之外的任何属性来搜索事件数据是非常耗时的。例如,假设每个事件还包括指示生成事件的设备或应用(“事件源”)的属性。为了搜索事件数据以寻找指示特定事件源的事件(即,包括事件源属性的特定值的事件),将必须检查整个存储介质。这是非常低效的。

所需的是一种在支持对不同事件属性的查询的同时高效地存储安全信息/事件的方式。

发明内容

一种日志记录(logging)系统在支持对不同事件属性的查询的同时高效地存储安全信息/事件。可以与安全信息/事件管理(SIEM)系统相结合地使用日志记录系统。可以由各种源(包括设备和应用)生成的日志数据可以采取任何格式。日志数据由称为“事件”的一个或多个数据实例组成。事件可以例如是日志文件中的条目、系统日志服务器中的条目、警报、警告、网络分组、电子邮件或通知页面。通常,事件被生成一次且后来不改变。

在一个实施例中,日志记录系统包括事件接收器、存储管理器和通信机构。事件接收器接收日志数据,处理日志数据,并输出基于列的数据“块(chunk)”。事件接收器包括控制系统、一组缓冲器和元数据结构。所述控制系统控制事件接收器的操作。该组缓冲器存储一个或多个事件。如果不同的事件包括相同类型的字段,则可以在表格中组织事件。表格的每行将表示不同的事件,并且表格的每列将表示不同的字段。每个缓冲器与特定的字段相关联,并且包括来自于一个或多个事件的来自该字段的值(“属性”)。元数据结构存储关于该组缓冲器的内容的元数据。在一个实施例中,所述元数据包括与事件接收器相关联的唯一标识符、该组缓冲器中的事件的数目和用于一个或多个“感兴趣字段”中的每一个的最小值和最大值,所述最小值和最大值反映该组缓冲器中的所有事件上的该字段的值的范围。在查询事件数据时,元数据结构充当搜索索引。

所述存储管理器接收基于列的数据块并将其存储,使得其能够被查询。所述存储管理器包括控制系统、数据文件表格、块表格和一个或多个数据文件。控制系统控制存储管理器的操作。数据文件表格存储关于该一个或多个数据文件的信息。在一个实施例中,对于每个数据文件,此信息包括与该数据文件相关联的唯一标识符和该数据文件的位置。块表格存储关于被存储在存储管理器中(具体地,存储在该一个或多个数据文件中)的一个或多个基于列的块的信息。在一个实施例中,对于每个基于列的块,此信息包括存储在该块中的元数据和该块的位置。数据文件存储多个块。通信机构通信地将事件接收器和存储管理器耦合。

事件接收器和存储管理器联合地执行用于存储日志数据的方法。在该方法开始之前,对该组缓冲器和元数据结构进行初始化。事件接收器接收日志数据。事件接收器控制系统将日志数据分离成一个或多个事件,并确定每个事件何时被事件接收器接收到。控制系统在该组缓冲器中存储事件的字段值并且对于每个事件,存储反映何时接收到事件的时间/日期戳。控制系统还更新元数据结构。在某个时间点处,控制系统基于元数据结构和该组缓冲器的内容来生成基于列的数据块(每个缓冲器一个基于列的块)。在一个实施例中,基于列的块包括元数据结构和缓冲器内容的压缩版本。对该组缓冲器和元数据结构进行重新初始化,从而清洗(flush)该组缓冲器。控制系统将基于列的块发送到存储管理器。存储管理器接收块,将块存储在数据文件中,并更新块表格。

存储管理器执行用于回收(reclaim)存储的方法。识别与特定保留(retention)策略相关联的最旧数据文件。从块表格去除关于包括在所识别的数据文件中的所有基于列的块的信息。删除表示所识别的数据文件的数据文件表格中的条目。在数据文件表格中创建新的条目。将新回收的数据文件添加到可用的预分配数据文件的列表并准备好接收新的块。

在已经将基于列的块存储在数据文件中之后,可以查询块内的字段值。将查询表示为能够针对事件进行评估的表达式(expression)。该表达式包括一个或多个搜索项。搜索项涉及事件的内容,具体地涉及特定的字段和该字段的值。为了执行查询,首先基于“感兴趣字段”信息(如存储在块的元数据中)来过滤数据块。然后基于字段值(如存储在块的“有效负荷”中)来过滤剩余块。最后,将满足该查询的事件聚集。

虽然刚刚描述的块是基于列的,块也可以是基于行的。美国申请No. 11/966,078(“'078申请”)描述了使用基于行的块来存储事件数据。第三类型的事件存储使用基于行的块和基于列的块二者。这种类型的事件存储将事件存储两次—使用基于行的块存储一次且使用一个或多个基于列的块存储一次。例如,一组事件将被存储为一个基于行的块。那些事件的字段值还将被存储为基于列的块(每个字段一个基于列的块)。

附图说明

图1是举例说明根据一个实施例的具有安全信息/事件管理系统的环境的方框图。

图2是举例说明根据一个实施例的用于充当安全信息/事件管理系统的日志记录系统的计算机的方框图。

图3是举例说明根据一个实施例的安全信息/事件管理系统的日志记录系统的方框图。

图4是举例说明根据一个实施例的用于存储日志数据的方法的流程图。

图5是举例说明根据一个实施例的用于回收存储的方法的流程图。

图6是举例说明根据一个实施例的用于查询的方法的流程图。

附图仅仅出于图示的目的描绘实施例。本领域的技术人员将很容易从以下说明认识到在不脱离本文所述的原理的情况下可以采用本文所举例说明的结构和方法的替换实施例。

具体实施方式

本文描述的是用于跨计算机网络从不同的设备收集数据、将数据规格化成公共模式并将规格化数据合并的基于计算机的系统。然后可以以集中的方式监视、分析数据(“事件”)并将其用于调查和纠正。可以使事件与规则互相关以创建元事件。相关包括例如发现事件之间的关系,推断那些关系的重要性(例如,通过生成元事件),将事件和元事件按优先次序排列,以及提供用于采取行动的框架。该系统(其一个实施例被表示为计算机软件)实现了可疑网络活动的聚合、相关、检测和调查性跟踪。所述系统还支持响应管理、特别(AD-HOC)查询解析、用于鉴证分析的报告和重放以及网络威胁和活动的图形可视化。

虽然将参考各种举例说明的示例来讨论本系统,但不应将这些示例理解为限制本发明的更广泛精神和范围。例如,本文给出的示例描述了分布式代理、管理器和控制台,其仅仅是本发明的一个实施例。本发明的一般概念和范围是宽得多的,并且可以扩展至任何基于计算机或基于网络的安全系统。并且,给出了可以被传递到系统的组件和从系统的组件传递的消息和可以被系统的组件使用的数据模式的示例以尝试进一步描述本发明,但是其并不意图是包括一切的示例,并且不应这样认为。

按照对计算机存储器内的数据的操作的算法和符号表示给出了以下详细说明的某些部分。这些算法说明和表示是计算机科学领域的那些技术人员用来最有效地向本领域的其它技术人员传达其工作的主旨的手段。算法在这里且一般地被认为是产生期望结果的步骤的独立序列。所述步骤是要求物理量的物理操纵的那些操作。通常,但不一定,这些量采取能够被存储、传输、组合、比较和以其他方式操纵的电或磁信号的形式。有时,主要是由于公共使用的原因,已经证明将这些信号称为位、值、元素、符号、字符、项、数字等是方便的。然而,应记住的是所有这些和类似术语将与适当的物理量相关联,并且仅仅是应用于这些量的方便标记。除非另外具体地说明,应认识到遍及本发明的说明书,诸如“处理”、“计算”、“运算”“确定”、“显示”等术语的使用指的是计算机系统或类似电子计算设备的动作和过程,所述计算机系统或类似电子计算设备将被表示为计算机系统的寄存器和存储器内的物理(电子)量的数据操纵并变换成类似地被表示为计算机系统存储器或寄存器或其它此类信息存储、传输或显示设备内的物理量的其它数据。

如上文所指示的,以计算机软件、亦即机器可读指令来实例化本发明的一个实施例,所述机器可读指令在被一个或多个计算机处理器/系统执行时命令处理器/系统执行指定动作。此类计算机软件可以驻留于一个或多个机器可读存储介质中,诸如硬盘驱动器、CD-ROM、DVD-ROM、只读存储器、读写存储器等。此类软件可以被分布在这些介质中的一个或多个上,或者可以被使得可用于跨一个或多个计算机网络(例如因特网)进行下载。无论格式如何,本文所讨论的计算机编程、再现和处理技术仅仅是可以用来实现本发明的方面的编程、再现和处理技术的类型的示例。这些示例不应以任何方式限制本发明,参考在本说明书之后的权利要求可最好地理解本发明。

1. 安全信息/事件管理(SIEM)系统架构 

图1是举例说明根据一个实施例的具有安全信息/事件管理系统的环境的方框图。图1包括安全信息/事件管理(SIEM)系统100和一个或多个数据源110。数据源110是网络节点,该网络节点可以是设备或软件应用。示例性数据源110包括入侵检测系统(IDS)、入侵预防系统(IPS)、易损性评估工具、防火墙、防病毒工具、防垃圾邮件工具、加密工具、应用审计日志和物理安全日志。

数据源110的类型包括安全检测和代理系统、访问和策略控制、核心服务日志和日志合并程序、网络硬件、加密设备和物理安全。示例性安全检测和代理系统包括IDS、IPS、多功能安全工具、易损性评估和管理、防病毒、蜜罐、威胁响应技术和网络监视。示例性访问和策略控制系统包括访问和身份管理、虚拟专用网络(VPN)、高速缓存引擎、防火墙和安全策略管理。示例性核心服务日志和日志合并程序包括操作系统日志、数据库审计日志、应用日志、日志合并程序、web服务器日志和管理控制台。示例性网络硬件包括路由器和交换机。示例性加密设备包括数据安全和完整性。示例性物理安全系统包括卡密钥读取器、生物测量、防窃报警器和火警报警器。

在所示的实施例中,SIEM系统100包括一个或多个代理120、一个或多个管理器130、一个或多个数据库140、一个或多个在线档案150、一个或多个用户接口160和一个或多个日志记录系统170。在某些实施例中,将这些模块组合在单个平台中或分布在两个、三个或更多平台中(诸如在图1中)。此多层架构的使用支持随着计算机网络或系统的增长的可缩放性。在2008年5月20日授权的美国专利No. 7,376,969中进一步描述了SIEM系统100,其被整体地通过引用结合到本文中。

代理120提供到数据源110的接口。具体地,代理120从数据源110收集数据(“原始事件”),处理数据,并将已处理数据(“事件”)发送到管理器130。代理120能够在任何地方进行操作,诸如在经由诸如简单网络管理协议(SNMP)陷阱的协议通信的单独设备处、在网络内的合并点处或在数据源110处。例如,如果数据源110是软件应用,则可以在主控数据源的设备上对代理120进行共同主控(co-host)。在一个实施例中,代理120是来自加拿大库珀蒂诺的ArcSight公司的连接器产品。

处理可以包括规格化(normalization)、聚合和过滤。例如,可以对单独的原始事件进行解析和规格化以供管理器130使用。规格化可以涉及将值(诸如严重程度、优先级和时区)规格化成公共格式和/或将数据结构规格化成公共模式。可以使用公共的人可读格式将事件分类。此格式使得用户更容易理解事件,并且使得更容易使用过滤器、规则、报告和数据监视器来分析事件。在一个实施例中,所述公共格式是来自ArcSight公司的公共事件格式(CEF)日志管理标准。在2002年12月2日提交的美国申请No. 10/308,941中进一步描述了规格化,其被整体地通过应用结合到本文中。

聚合和过滤减少被发送到管理器130的事件的量,这节省网络带宽和存储空间,增加管理器的效率和准确度,并减少事件处理时间。在2002年12月2日提交的美国申请No. 10/308,584和在2004年10月27日提交的美国申请No. 10/975,962中进一步描述了聚合,这两个申请被整体地通过引用结合到本文中。代理120基于时间段的截止或基于到达的事件的阈值数目分批地将事件发送到管理器130。在2007年5月15日授权的美国专利No. 7,219,239中进一步描述了对事件分批以便传输到管理器130,其被整体地通过引用结合到本文中。

代理120还可以向数据源110发送命令和/或在本地主机上执行命令,诸如命令扫描仪运行扫描。可以手动地或通过来自规则和数据监视器的自动化动作来执行这些动作。在2002年12月2日提交的美国申请No. 10/308,417中进一步描述了命令支持,其被整体地通过引用结合到本文中。代理120还可以向其已经收集的数据添加信息,诸如通过查找网际协议(IP)地址和/或主机名以便在管理器130处解析IP/主机名查找。

经由相关配置文件(未示出)来配置代理120。代理120可以包括一个或多个软件模块,所述模块包括规格化组件、时间修正组件、聚合组件、分批组件、解析器组件、传输组件和/或附加组件。可以通过配置文件中的适当命令来对这些组件进行激活和/或去激活。在配置期间,向管理器130注册代理120并用基于其数据源110和期望行为的特性来配置代理120。代理120是可通过手动和自动化过程两者来进一步配置的。例如,管理器130可以向代理120发送命令或配置更新。在2002年12月2日提交的美国申请No. 10/308,548中进一步描述了代理组件,其被整体地通过引用结合到本文中。在2004年10月27日提交的美国申请No. 10/974,105;在2004年12月23日提交的美国申请No. 11/021,601;在2005年3月1日提交的美国申请No. 11/070,024;以及在2008年10月14日授权的美国专利No. 7,437,359中描述了附加代理能力,其被整体地通过引用结合到本文中。

管理器130提供分析能力、情况管理工作流能力和服务能力。管理器130与代理120之间的通信可以是双向的(例如以使得管理器130能够向主控代理120的平台传送命令)并被加密。在某些装置中,管理器130能够充当用于多个代理120的集中器,并且能够将信息转发到其它管理器130(例如,在企业总部处部署的管理器)。为了执行其任务,管理器130使用多种过滤器、规则、报告、数据监视器、仪表盘和网络模型。在一个实施例中,管理器130是诸如来自ArcSight公司的企业安全管理器(ESM)产品的基于Java的服务器。

分析可以包括检测、相关和升级。例如,管理器130使用规则引擎(未示出)使从代理120接收到的事件互相关,所述规则引擎用网络模型和易损性信息来评估每个事件以获得实时威胁概要。在2002年12月2日提交的美国申请No. 10/308,767中进一步描述了相关,其被整体地通过应用结合到本文中。关于情况管理,管理器130可以保持关于安全事故的状态及其解决方案的报告。在2003年11月14日提交的美国申请No. 10/713,471中进一步描述了事故报告,其被整体地通过引用结合到本文中。服务可以包括管理、通知和报告。管理器130还可以提供对知识库的访问。在2004年4月9日提交的美国申请No. 10/821,459;在2007年8月21日授权的美国专利No. 7,260,844;在2009年7月21日授权的美国专利No. 7,565,696;以及在2009年3月24日授权的美国专利No. 7,509,677中描述了附加管理器能力,其被整体地通过引用结合到本文中。

在管理器130接收到事件时,其被存储在数据库140中。存储事件使得其稍后能够被用于分析和参考。在一个实施例中,数据库140是诸如来自加拿大Redwood Shores的Oracle公司的数据库的关系数据库管理系统。

在一个实施例中,数据库140按分区存储数据,所述分区是数据库的按时间排序的切片。例如,每天创建一个新的分区以存储当天的事件。可以将分区压缩并存储在在线档案150中以供稍后检索。在2004年5月4日提交的美国申请No. 10/839,563中进一步描述了分区管理,其被整体地通过引用结合到本文中。在一个实施例中,由来自ArcSight公司的安全生命周期信息管理(SLIM)产品的SmartStorage存档和检索组件来提供分区管理。

用户经由用户接口160与管理器130相交互。用户接口160使得用户能够对管理器130的特征和功能进行导航。单个管理器130能够支持多个用户接口实例。可用于用户的特征和功能可以取决于用户的角色和许可和/或管理器的配置。在一个实施例中,访问控制列表使得多个安全专业人员能够使用相同的管理器130和数据库140,但每个专业人员具有适合于其责任的其自己的视图、相关规则、警报、报告和知识库。 管理器130与用户接口160之间的通信是双向的,并且可以被加密。

在一个实施例中,存在两种类型的用户接口160:基于工作站的接口和基于web浏览器的接口。工作站接口是意图供安全操作中心(SOC)或类似安全监视环境中的专职安全人员使用的独立软件应用。工作站接口包括用于创建和修改过滤器、规则、报告、模式发现、仪表盘和数据监视器的创作工具。工作站接口还使得用户能够管理用户、数据库分区和工作流(例如,事故调查和报告)。例如,工作站接口使得用户能够执行例行监视、构建复杂的相关和长序列规则并执行例行的管理功能。在一个实施例中,工作站接口是来自ArcSight公司的ESM控制台产品。在2002年12月2日提交的美国申请No. 10/308,418和2008年2月19日授权的美国专利No. 7,333,999中进一步描述了用户接口,其被整体地通过引用结合到本文中。

web接口是为web浏览器客户端提供与管理器130的安全接口的独立且可远程安装的web服务器。web接口意图被用作用于管理的服务安全提供商(MSSP)的客户、SOC运营商和需要从受保护网络的外部访问管理器130的用户的有效(streamlined)接口。由于web浏览器能够被安装在远离管理器130的位置处,所以web服务器能够在保护管理器130的防火墙外部操作。web接口提供事件监视和细查能力。在一个实施例中,作为安全特征,web接口没有实现创作或管理功能。在一个实施例中,web接口是来自ArcSight公司的ArcSight Web产品。

在一个实施例中,日志记录系统170是针对极高的事件吞吐量被最优化的事件数据存储工具。日志记录系统170存储安全事件(有时称为“日志数据”)。在一个实施例中,以压缩形式来存储安全事件。然而,日志记录系统170能够在需要时检索这些事件并将其恢复成其原始的未修改形式以得到鉴证质量的数据。多个日志记录系统170能够一起工作以在存储事件时扩展为支持高持续输入速率。可以跨日志记录系统170的对等网络来分布事件查询。用户能够经由用户接口(未示出)来配置日志记录系统170。在一个实施例中,日志记录系统170是来自ArcSight公司的记录器产品。

日志记录系统170能够接收已处理事件(例如,遵守公共事件格式的事件)和原始事件。在一个实施例中,直接从数据源110(诸如系统日志消息和日志文件)接收原始事件,并且从代理120或管理器130接收已处理事件。日志记录系统170还可以发送原始事件和已处理事件两者。在一个实施例中,原始事件被作为系统日志消息发送(至任何设备;未示出),并且已处理事件被发送到管理器130。下面将进一步描述日志记录系统170。

通过上述架构,SIEM系统100能够支持集中式或分散式环境。这是有用的,因为组织可能希望实现SIEM系统100的单个实例并使用访问控制列表来划分用户。可替换地,组织可能选择为许多组中的每一个部署单独的SIEM系统100并在“主”级别处合并结果。此类部署还能够实现“跟着太阳走”布置,其中,在地理上分散的对等组通过将主要监督责任传递至当前工作在标准营业时间的组来相互协作。还可以按企业层级部署SIEM系统100,其中,业务部门单独地工作并支持到集中式管理功能的汇总。

2. 日志数据 

本文描述的是用于在支持查询的同时高效地存储日志数据的系统和方法。可以由各种源来产生本文所使用的“日志数据”,所述源包括设备和应用。这些源包括例如上述的数据源110以及网络系统、计算机、操作系统、防病毒系统、数据库、物理基础设施、身份管理系统、目录服务、系统健康信息系统、web业务、遗留系统、专用系统、主机、主机应用、安全系统、物理设备和SIEM源(诸如代理120和管理器130)。

系统能够以许多方式来获得日志数据。例如,可以接收日志数据(例如根据系统日志协议)。可替换地,可以访问日志数据(例如,通过读取被本地或远程地存储的文件)。其它方法包括例如开放式数据库连接性(ODBC)、简单网络管理协议(SNMP)陷阱、NetFlow和专用应用编程接口(API)。还可以由用户来输入日志数据(例如,使用命令行接口(CLI))。

日志数据可以采用任何格式。一个此类格式是例如公共事件格式(上述)。其它格式例如是生成日志数据的数据源110所特有的。

日志数据由称为“事件”的一个或多个数据实例组成。事件可以是例如日志文件中的条目、系统日志服务器中的条目、警报、警告、网络分组、电子邮件或通知页面。通常,事件被生成一次且后来不改变。

在一个实施例中,事件包括隐含元数据和消息。隐含元数据可以包括关于例如生成事件的设备或应用(“事件源”)和何时从事件源接收到事件(“接收时间”)的信息。在一个实施例中,接收时间是日期/时间戳,并且事件源是网络端点标识符(例如,IP地址或介质接入控制(MAC)地址)和/或源的描述,可能包括关于产品的供应商和版本的信息。

该消息表示从事件源接收到的内容,并且可以是任何形式(二进制数据、字母数字数据等)。在一个实施例中,消息是描述值得注意的情形或变化的自由形式文本。在另一实施例中,消息还包括显式元数据。显式元数据是例如通过解析消息获得的。当事件源生成事件时,事件通常包括指示事件何时发生(“事件发生时间”)的信息。通常是日期/时间戳的事件发生时间是显式元数据的示例,并且被频繁地用于分析。不同的事件源常常产生不一致的显式元数据(例如,事件的优先级或关键性、受事件影响的设备/应用/用户和哪些用户触发事件)。

在一个实施例中,如果事件不包括发生时间,则由事件接收器在其接收到事件时生成的隐含时间戳(下文描述)被视作原始发生时间戳。当事件被处理并潜在地通过各种系统转发时,每个系统通常具有事件接收时间的隐含注释。

在一个实施例中,事件表示包括一个或多个字段的数据结构,其中,每个字段可以包含值(有时称为“属性”)。此数据结构的尺寸通常落在100字节至10千字节的范围内。

3. 行存储和列存储 

如果不同的事件包括相同类型的字段,则可以在表格中组织事件。表格的每行将表示不同的事件,并且表格的每列将表示不同的字段。

可以使用两个架构来将事件数据存储在数据库中:行存储和列存储。在行存储架构中,存储是面向记录(行)的。记录(或元组)的属性(字段值)被邻接地放置在储存器中。在此架构中,单次盘写入足以将单个记录的所有字段推出到盘中。因此,实现了高性能的写入,并且具有行存储架构的数据库管理系统(DBMS)被称为写入优化系统(WOS)。

在列存储架构中,存储是面向字段(列)的。跨多个记录地被存储在一个列中的值被邻接地放置在储存器中。在此架构中,DBMS需要读取仅仅那些处理给定查询所需的列的值,并且能够避免向存储器中加载不相关的字段值(属性)。因此,实现了高性能的特别查询,并且具有列存储架构的DBMS被称为读取优化系统(ROS)。

美国申请No. 11/966,078(“'078申请”)描述了使用基于行的“块”来存储事件数据。具体地,'078申请描述了包括事件接收器和存储管理器的日志记录系统。接收器接收日志数据,对其进行处理,并输出基于行的数据“块”。管理器接收基于行的数据块并将其存储,使得其能够被查询。接收器包括存储事件的缓冲器和存储关于缓冲器的内容的信息的元数据结构。元数据包括与接收器相关联的唯一标识符、缓冲器中的事件的数目以及对于每一个“感兴趣字段”包括最小值和最大值,所述最小值和最大值反映缓冲器中的所有事件上的该字段的值的范围。块包括元数据结构和缓冲器内容的压缩版本。在查询事件数据时,元数据结构充当搜索索引。可以与安全信息/事件管理(SIEM)系统相结合地使用日志记录系统。

在'078申请中,块包括事件接收器缓冲器的内容(采取压缩形式),并且缓冲器包含一个或多个事件。因此,块包括一个或多个事件。由于能够将事件视为表格的行,所以能够将块视为包含表格的一个或多个行。换言之,在'078申请中描述的块遵循行存储架构。

虽然在'078申请中描述的块是基于行的,但是块也可以遵循列存储架构。例如,考虑存储事件的事件接收器中的缓冲器。在'078申请中,这些事件被一个事件接另一个事件地联接在一起,以便被放入(基于行的)块中。构建块的不同方式将是将事件“表格”的每个列存储为不同的(基于列的)块。每个基于列的块将表示表格中的列(即,用于多个事件中的相同字段的一组值)。不是将表格表示为包含所有行(事件)的一个大的基于行的块,而是将表格表示为多个基于列的块(表格的每列一个)。

本申请描述了使用基于列的块来存储事件数据,使得块遵循列存储架构。本申请还描述了使用基于行的块和基于列的块的组合来存储事件数据。将首先描述纯基于列的存储,接着是基于行和基于列的存储的组合。

4. 日志记录系统架构 

图2是根据一个实施例的用于充当安全信息/事件管理(SIEM)系统100的日志记录系统170的计算机200的高级方框图。所示的是被耦合到总线204的至少一个处理器202。耦合到总线204的还有存储器206、存储设备208、键盘210、图形适配器212、指示(pointing)设备214和网络适配器216。在一个实施例中,由互连芯片组来提供总线204的功能。显示器218被耦合到图形适配器212。

存储设备208是能够保持数据的任何设备,例如硬盘驱动器、紧致盘只读存储器(CD-ROM)、DVD或固态存储器设备。存储器206保持处理器202所使用的指令和数据。指示设备214可以是鼠标、轨迹球或其它类型的指示设备,并且被与键盘210相结合地用来向计算机200中输入数据。图形适配器212在显示器218上显示图像及其它信息。网络适配器216将计算机200耦合到局域网或广域网。

如本领域中已知的,计算机200可以具有与图2所示的那些不同的和/或其它组件。另外,计算机200可以缺少某些所示组件。例如,充当日志记录系统170的计算机200可以缺少键盘210、指示设备214、图形适配器212和/或显示器218。此外,存储设备208可以是本地的和/或远离计算机200(诸如在存储区域网(SAN)内实现)。

图3是举例说明根据一个实施例的安全信息/事件管理(SIEM)系统100的日志记录系统170的方框图。在所示的实施例中,日志记录系统170包括事件接收器310、存储管理器320和通信机构330。虽然为了明了起见仅示出了一个事件接收器310,但系统170能够支持与许多事件接收器310的大量并发会话。在一个实施例中,每个事件接收器310与唯一标识符相关联。

事件接收器310接收日志数据340,处理日志数据340并输出数据“块”350。事件接收器310包括控制系统355、一个或多个缓冲器360的组和元数据结构365。控制系统355被通信地耦合到一个或多个缓冲器360的组和元数据结构365。

控制系统355控制事件接收器310的操作,并且下文参考图4来进一步描述。

每个缓冲器360存储关于一个或多个事件的信息。在一个实施例中,缓冲器的尺寸是固定的,但是该尺寸本身是可配置的。回想如果不同的事件包括相同类型的字段,则可以在表格中组织事件。表格的每行将表示不同的事件,并且表格的每列将表示不同的字段。在一个实施例中,每个缓冲器360与特定的字段相关联,并且包括来自一个或多个事件的来自该字段的值(“属性”)。在另一实施例中,每个缓冲器360还包括指示哪个字段与该缓冲器相关联的标识符(“IndexID”)。

例如,假设事件包括称为SourceIPAddress(源IP地址)的字段,其值反映发起由事件表示的动作的设备的IP地址。与SourceIPAddress字段相关联的缓冲器360将包含一个或多个IP地址(由事件接收器310作为日志数据340的一部分接收并处理的每个事件一个IP地址)。缓冲器360还可以包含指示SourceIPAddress字段的“100”的IndexID值。

在一个实施例中,该组缓冲器360包括用于每个事件字段的一个缓冲器。当接收到事件时,解析出每个字段值并将其存储在适当的缓冲器中(下文所述)。最终,每个缓冲器被存储为单独的基于列的块(下文讨论)。以此方式,事件“表格”的每个列被存储为不同的(基于列的)块。每个基于列的块将表示表格中的列(即,用于多个事件中的相同字段的一组值)。不是将表格表示为包含所有行(事件)的一个大的基于行的块,而是将表格表示为多个基于列的块(表格的每列一个)。

在另一实施例中,该组缓冲器还包括ReceiptTime(接收时间)缓冲器,其对于每个事件存储时间/日期戳,所述时间/日期戳反映何时由事件接收器310接收到该事件。在又一实施例中,该组缓冲器还包括对于每个事件存储“导出”值的缓冲器,所述“导出”值是基于存储在事件的一个或多个字段中的值确定的。

元数据结构365存储关于该组缓冲器360的内容的元数据。在一个实施例中,此元数据包括与接收事件的事件接收器310相关联的唯一标识符、该组缓冲器中的事件的数目以及对于一个或多个“感兴趣字段”中的每一个包括最小值和最大值,所述最小值和最大值反映该组缓冲器中的所有事件上的该字段的值的范围。在查询事件数据(下文描述)时,元数据结构365充当搜索索引。

例如,假设事件包括称为OccurrenceTime(发生时间)的字段,其值反映事件发生的时间。如果OccurrenceTime是感兴趣字段,则元数据结构365将包括用于OccurrenceTime的最小值和用于OccurrenceTime的最大值。OccurrenceTime的最小值将是该组缓冲器360中的首先发生的事件的OccurrenceTime。OccurrenceTime的最大值将是该组缓冲器360中的最后发生的事件的OccurrenceTime。

在一个实施例中,ReceiptTime也是感兴趣字段。因此,在本实施例中,元数据结构365还存储反映该组缓冲器中的所有事件的接收时间的值范围的最小值和最大值。ReceiptTime的最小值将是该组缓冲器360中首先接收到的事件的ReceiptTime。ReceiptTime的最大值将是该组缓冲器360中最后接收到的事件的ReceiptTime。在一个实施例中,仅存储ReceiptTime的最小值。在该实施例中,未存储ReceiptTime的最大值;这降低了存储要求。如果缓冲器360常常被清洗(这在生成块时发生,如下文所述),则ReceiptTime的最大值将接近ReceiptTime的最小值(例如,迟一秒钟)。

在一个实施例中,感兴趣字段本身不是事件字段。代替地,其是基于存储在事件的一个或多个字段中的值确定的“导出”值。

存储管理器320接收数据块350并将其存储,使得其能够被查询。存储管理器320包括控制系统370、数据文件表格375、块表格380和一个或多个数据文件385。控制系统370被通信地耦合到数据文件表格375、块表格380和一个或多个数据文件385。

控制系统370控制存储管理器320的操作,并且下文参考图4来进一步描述。

数据文件表格375存储关于一个或多个数据文件385的信息。在一个实施例中,数据文件表格375中的每个条目表示已经为其分配空间的一个数据文件385,并且该条目包括与数据文件相关联的唯一标识符和数据文件的位置(例如,文件系统、其中的路径和文件名)。在数据文件表格375中列出的数据文件385可以包含或可以不包含数据(例如,块350)。数据文件表格375被例如存储在数据库(未示出)中。在一个实施例中,在需要数据文件385之前将其分配。在该实施例中,保持这些预先分配的数据文件385的列表(称为“自由列表”)。

块表格380存储关于存储在存储管理器320中(具体地,存储在一个或多个数据文件385中)的一个或多个块350的信息。在一个实施例中,对于每个块350而言,此信息包括存储在块中的元数据(下文描述)和块的位置(例如,与存储块的数据文件相关联的唯一标识符和数据文件中存储该块的位置(例如,作为偏移(offset)))。块表格380被例如存储在数据库(未示出)中。

数据文件385存储多个块350。在一个实施例中,所有的数据文件是相同的尺寸(例如,1千兆字节)并被按照时间顺序组织。数据文件385被例如存储在原始盘上或诸如文件系统(未示出)的数据存储系统中。如果数据文件385被存储在原始盘上,则能够更快地访问数据,因为不需要附加的间接层。并且,能够增加安全性。

通信机构330通信地将事件接收器310和存储管理器320耦合。在一个实施例中,通信机构330包括部分公用或完全公用的网络,诸如因特网。在其它实施例中,通信机构330包括专用网络或一个或多个不同的或逻辑专用网络(例如虚拟专用网络或局域网)。去往和来自通信机构330的通信链路可以是有线或无线的(例如基于陆地或卫星的收发机)。在一个实施例中,通信机构330是分组交换网,诸如使用以太网协议的基于IP的广域网或城域网。

在另一实施例中,通信机构330对于单个计算机系统而言是本地的(例如,如果事件接收器310的一部分和存储管理器320的一部分在同一设备上执行)。在该实施例中,例如通过本地的仅软件的回环设备来实现通信机构330。例如,数据被拷贝到存储器中的各种位置,并且通信经由API发生。

在又一实施例中,通信机构330对于单个过程而言是本地的(例如,如果事件接收器310的一部分和存储管理器320的一部分在同一设备上和同一过程中执行)。在该实施例中,例如,通过共享存储器和/或到共享存储器的指针来实现通信机构330。

5. 初始存储 

图4是举例说明根据本发明的一个实施例的用于存储日志数据的方法的流程图。在一个实施例中,由事件接收器310(例如,其控制系统355)和存储管理器320(例如,其控制系统370)来联合地执行图4的方法400。

在一个实施例中,在方法400开始之前,对该组缓冲器360和元数据结构365进行初始化。例如,控制系统355在每个缓冲器中存储适当的IndexID。控制系统355还在元数据结构365中存储与事件接收器310相关联的唯一标识符。

方法400在事件接收器310接收到410日志数据340时开始。在一个实施例中,以流的形式来接收日志数据340。

控制系统355将日志数据分离420成一个或多个事件,并确定420每个事件何时被事件接收器310接收到。

控制系统355将事件解析430成其字段值,并将字段值和接收时间存储在适当的缓冲器中。控制系统355还更新430元数据结构365。例如,缓冲器中的事件的数目将已经增加。可能还需要更新用于(一个或多个)感兴趣字段的最小值和最大值。在一个实施例中,使数据写操作和元数据写操作同步以避免在发生系统崩溃的情况下的可能的不一致。例如,使用事务型数据库系统,使得如果字段值被存储在缓冲器360中,保证元数据结构365被相应地更新,即使底层系统在两个步骤之间崩溃。

在某个时间点(见下文),控制系统355基于元数据结构365和缓冲器360的内容来生成440数据块350。具体地,为每个缓冲器生成一个块。不同的块可以具有不同的尺寸。块尺寸可以由于例如存储在块中的字段值的类型(和下文讨论的对其应用的压缩算法)和促使该快被生成的触发器的类型(也在下文讨论)而不同。在一个实施例中,可以指定最大块尺寸。

在一个实施例中,每个块包括元数据结构365、相关缓冲器的内容、块标识符(ChunkID)、条带标识符(StripeID)和一组索引位置标识符(IndexLocationID)。请注意,涉及块的元数据部分的感兴趣字段和涉及块的“有效负荷”部分的与缓冲器相关联的字段需要不是相同字段。ChunkID相对于其它块唯一地识别所述块。使用在块组之间被共享的StripeID来将块相互关联(因为所有块涉及同一组事件)。下一次控制系统355生成440数据块350时,该块将涉及一组不同的事件,因此将使用不同的StripeID。该组IndexLocationID包括用于缓冲器/块中的每个字段值的一个IndexLocationID。IndexLocationID用来访问对应于同一事件的不同块中的字段值。在一个实施例中,IndexLocationID包括StripeID和偏移标识符(OffsetID)。OffsetID指示(缓冲器/块内)哪个字段值对应于期望事件。

在一个实施例中,相关缓冲器360的内容在其被存储在块350中之前被压缩。压缩缓冲器内容使得这种方法成为用于长期数据存储的成本有效的选择。可以使用任何数据压缩算法来生成内容的压缩版本。

在一个实施例中,使用列类型特定压缩算法。例如,包含时间戳的基于列的块(诸如与ReceiptTime字段相关联的块)可以使用增量编码。增量编码存储相对于前一个值的差,而不是存储值本身。例如,如果原始值是序列<88888123、88888125、88888126、88888127、88888128>,则增量编码将产生序列<88888123, 2, 1, 1, 1>。作为另一示例,低基数的列可以使用常见的串压缩。生成唯一串符号表格。存储符号表格中的条目的索引而不是串本身。例如,如果原始值是<成功、失败、成功、失败、成功、成功、失败>的序列且符号表格是<成功、失败>,则常见的串压缩将产生<0, 1, 0, 1, 0, 0, 1>的序列。在另一实施例中,使用不同的无损压缩算法,诸如GNU zip(gzip)。

在一个实施例中,块350还包括“幻数”和版本标识符。有时称为文件签名的幻数是识别块的数据类型的字节的短序列。例如,幻数在其它数据和文件格式(包括其它块)上是合理地唯一的(即,以高概率是唯一的)。因此,当读取块时,容易确定块是否采取期望的格式。如果块的实际幻数不同于期望的幻数,则块是“错误的”(例如,被损坏)。幻数从而帮助检测数据损坏并重新使数据块边界同步以便恢复损坏数据。(如果实际幻数与期望的幻数匹配,则在块中稍后发生的数据仍可能是错误的。然而,匹配幻数对大多数常见情况排除了这种可能性。) 版本标识符使得能够适应已经改变的数据和文件格式。例如,当读取块时,可以与幻数相结合地使用版本标识符以指示关于数据或文件格式的附加信息。

在另一实施例中(也未示出),控制系统355还生成缓冲器360的内容的消息摘要。例如,控制系统355对存储在缓冲器360中的字节应用密码散列函数。可以使用任何密码散列函数,诸如消息摘要算法5(MD5)或安全散列算法家族中的算法(例如,SHA-256)。在一个实施例中,摘要值被存储在块350中。此值稍后可以用来确定(以压缩形式)存储在块中的缓冲器数据是否已改变或被篡改。这通过在事件已经改变时使得其引起注意来帮助保证存储事件的完整性。并且,当块350到达存储管理器320时,可以将摘要值连同块的元数据一起存储在块表格380中。这样,如果稍后块在其被存储在数据文件385中的时候被篡改(或损坏),则被篡改块的消息摘要将不与先前存储在块表格380中的消息摘要匹配。

然后将该组缓冲器360和元数据结构365重新初始化440,从而清洗缓冲器360。在一个实施例中,该组缓冲器360包括附加缓冲器,其能够用来在其它缓冲器满了或正在被清洗的时候存储进入的事件。

在一个实施例中,在缓冲器360中的任何一个装满时执行(“触发”)步骤440。在另一实施例中,当已经逝去特定时间段(“超时窗口”)时执行(触发)步骤440,在该特定时间段期间,事件接收器310未接收到事件。

控制系统355将数据块350发送450到存储管理器320。

存储管理器320接收460块350。控制系统370将块存储470在一个或多个数据文件385中(见下文)。在一个实施例中,在块被存储之前出于安全目的将其加密。控制系统370还更新470块表格380。例如,控制系统370向该表格添加关于其刚刚存储在(一个或多个)数据文件385中的块350的信息。

控制系统370在每个数据文件385内按照“附加”顺序来写入块350。这有时称为“写一次日记(write once journaled)”。在一个实施例中,控制系统保持指示数据文件内的能够写入块的位置的“写指针”。在块已被写入数据文件之后,修改写指针以指示同一数据文件内的位置(具体地,在刚刚写入的块的结尾处)。如果写入块装满了数据文件,则将写指针修改为指示不同数据文件内的能够用来存储块的位置(具体地,在开头处)。在一个实施例中(未示出),通过首先将块高速缓存在存储器中来推迟块写入。然后将多个连续块组合到一个写操作中以便在RAID 5盘存储系统上最优化完全条带化写入。通过使用诸如写的大型顺序输入操作,以高速度、吞吐量和并发性来驱动硬件。

如果存在预先分配的数据文件(例如,如在上述自由列表中列出的),则控制系统370使用该数据文件并将该数据文件的唯一标识符从自由列表去除(因为该数据文件不再可用)。如果不存在预先分配的数据文件,则控制系统370通过定位可用空间并更新数据文件表格375来创建新的数据文件。例如,控制系统370向该表格添加关于其刚刚创建的新数据文件385的信息。在一个实施例中,分派给新数据文件385的唯一标识符等于1和与最近分配的数据文件385相关联的唯一标识符的和。

方法400具有许多期望的特性。例如,其是高度可缩放的,因为其能够支持接收非常高的数目的每秒事件(EPS)。可以使用多个事件接收器310,并且事件数据的写入是快速的,因为其仅涉及附加操作而没有查寻操作。方法400还以高可用性为特征,因为其提供对数据的连续访问。删除旧事件不会使得存储介质破碎,这意味着不要求碎片整理过程,以及因此也不要求维护窗口。不要求用于清理任务的隐含停机时间。并且,由于盘写入操作是高效的,所以其避免了开销,以便为处理查询留出余地。

6. 存储回收 

在某个时间点(下文讨论),回收正在被一个或多个数据文件385使用的存储以供未来使用。图5是举例说明根据一个实施例的回收存储的方法。在一个实施例中,由存储管理器320(例如,其控制系统370)来执行图5的方法500。

识别510与特定保留策略(下文描述)相关联的最旧数据文件385。由于数据文件具有基于单调增加编号的唯一标识符,所以容易查询数据文件表格375以找到与保留策略相关联的最旧数据文件(即,具有最低唯一标识符的数据文件)。

从块表格380去除520关于包含在已识别数据文件385中的所有块350的信息。

删除530表示已识别数据文件385的数据文件表格375中的条目。

用a)新的唯一标识符(其比最高的所使用的数据文件标识符高一)和b)引用先前最旧数据文件(即在步骤510中识别的数据文件)的物理位置的路径属性在数据文件表格375中创建540新的条目。

新回收的数据文件385被添加550到可用的预先分配数据文件的列表并准备好接收新的块。

在所示的实施例中,当回收了数据文件的存储,该数据文件被重复利用(例如,重新使用或重写)而不是删除。

存储回收算法的细节(包括例如何时执行它和回收多少存储)取决于与数据文件385相关联的保留策略。保留策略基于例如盘空间使用阈值或保留块的最大时间来限制块350的保留。何时执行存储回收算法的示例是:当与该策略相关联的所有数据文件都是满的且不能再分配数据文件时(例如,因为没有留下的存储空间);当已经达到特定阈值时(例如,在为与该保留策略相关联的数据文件留下的自由存储空间的量的方面);当已经逝去特定时间段时;当存在与该策略相关联的特定数目的数据文件时;以及当与该策略相关联的数据文件中的最旧块已经达到阈值年龄时。在一个实施例中,数据文件在回收其空间之前被备份到另一系统上。以此方式,可以在仍保持现有数据的同时使得更多的存储可用。

在一个实施例中,所有数据文件385与同一保留策略相关联。在另一实施例中,存在多个保留策略,并且每个数据文件与多个保留策略中的任何一个相关联。可以将多个数据文件与同一保留策略相关联。可以由用户来创建并修改保留策略。在一个实施例中,存储管理器320在逻辑上为每个保留策略保持上述的存储回收算法的一个实例。例如,每个数据文件385包括指示应用于该数据文件的保留策略的元数据,并且块被存储在对应于该块的保留策略的数据文件中。

如果存在多个保留策略,则略微修改图3所示的系统170(未示出)。具体地,事件接收器310包括用于每个保留策略的一组缓冲器360和一个元数据结构365。在从事件提取字段值并将其存储在该组缓冲器中且更新元数据结构(步骤430)之前,控制系统355确定应对该事件应用哪个保留策略。此确定是基于例如特定时间的静态映射或属性。可以使用任何属性,诸如优先级或事件源。基于此确定,控制系统355将事件字段值存储在适当的一组缓冲器中并更新适当的元数据结构。因此,一组特定缓冲器中的所有事件字段值将与同一保留策略相关联。

因而断定,基于该该组缓冲器生成的基于列的块350将与同一保留策略相关联。在将块存储在数据文件385中(步骤470)之前,控制系统370确定块的保留策略并将块存储在与该策略相关联的数据文件中。因此,特定数据文件中的所有块将与同一保留策略相关联。

可替换地,可以将基于列的块相关的不同缓冲器360与不同的保留策略相关联,即使缓冲器正在存储来自同一组事件的字段值。例如,存储被更经常搜索的字段的块能够具有与存储不那么经常被搜索的字段的块不同的保留策略。在该实施例中,可以将来自第一事件的第一字段值与第一保留策略相关联,并且可以将来自同一事件的第二字段值与第二(不同的)保留策略相关联。

在一个实施例中,每个保留策略具有其自己的数据文件385的群组。用唯一编号来标记每个数据文件。该编号确定一个群组内的文件的顺序。按照附加顺序来写入数据文件。文件未被更新,并且文件被写入一次且在仅附加模式下操作,这防止日志数据篡改。当一个保留群组内的所有文件被装满时,从该群组中的第一(即最旧)文件回收存储。在一个实施例中,针对每个保留策略来保持单独的数据文件表格375,其包含用于已被分配给该保留策略的数据文件385的条目。如果保持自由列表,则只有一个自由列表被用于整个存储管理器320,无论存在多少保留策略。

7. 查询/数据检索 

回想基于行的块包含用于一组事件的完整信息。来自该同一组事件的字段值的基于列的块是包含在基于行的块中的信息的子集。由于基于列的块包含比基于行的块少的信息,所以加载到存储器中(例如从数据文件)并进行搜索也是更快的。因此,如果搜索查询项涉及基于列的块的字段,则搜索基于列的块比搜索基于行的块更快。由于基于列的块有助于搜索,所以其有时称为“搜索索引”或简单地“索引”。

在块350已被存储在数据文件385中之后,可以查询块内的字段值。可以独立地或作为处理交互搜索或生成报告的一部分来执行查询。查询被表示为能够被针对事件进行评估的表达式。该表达式包括一个或多个搜索项。搜索项涉及事件的内容,具体地涉及特定字段和该字段的值。例如,搜索项“TransportProtocol(传输协议)=TCP”涉及TransportProtocol字段和等于“TCP”的该字段的值。作为另一示例,搜索项“优先级包含‘高’”涉及优先级字段和等于“‘高’”的该字段的值。搜索项的一个常见类型包括时间戳字段(例如EventReceipt(事件接收))和时间段(例如起始时间和结束时间)。执行搜索查询的结果常常是一个或多个事件的组。例如,搜索查询“从其中TransportProtocol=TCP的事件选择*”将返回一组事件,其中的每一个在其TransportProtocol字段中具有“TCP”的值。

在一个实施例中,查询过程分多个阶段发生。第一阶段基于“感兴趣字段”信息(如存储在块的元数据中)来过滤数据块350。第二阶段基于字段值(如存储在块的“有效负荷”中)来过滤数据块350。第三阶段将满足该查询的事件聚集。第一阶段从而充当用于识别应进一步调查哪些数据块(及其对应事件)和应忽视哪些数据块(及其对应事件)的“粗切割”。在大多数情况下,当查询或检索事件时不考虑分派给块的保留策略,因为哪个保留策略应用于包含事件的块不是令人感兴趣的。

在第一阶段中,识别涉及包含在元数据结构365(当事件字段值被存储在缓冲器360中而不是作为数据文件385中的数据块350的一部分时返回)中的信息的查询内的搜索项。此元数据信息包括相关事件接收器的唯一标识符并且对于每个感兴趣字段包括最小值和最大值,所述最小值和最大值一起反映多个事件(最初,其字段值被存储在同一缓冲器中的事件;稍后,其字段值被存储在同一数据块中的事件)上的该字段的值的范围。回想元数据信息被作为块150的一部分传送到存储管理器320。然后,元数据信息被存储在块表格380中。因此,为了基于此元数据来搜索事件,使用“元数据搜索项”来搜索块表格380。这将产生哪些块(如果有的话)可能包含满足元数据搜索项的事件。以此方式,可以基于用于事件接收器和/或感兴趣字段的特定值(或值范围)来约束搜索(因为这些值被存储在块表格380中的元数据中)。

由于“感兴趣字段”元数据被表示为值的范围,所以块满足元数据搜索项的事实不一定意味着块包含满足元数据搜索项的事件。例如,如果元数据搜索项是10的字段值且块包含其字段值分别是5和15的事件,则10将落在该范围内,并且该块将被识别为满足元数据搜索项。然而,块可能不包含具有10的字段值的事件。(这就是为什么查询分多个阶段发生的原因。) 然而,始终是成立的是如果块可以包含满足搜索项的事件,则该块将被识别为满足搜索项。

在第二阶段中,基于字段值(如存储在块的“有效负荷”中)来进一步过滤由第一阶段识别的数据块350。具体地,识别涉及其值被存储在基于列的块350中的字段(即“索引化”字段)的查询内的搜索项。例如,如果搜索项涉及SourceIPAddress字段,则识别与SourceIPAddress字段相关联的基于列的块。(这可以通过检查块的IndexID来完成。) 然后在已识别块内搜索该搜索项的请求值(例如,特定IP地址)。如果块的有效负荷部分(即,一组字段值)采取压缩格式,则在其中搜索所述搜索项的请求值之前对其解压缩。

在第三阶段中,将满足查询的事件聚集。继续前一示例,假设已经识别了与SourceIPAddress字段相关联的特定的基于列的块。此外,假设特定的字段值条目已经在块内被识别为与搜索项的请求值匹配。该特定字段值条目与IndexLocationID相关联。现在使用IndexLocationID来获得事件的其余字段值。

回想IndexLocationID包括StripeID和OffsetID。StripeID用来识别涉及同一组事件的其它基于列的块。(在一个实施例中,存储管理器320保持StripeID到与该StripeID相关联的ChunkID列表的映射。) 一旦识别了那些其它基于列的块,则使用OffsetID来获得适当的字段值(即,属于与基于SourceIPAddress字段识别的事件相同的事件的那些字段值)。

作为示例,考虑一组事件,其中的每一个包括DeviceVendor(设备供应商)字段、TransportProtocol字段和Priority(优先级)字段。搜索查询“从其中TransportProtocol=TCP且Priority='Very High'的事件中选择*”将返回一组事件,其中的每一个在其TransportProtocol字段中具有“TCP”的值且在其Priority字段中具有“‘Very High’”的值。搜索查询“从其中TransportProtocol=TCP且Priority='Very High'的事件中选择DeviceVendor”将仅返回来自该组事件(其中的每一个在其TransportProtocol字段中具有“TCP”的值且在其Priority字段中具有‘Very High’的值)的DeviceVendor字段值。

假设DeviceVendor、TransportProtocol和Priority不是“感兴趣字段”(并因此不具有存储在任何块的元数据部分中的值范围)。执行此查询的一种方式如下:1)识别与TransportProtocol字段相关联的基于列的块。搜索那些块以寻找等于“TCP”的字段值。对于每个匹配的字段值而言,存储相关的IndexLocationID。2)识别与Priority字段相关联的基于列的块。搜索那些块以寻找等于“‘Very High’”的字段值。对于每个匹配的字段值而言,存储相关的IndexLocationID。3)确定在(1)中存储的IndexLocationID和在(2)中存储的IndexLocationID的交集(即确定哪些IndexLocationID被存储在(1)和(2)两者中)。4)识别与DeviceVendor字段相关联的基于列的块。对于(3)中的每个IndexLocationID而言,确定对应的字段值并将该值作为搜索结果的一部分返回。

在一个实施例(未示出)中,按照特定的顺序来分析事件。例如,按照升序(即首先是最旧事件)或降序(首先是最新事件),基于事件的事件接收时间来分析事件。按照特定顺序来分析事件并将匹配事件附加于搜索结果意味着搜索结果中的事件将已经处于该特定顺序。不要求事件的排序。

在第一阶段中,可能的是没有搜索项涉及包含在元数据结构365中的信息。如果这种情况发生,则所有块350将被识别为可能包含满足元数据搜索项的事件字段值(因为不存在元数据搜索项)。

上述算法搜索被存储在块350中的事件字段值。然而,日志记录系统170可以包含事件接收器310中(例如,该组缓冲器360内)的尚未被存储在块中的附加事件字段值。以上算法将不搜索这些事件字段值。在一个实施例中,在执行算法之前,清洗该组缓冲器360,使得事件字段值将被发送到存储管理器320并存储在块中。这样,当执行算法时,还将搜索先前在该组缓冲器中的事件字段值。在另一实施例中,与上述算法类似地,使用该组缓冲器360和元数据结构365的内容在事件接收器310上执行单独的搜索。这样,将搜索所有事件字段值,无论其被存储在存储管理器320中还是事件接收器310中。

图6是举例说明根据一个实施例的用于查询的方法的流程图。在一个实施例中,由存储管理器320(例如,其控制系统370)来执行图6的方法600。在方法600开始之前,接收搜索查询。该搜索查询包括一个或多个搜索项。

识别610(在接收到的搜索查询内)任何元数据搜索项。

使用已识别的元数据搜索项来搜索620块表格380。回想块表格380中的每个条目对应于块350,并且条目包括存储在块中的元数据和块的位置。使用已识别的元数据搜索项来搜索块表格380的元数据部分。

使用存储在块表格380中的块的位置来检索630其元数据满足元数据搜索项的每个块350。

识别640(在接收到的搜索查询内)任何索引化搜索项。

(从在步骤630中检索的那些之中)识别650与索引化搜索项相关联的任何块。

使用所识别的索引化搜索项来搜索660在步骤640中识别的块的有效负荷部分。

将满足搜索查询的事件聚集670。当块的有效负荷部分内的字段值条目与搜索项匹配时,确定条目的IndexLocationID并将其用来访问匹配事件的其余字段的字段值条目。

8. 附加实施例—存档 

在一个实施例中,日志记录系统170支持用于数据文件385的存档功能。例如,可以将数据文件385导入日志记录系统170并从日志记录系统170导出。作为另一示例,可以将数据文件385备份到另一系统上,并稍后恢复到日志记录系统170中。由于事件被存储在块中且块被存储在数据文件中,所以事件可容易地转移成近线或离线存储。在一个实施例中,基于档案标准自动地将数据文件存档,所述档案标准可以类似于用于查询的标准(例如,存储在数据文件内的块的元数据结构中的信息的值)。在另一实施例中,手动地将数据文件存档(例如,响应于用户命令)。

9. 与基于列的块相结合的基于行的块 

A. 存储 

'078申请描述了仅使用基于行的块来存储事件数据。在上文中,本申请描述了仅使用基于列的块来存储事件数据。第三种类型的事件存储使用基于行的块和基于列的块两者。这种类型的事件存储将事件存储两次—使用基于行的块存储一次和使用一个或多个基于列的块存储一次。例如,一组事件将被存储为一个基于行的块。那些事件的字段值还将被存储为基于列的块(每个字段一个基于列的块)。

回想基于行的存储是写最优化的,而基于列的存储是读最优化的。使用基于行和基于列的块两者来存储事件的优点是这两种优化都是可用的。基于行的块的写入更快,因此使用该架构使得事件能够被更加快速地存储。基于列的块读起来更快,因此使用该架构使得事件能够被更快速地读取(例如查询)。

在其中正在使用基于行的块和基于列的块两者的一个实施例中,不作为同一事务的一部分来执行基于行的块的生成和存储及基于列的块的生成和存储。如果正在以非常高的速率接收事件,则基于列的块的生成和存储(“索引化”)可以落后于基于行的块的生成和存储。并没有以索引化为成本(例如,时间成本)而放弃或延迟数据。请注意,即使索引化落在基于行的块的生成和存储后面,用户仍能够使用基于行的块来查询所有事件数据。

并且,可以将基于行的块和基于列的块与不同的保留策略相关联。例如,可以将存储一组事件的基于行的块与第一保留策略相关联,并且可以将存储同一组事件的基于列的块与第二保留策略(或多个保留策略,如上所述)相关联。只要存在基于行的块,则在必要时能够重新创建基于列的块。同样地,只要存在基于列的块,则在必要时能够重新创建基于行的块。通常,在多个基于列的块中比在一个基于行的块中要求更少的空间来存储一组事件。因此,在一个实施例中,(例如,对于同一组事件)比基于行的块更长地存储基于列的块。

如果正在使用基于行和基于列的块两者,这不一定意味着必须将事件的所有列(字段)存储在基于列的块中。考虑使用基于行的块存储的一组事件。代替将事件的所有列存储为基于列的块,以这种方式仅存储所选列。由于基于列的块查询起来更快,所以也许仅仅被最频繁查询的列被存储为基于列的块。请注意,即使其余列未被存储为基于列的块,仍能通过使用基于行的块来查询其字段值,因为基于行的块包括所有事件数据。

因而断定,最优化对于存储为基于行的块的事件的查询的一种方式是为被最频繁地查询的事件字段创建基于列的块。这些基于列的块的创建可以在事件存储过程中的任何点发生。例如,'078申请描述了存储基于行的块的数据文件。可以从存储的基于行的块提取事件并然后将其用来创建一个或多个基于列的块。(请注意,如果期望,可以将来自多个基于行的块的字段值的列存储在一个基于列的块中。) 可替换地,当存储管理器首先接收到块并将该块加载到存储器中时,管理器可以创建一个或多个基于列的块。这样,不必从存储的基于行的块提取事件并在稍后将其加载到存储器中。另一可能性是事件接收器创建基于列的块,如上所述。或者,被发送到事件接收器的日志数据可以已经采取基于列的格式。

上述四个存储类型(仅行、 仅列、行和所有列以及行和所选列)不是互相排斥的。一个日志记录系统可以使用全部四个存储类型。例如,可以使用基于行的块来存储第一组事件,可以使用基于列的块来存储第二组事件,可以使用基于行和基于列的块(对于所有列而言)来存储第三组事件,并可以使用基于行和基于列的块(对于所选列而言)来存储第四组事件。哪个存储方案是最好的取决于情况。虽然基于行的块创建起来更快,但基于列的块查询起来更快。

在一个实施例中,基于何时接收到事件来选择存储架构。例如,使用基于行和基于列的块(对于所有列而言)来存储最近(例如,在过去的30天内)接收到的事件。使用仅基于行的块(或仅基于列的块)来存储较旧的事件。如果先前使用基于行和基于列的块(对于所有块而言)来存储较旧的事件,则基于行的块和基于列的块包含相同的信息,因此可以删除任何一个。如果先前使用基于行和基于列的块(对于所选列而言)来存储较旧的事件,则基于行的块和基于列的块不包含相同的信息,并且删除基于行的块将导致信息被丢失。在这种情况下,删除基于列的块可能更好(因为其包含的信息是冗余的)。

在另一实施例中,基于接收到事件的事件接收器来选择存储架构。例如,使用基于行和基于列的块来存储由第一接收器接收到的事件。使用仅基于行的块(或仅基于列的块)来存储由第二接收器接收到的事件。

在一个实施例中,日志记录系统170的初始化包括指定存储方案(例如,仅行、仅列、行和所有列或行和所选列)和应何时使用该方案(例如,基于事件接收时间落在时间段内或基于由特定事件接收器接收到事件)。在另一实施例中,可以在任何时间改变存储方案(和/或应何时使用该方案)。

B. 查询/数据检索 

'078申请描述了对于使用仅基于行的块存储的事件数据的查询和数据检索。为了执行查询,识别可以包含满足该查询的事件的数据块。具体地,识别查询内的包含被包含在元数据结构中的信息的搜索项。使用“元数据搜索项”来搜索块表格。以此方式,可以基于存储在元数据中的信息的特定值来约束搜索。将所识别的块分解成其组成事件。识别满足该查询的事件。

在上文中,本申请描述了对于使用仅基于列的块存储的事件数据的查询和数据检索。为了执行查询,首先基于“感兴趣字段”信息(如存储在块的元数据中)来过滤数据块。然后基于字段值(如存储在块的“有效负荷”中)来过滤剩余块。最后,将满足该查询的事件逐字段地聚集。

回想基于列的块包括一组索引位置标识符(IndexLocationID)。该组IndexLocationID包括用于块中的每个字段值的一个IndexLocationID。IndexLocationID用来访问对应于同一事件的不同块中的字段值。当仅存在基于列的块时,使用IndexLocationID来将满足搜索查询的事件(逐字段地)聚集。

当存在基于行和基于列的块两者时,不需要逐字段地将满足搜索查询的事件聚集。作为替代,能够全部从对应的基于行的块获得事件。具体地,基于列的块使用“表格位置标识符”(TableLocationID)来间接地引用其相关的基于行的块。在一个实施例中,一组表格位置标识符(TableLocationID)被存储为其自己的基于列的块。该块中的每个TableLocationID对应于特定的事件。TableLocationID包括基于行的块标识符(RBChunkID)和基于列的块偏移标识符(RBChunkOffsetID)。RBChunkID指示哪个基于行的块包含与TableLocationID相关联的事件。RBChunkOffsetID指示该事件(在基于行的块内)在哪里开始。每当生成一组基于列的块(例如,基于现有基于行的块或由事件接收器,如上文关于步骤440所述)时,还生成TableLocationID基于列的块。稍后,当执行查询并在这些基于列的块中的一个中找到匹配字段值时,使用相关IndexLocationID(具体地为OffsetID)来访问来自TableLocationID基于列的块的适当TableLocationID。以此方式,单个查询可以使用基于行的存储和基于列的存储二者。

刚刚已描述了三个不同的查询执行方案—仅行、仅列以及行和列。查询优化器确定应对特定的查询使用哪个执行方案。具体地,查询优化器计算每个执行方案的“总成本”并且然后选择具有最低成本的方案。(在一个实施例中,查询优化器仅考虑仅列方案及行和列方案,因为仅行方案在成本上很可能是最高的。) 执行方案的总成本是不同的子成本的函数,所述子成本诸如CPU成本和输入/输出(I/O)成本。子成本又是查询的谓词的选择性和在查询(谓词和期望搜索结果两者)中涉及的列(字段)的数目的函数。基于关于过去事件的字段的统计信息来估计该选择性。例如,由直方图来提供关于字段上的数据分布的信息,直方图将字段上的值划分到k个桶中。

通常,选择性越低,查询优化器越有可能选择仅列方案。选择性越高,查询优化器越有可能选择行和列方案。并且,列的数目越低,查询优化器越有可能选择仅列方案。列的数目越高,查询优化器越有可能选择行和列方案。

搜索查询可能不请求满足该查询的事件的所有字段。在这种情况下,可以如上所述(使用TableLocationID和基于行的块)整体地获得事件,以及然后可以在生成搜索结果之前去除不必要的字段。如果搜索查询请求许多字段,则这种方法可能比从不同的基于列的块单独地获得每个字段更快。

回想搜索基于列的块比搜索基于行的块更快。考虑涉及特定事件字段的搜索查询项。如果该字段与现有基于列的块相关联,则搜索该基于列的块来寻找期望字段值。如果不存在此类基于列的块,则改为搜索适当的基于行的块。可替换地,可以(基于基于行的块)创建基于列的块并然后对其进行搜索。当将需要针对若干事件搜索同一字段时,创建基于列的块可能是优选的。

C. 附加实施例 

在其中正在使用基于行的块和基于列的块两者的一个实施例中,基于列的块发生器(“索引器”)支持检查点恢复。具体地,在系统崩溃的情况下,索引器能够从上一次的检查点恢复并重新开始。检查点间隔是可配置的。间隔越长,索引器的性能越高(例如,用来生成基于列的块的速度越高),但是崩溃恢复时间越长。在检查点阶段期间,索引器保持上次扫描的TableLocationID和上次创建的IndexLocationID。在恢复阶段期间,索引器在所保持的TableLocationID和IndexLocationID处开始并继续索引化表格中的任何剩余数据。

可以对基于行的存储和/或基于列的存储执行存档。用于自动存档的档案标准在基于行的存储与基于列的存储之间可以是不同的。

包括以上说明是为了举例说明优选实施例的操作且并不意图限制本发明的范围。本发明的范围仅仅由以下权利要求来限制。根据以上讨论,许多变化对于相关领域的技术人员来说将是显而易见的,所述变化仍被本发明的精神和范围所涵盖。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号