查询管道的制作方法

文档序号:6360841阅读:191来源:国知局
专利名称:查询管道的制作方法
查询管道优先权
本申请要求2010年6月10日提交的美国临时专利申请序号61/353,559的优先权,其被整体地通过弓I用结合到本文中。
背景技术
网络安全管理一般涉及从网络设备收集反映设备的网络活动和操作的数据,并分析该数据以增强安全性。例如,可以分析数据以识别对网络或网络设备的攻击,并且确定哪个用户或机器负责。如果攻击正在进行中,则可以执行对抗措施以挫败攻击或减轻由攻击引起的损害。所收集的数据通常源自于消息(诸如事件、警报或警告)或日志文件中的条目, 其是由网络设备生成的。网络设备的示例包括防火墙、入侵检测系统、服务器、交换机、路由
-nfrO每个消息或日志文件条目被存储以供未来使用。可以查询所存储的消息或日志文件条目以识别与攻击或分析有关的信息。为了促进消息或日志文件条目的搜索,可以将数据存储在关系数据库中。在接收到查询后,关系数据库可以识别并返回相关消息或日志文件。可以处理(例如过滤或排序)所返回的消息或日志文件并随后呈现给用户。关系数据库能够处理大量的数据。然而,关系数据库可以执行某些类型的查询但不能执行其他的查询。因此,用户必须将查询操作符和条件精心构造成与关系数据库兼容。在某些情况下,用户可能必须对从关系数据库获得的查询结果执行后续处理以获得期望的结果。此外,关系数据库常常要求访问较慢的辅助存储设备(例如硬盘)以便执行查询。


图I是图示了根据一个实施例的具有安全信息和事件管理系统的环境的方框图。图2图示了根据一个实施例的用于充当安全信息和事件管理系统的日志系统的计算机的方框图。图3A是图示了根据一个实施例的与存储日志数据相关联的日志系统的部件的方框图。图3B是图示了根据一个实施例的与对所存储日志数据执行查询操作相关联的日志系统的部件的方框图。图4是图示了根据一个实施例的用于存储日志数据的方法的流程图。图5是图示了根据一个实施例的用于查询所存储日志数据的方法的流程图。附图仅仅出于图示的目的描绘了实施例。本领域的技术人员根据以下描述将容易认识到在不脱离在此所述原理的情况下可以采用在此所示的结构和方法的替换实施例。
具体实施例方式根据实施例,计算机系统用于跨计算机网络从不同的设备收集数据,将数据规格化成通用模式(schema),并将规格化的数据合并。然后可以在集中式视图中监视、分析数据(“事件”)并将其用于调查和补救。可以使事件与规则互相关以创建元事件。相关包括例如发现事件之间的关系,推断那些关系的重要性(例如通过生成元事件),将事件和元事件按优先次序排列,并且提供用于采取行动的框架。该系统(其一个实施例被表示为由诸如处理器的计算机硬件执行的机器可读指令)使得能够实现可疑网络活动的聚合、相关、检测和调查跟踪。该系统还支持响应管理、特别(ad-hoc)查询解析、用于取证分析的报告和重放以及网络威胁和活动的图形可视化。实施例还包括日志系统,该日志系统生成查询操作序列,其涉及对关系数据库的至少一个查询操作和基于流处理的至少一个查询操作。日志系统接收查询请求并识别将对关系数据库执行的查询操作和将由流处理来执行的查询操作。用于关系数据库的查询操作被转换成SQL (结构化查询语言)命令并提供给关系数据库。日志系统从关系数据库接收查询结果并基于关系数据库或流处理来执行后续查询操作。日志系统利用关系数据库的能力来处理大量数据并利用流处理的灵活性来执行各种类型的查询命令。在此所述的流处理指的是在主数据储存器内以连续方式对数据流执行多个操作。 在流处理中,来自早先操作的已处理数据被连续地馈送给后续操作以进行处理。该系统是关于示例描述的,不应将其理解为限制实施例的更广泛精神和范围。例如,在此给出的示例描述了分布式代理、管理器和控制台,其仅仅是一个实施例。一般概念和范围要广泛得多,并且可以延伸至任何基于计算机或基于网络的安全系统。并且,给出了可以向和从系统的部件传递的消息的示例和可以被系统的部件所使用的数据模式,但其并不意图是包括一切的示例,并且不应这样认为。图I是图示了根据一个实施例的具有安全信息和事件管理系统的环境的方框图。图I包括安全信息和事件管理(SIEM)系统100和一个或多个数据源110。数据源110是网络节点,其可以是设备或软件应用。数据源110的示例包括入侵检测系统(IDS)、入侵预防系统(IPS)、弱点评估工具、防火墙、防病毒工具、防垃圾邮件工具、加密工具、应用审计日志以及物理安全日志。数据源110的类型包括安全检测和代理系统、访问和策略控制、核心服务日志和日志合并器、网络硬件、加密设备以及物理安全。安全检测和代理系统的示例包括IDS、IPS、多用途安全器械、弱点评估和管理、防病毒、诱捕系统、威胁响应技术以及网络监视。访问和策略控制系统的示例包括访问和身份管理、虚拟专用网络(VPN)、高速缓存引擎、防火墙以及安全策略管理。核心服务日志和日志合并器的示例包括操作系统日志、数据库审计日志、应用日志、日志合并器、web服务器日志以及管理控制台。网络硬件的示例包括路由器和交换机。加密设备的示例包括数据安全和完整性。物理安全系统的示例包括卡密钥阅读器、生物统计信息、防盗警报器以及火警。SIEM系统100包括一个或多个代理120、一个或多个管理器130、一个或多个数据库140、一个或多个在线档案150、一个或多个用户接口 160以及一个或多个日志系统170。在某些实施例中,这些模块被组合在单个平台中或分布在两个、三个或更多平台中(诸如在图I中)。此多层架构的使用随着计算机网络或系统增长而支持可缩放性。代理120提供了到数据源110的接口。例如,代理120从数据源110收集数据(“原始事件”)、处理数据并将已处理数据(“事件”)发送到管理器130。代理120可以在任何地方操作,诸如在经由诸如简单网络管理协议(SNMP)陷阱的协议进行通信的单独设备处、在网络内的合并点处或在数据源110处。例如,如果数据源110是软件应用,则可以在主控数据源的设备上共同主控代理120。处理可以包括规格化(normalization)、聚合和过滤。例如,可以解析单独原始事件并将其规格化以供管理器130使用。规格化可以涉及将值(诸如严重度、优先级和时区)规格化成通用格式和/或将数据结构规格化成通用模式。可以使用通用、人可读格式将事件分类。此格式使得用户更容易理解事件并使得更容易使用过滤器、规则、报告和数据监视器来分析事件。在一个实施例中,通用格式是来自ArcSight公司的通用事件格式(CEF)日志管理标准。聚合和过滤减小了发送到管理器130的事件的量,这节省了网络带宽和存储空间,增加了管理器的效率和准确度,并减少了事件处理时间。代理120基于时间段的期满或基于达到事件的阈值数目而成批地向管理器130发送事件。代理120还可以向数据源110发送命令和/或在本地主机上执行命令,诸如指示·扫描仪运行扫描。可以手动地或通过来自规则和数据监视器的自动化动作来执行这些动作。代理120还可以向其已经收集的数据添加信息,诸如通过查找网际协议(IP)地址和/或主机名以便在管理器130处解析IP/主机名查找表。代理120是经由关联的配置文件(未示出)配置的。代理120可以包括一个或多个软件模块,其包括规格化部件、时间修正部件、聚合部件、分批部件、解析器部件、传输部件和/或附加部件。可以通过配置文件中的适当命令来将这些部件激活和/或去激活。在配置期间,向管理器130注册代理120并且代理120配置有基于其数据源110和期望行为的特性。代理120还可通过手动和自动化过程二者来配置。例如,管理器130可以向代理120发送命令或配置更新。管理器130提供分析能力、情况管理工作流程能力以及服务能力。管理器130与代理120之间的通信可以是双向的(例如以使得管理器130能够向主控代理120的平台发送命令)并被加密。在某些装置中,管理器130可以充当用于多个代理120的集中器并可以将信息转发至其他管理器130 (例如部署在公司总部处的管理器)。为了执行其任务,管理器130使用多种过滤器、规则、报告、数据监视器、仪表板以及网络模型。在一个实施例中,管理器130是基于Java的服务器。分析可以包括检测、相关以及升级。例如,管理器130使用规则引擎(未示出)使从代理120接收的事件互相关,该规则引擎用网络模型和弱点信息来评价每个事件以产生实时威胁概要。关于情况管理,管理器130可以保持关于安全事件的状态及其解决方案的报告。服务可以包括管理、通知和报告。管理器130还可以提供对知识库的访问。当事件被管理器130接收到,其被存储在数据库140中。存储事件使得其能够在稍后被用于分析和参考。在一个实施例中,数据库140是关系数据库管理系统。在一个实施例中,数据库140将数据存储在分区中,所述分区是数据库的按时间顺序的片段。例如,每天创建一个新的分区以存储那天的事件。可以将分区压缩并存储在在线档案150中以供稍后检索。在一个实施例中,由来自ArcSight公司的安全生命周期信息管理(SUM)产品的SmartStorage (智能存储)存档和检索部件来提供分区管理。用户经由用户接口 160与管理器130相交互。用户接口 160使得用户能够对管理器130的特征和功能进行导航。单个管理器130可以支持多个用户接口实例。用户可获得的特征和功能可以取决于用户的角色和许可和/或管理器的配置。在一个实施例中,访问控制列表使得多个安全专业人员能够使用相同的管理器130和数据库140,但每个专业人员具有适合于其职责的其自己的视图、相关规则、警报、报告以及知识库。管理器130与用户接口 160之间的通信是双向的,并且可以被加密。在一个实施例中,存在两个类型的用户接口 160 :基于工作站的接口和基于web浏览器的接口。工作站接口是意图供安全运营中心(SOC)或类似安全监视环境中的全职安全人员使用的独立软件应用。工作站接口包括用于创建和修改过滤器、规则、报告、模式发现、仪表板以及数据监视器的创作工具。工作站接口还使得用户能够管理用户、数据库分区以及工作流程(例如事件调查和报告)。例如,工作站接口使得用户能够执行例行监视、构建复杂的相关和长序列规则以及执行例行管理功能。在一个实施例中,工作站接口是来自ArcSight公司的ESM控制台产品。web接口是独立且可远程安装的web服务器,其为web浏览器客户端提供与管理器130的安全接口。web接口意图用作用于托管安全服务提供商(MSSP)的客户、SOC运营商·以及需要从受保护网络的外面访问管理器130的用户的流水线接口。由于可以将web服务器安装在远离管理器130的位置处,所以web服务器可以在保护管理器130的防火墙外面操作。web接口提供事件监视和向下挖掘能力。在一个实施例中,作为安全特征,web接口不实现创作或管理功能。在一个实施例中,web接口是来自ArcSight公司的ArcSight Web
女口
广叩ο在一个实施例中,日志系统170是针对极高事件吞吐量被优化的事件数据存储设备。日志系统170存储安全事件(有时称为“日志数据”)。在一个实施例中,以压缩形式来存储安全事件。然而,日志系统170可以应要求检索这些事件并将其恢复至它们的原始、未修改形式,其可以用于后续取证分析。多个日志系统170可以一起工作以扩展为在存储事件时支持高持续输入速率。事件查询可以跨日志系统170的对等网络分布。用户可以经由用户接口(未示出)来配置日志系统170。日志系统170可以接收已处理事件(例如符合通用事件格式的事件)和原始事件二者。在一个实施例中,直接从数据源Iio接收原始事件(诸如系统日志消息和日志文件),并从代理120或管理器130接收已处理事件。日志系统170还可以发送原始事件和已处理事件二者。在一个实施例中,作为系统日志消息来发送原始事件(至任何设备;未示出),并将已处理事件发送至管理器130。下面将进一步描述日志系统170。通过上述架构,SIEM系统100可以支持集中式或分散式环境。这是有用的,因为一个组织可能想要实现SIEM系统100的单个实例,并且使用访问控制列表以将用户分区。替换地,该组织可以选择针对许多群组中的每一个部署单独的SIEM系统100并在“主”层次处将结果合并。此类部署还可以实现“全天候服务”布置,其中,在地理上分散的对等群组通过将主要监督职责传递给当前工作在标准营业时间的群组而相互合作。还可以将SIEM系统100部署在公司分级结构中,其中,事业部门单独地工作并支持到集中式管理功能的卷起(rollup)。在此所述的是用于在支持查询的同时高效地存储日志数据的系统和方法。可以由各种数据源(包括设备和应用两者)来生成在此所使用的“日志数据”。这些源包括例如上文所述的数据源110以及网络系统、计算机、操作系统、防病毒系统、数据库、物理基础设施、身份管理系统、目录服务、系统健康信息系统、web业务、遗留系统、专有系统、主机、主机应用、安全系统、物理设备以及SIEM源(诸如代理120和管理器130)。系统可以以许多方式获得日志数据。例如,可以接收日志数据(例如根据系统日志协议)。替换地,可以访问日志数据(例如通过读取本地或远程地存储的文件)。其他方法包括例如开放式数据库连接性(ODBC)、简单网络管理协议(SNMP)陷阱、NetFlow以及专有应用编程接口( API)。还可以由用户来输入日志数据(例如使用命令行接口( CLI))。日志数据可以采取任何格式。一个此类格式是CEF。其他格式是例如生成日志数据的数据源110所特有的。日志数据包括称为“事件”的一个或多个数据实例。事件可以是例如日志文件中的条目、系统日志服务器中的条目、警报、警告、网络分组、电子邮件或通知页面。一般地,事件生成一次且以后不改变。在一个实施例中,事件包括隐式元数据和消息。隐式元数据可以包括关于例如生成事件的设备或应用(“事件源”)和从事件源接收到事件的时间(“接收时间”)的信息。在一个实施例中,接收时间是日期/时间戳,并且事件源是网络端点标识符(例如IP地址或介·质访问控制(MAC)地址)和/或源的描述,可能包括关于产品的出售商和版本的信息。消息表示从事件源接收到的内容,并且可以采取任何形式(二进制数据、字母数字数据等)。在一个实施例中,消息是描述值得注意的情形或变化的自由形式文本。在另一实施例中,消息还包括显式元数据。显式元数据是例如通过对消息进行解析获得的。当事件源生成事件时,事件通常包括指示事件发生的时间(“事件发生时间”)的信息。通常是日期/时间戳的事件发生时间是显式元数据的示例且被频繁地用于分析。不同的事件源常常产生不一致的显式元数据(例如事件的优先级或关键性、受事件影响的设备/应用/用户和哪个用户触发事件)。在一个实施例中,如果事件不包括发生时间,则将在事件接收机接收到事件时由其生成的隐式时间戳视为原始发生时间戳。当事件被处理并潜在地通过各种系统来转发,每个系统通常具有事件接收时间的隐含标记。在一个实施例中,事件表示包括一个或多个字段的数据结构,其中,每个字段可以包含值(有时称为“属性”)。此数据结构的大小通常落在100字节至10千字节范围内。图2是根据一个实施例的可以用作用于SIEM系统100的日志系统170的平台的计算机200的高级方框图。还可以使用计算机200作为用于在此所述的其他系统的平台。所示的是被耦合到总线204的至少一个处理器202。耦合到总线204的还有主存储设备206、辅助存储设备208、键盘210、图形适配器212、定点设备214以及网络适配器216。在一个实施例中,总线204的功能是由互连芯片组提供的。显示器218被耦合到图形适配器212。辅助储存器208是能够保持数据的任何设备,例如硬驱动器、紧致盘只读存储器(⑶-R0M)、DVD或固态存储器设备。主储存器206保持被处理器202所使用的指令和数据。主储存器206常常被简单地称为“存储器”,并且可以例如实现为随机存取存储器(RAM)。与辅助储存器208相比,主储存器206具有更快的访问速度,但是有限的存储容量。因此,在没有对辅助储存器208的访问或对其有限访问的情况下执行的操作将比需要对辅助储存器208的频繁访问的操作更快且更高效。定点设备214可以是鼠标、轨迹球或其他类型的定点设备,并且与键盘210相组合地用来向计算机200中输入数据。图形适配器212在显示器218上显示图像及其他信息。网络适配器216将计算机200耦合到局域网或广域网。如本领域中所已知的,计算机200可以具有与图2所示的那些不同的和/或其他部件。另外,计算机200可以缺少某些所示部件。例如,充当日志系统170的计算机200可以缺少键盘210、定点设备214、图形适配器212和/或显示器218。此外,存储设备208可以是本地的和/或远离计算机200 (诸如在存储区域网(SAN)内实现)。计算机系统200可以用处理器202或其他硬件处理电路来执行本文所述的方法、功能及其他过程。这些方法、功能及其他过程可以实现为存储在计算机可读介质上的机器可读指令,所述计算机可读介质可以是非暂时的,诸如 硬件存储设备。图3A是图示了根据一个实施例的与存储事件相关联的安全信息和事件管理(SIEM)系统100的日志系统170的部件的方框图。日志系统170的主储存器206包括事件接收机310、存储管理器320以及查询模块314 (在图3B中示出)。虽然为了明了起见仅示出了一个事件接收机310,系统170可以利用许多事件接收机310支持大量的并发回话。在一个实施例中,每个事件接收机310与唯一标识符相关联。辅助储存器208接收块350,并将块350存储在辅助储存器208的数据文件385中。辅助储存器208还存储关系数据库324。事件接收机310接收日志数据340、处理日志数据340并输出数据“块”350。事件接收机310包括控制系统355、一个或多个缓冲器360的组以及元数据结构365。控制系统355被通信耦合到该组一个或多个缓冲器360和元数据结构365。控制系统355控制事件接收机310的操作,并且下面参考图4来详细地进一步描述。每个缓冲器360存储关于一个或多个事件的信息。在一个实施例中,缓冲器的大小是固定的,但是该大小本身是可配置的。如果不同的事件包括相同类型的字段,则可以将事件组织在表格中。表格的每行将表示不同的事件,并且表格的每列将表示不同的字段。在一个实施例中,每个缓冲器360与特定字段相关联且包括来自于来自一个或多个事件的该字段的值(“属性”)。在另一实施例中,每个缓冲器360还包括指示哪个字段与该缓冲器相关联的标识符(“IndexID”)。元数据结构365存储关于该组缓冲器360的内容的元数据。在一个实施例中,此元数据包括与接收到事件的事件接收机310相关联的唯一标识符、该组缓冲器中的事件的数目以及用于一个或多个“感兴趣字段”中的每一个的反映该组缓冲器中的所有事件上的该字段的值的范围的最小值和最大值。元数据结构365充当查询事件数据时的搜索索引。在一个实施例中,感兴趣字段不是事件字段本身。相反,其是基于存储在事件的一个或多个字段中的值所确定的“导出”值。存储管理器320接收数据块350并将其存储在辅助储存器208中,使得其可以被查询。在一个实施例中,存储管理器320生成或提取块350的元数据,并且将元数据存储在关系数据库324中的块表380中。块表380存储关于存储在块(下文描述)中的元数据和块的位置(例如与存储块的数据文件相关联的唯一标识符和其中存储了块的数据文件内的位置(例如作为偏移))的信息。存储管理器320还生成用于存储关于该一个或多个数据文件385的信息的数据文件表375。数据文件表375也被存储在关系数据库324中。在一个实施例中,数据文件表375中的每个条目表示已经为其分配空间的一个数据文件385,并且该条目包括与数据文件相关联的唯一标识符和数据文件的位置(例如文件系统、其中的路径以及文件名)。在数据文件表375中所列的数据文件385可以包含也可以不包含数据(例如块350)。在一个实施例中,在需要数据文件385之前分配数据文件385。在本实施例中,保持这些预先分配的数据文件385的列表(称为“空闲列表”)。数据文件385存储多个块350。在一个实施例中,所有数据文件是相同大小的(例如I千兆字节)且按时间顺序组织。关系数据库324包括使得关系数据库324能够与主储存器206中的可执行部件相结合地工作的插件323。在一个实施例中,关系数据库324是市售数据库或开放源数据库。插件323接收数据文件表375和块表380,并且将其存储,使得可以在查询期间访问这些表格。图4是图示了根据一个实施例的用于存储日志数据的方法的流程图。在一个实施 例中,由事件接收机310 (例如其控制系统355)和存储管理器320来共同地执行图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)以及一组索弓I位置标识符(IndexLocationID)。涉及块的元数据部分的感兴趣字段和涉及块的“有效负荷”部分的与缓冲器相关联的字段不需要是同一字段。ChunkID相对于其他块唯一地识别该块。在块组之间被共享的StripeID用来使块相互关联(因为所有块涉及同一组事件)。下次控制系统355生成440数据块350时,块将涉及不同组的事件,因此将使用不同的StripelD。IndexLocationID组包括用于缓冲器/块中的每个字段值的一个IndexLocationID。IndexLocationID用来访问对应于同一事件的不同块中的字段值。在一个实施例中,IndexLocationID包括StripeID和偏移标识符(OffsetID)。OffsetID指示(在缓冲器/块内的)哪个字段值对应于期望事件。
在一个实施例中,关联缓冲器360的内容在其被存储在块350中之前被压缩。将缓冲器内容压缩使得这种方法成为用于长期数据存储的具有成本效益的选择。可以使用任何数据压缩算法来生成内容的压缩版本。在一个实施例中,块350还包括“幻数”和版本标识符。有时称为文件签名的幻数是识别块的数据类型的短字节序列。例如,幻数在其他数据和文件格式(包括其他块)上是合理唯一的(即具有高概率的唯一)。因此,当块被读取时,容易确定块是否采取预期格式。如果块的实际幻数不同于预期幻数,则块是“错误的”(例如被损坏)。幻数从而帮助检测数据损坏并使数据块边界重新同步以便恢复损坏数据。(如果实际幻数与预期幻数匹配,则稍后在块中发生的数据可能仍是错误的。然而,匹配幻数针对大多数一般情况排除了这种可能性。)版本标识符使得能够适应已经改变的数据和文件格式。例如,当块被读取时,可以与幻数相结合地使用版本标识符以指示关于数据或文件格式的附加信息。在另一实施例(也未示出)中,控制系统355还生成缓冲器360的内容的消息摘要。例如,控制系统355向存储在缓冲器360中的字节应用密码散列函数。可以使用任何密码散列函数,诸如消息摘要算法5 (MD5)或安全散列算法系列中的算法(例如SHA-256)。在一 个实施例中,摘要值被存储在块350中。此值稍后可以用来确定(以压缩形式)存储在块中的缓冲器数据是否已被改变或篡改。这通过当事件已改变时使得其能被察觉来帮助保证所存储事件的完整性。并且,当块350到达存储管理器320时,可以将摘要值连同块的元数据一起存储在块表380中。那样,如果块稍后在其被存储在数据文件385中的同时被篡改(或损坏),则被篡改块的消息摘要将不与先前存储在块表380中的消息摘要匹配。然后将该组缓冲器360和元数据结构365重新初始化440,从而对缓冲器360进行转储清除(f lush )。在一个实施例中,该组缓冲器360包括可以用来在其他储存器满了或正进行转储清除的同时存储输入事件的附加缓冲器。在一个实施例中,当缓冲器360中的任何一个满了时,执行(“触发”)步骤440。在另一实施例中,当逝去了特定时间段(“超时窗口 ”)时执行(触发)步骤440,在该时间段期间,事件接收机310未接收到事件。控制系统355将数据块350发送450至存储管理器320。存储管理器320接收460块350并将块存储470在一个或多个数据文件385中(参见下文)。在一个实施例中,在块被存储之前出于安全目的将其加密。存储管理器320还更新470块表380。例如,存储管理器320向该表添加关于其刚刚存储在(多个)数据文件385中的块350的信息。在块350已被存储在数据文件385中之后,可以查询块内的字段值。可以独立地或作为处理交互式搜索或生成报告的一部分来执行查询。查询被表示为可以针对事件进行评估的表达式。该表达式包括一个或多个搜索操作符。搜索操作符涉及事件的内容,诸如特定字段和该字段的值。图3B是图示了根据一个实施例的与查询相关联的日志系统170的部件的方框图。用于查询的日志系统170的部件特别地包括查询模块314、关系数据库324和辅助存储设备208。查询模块314被存储在主储存器206上并在其上操作。关系数据库324被存储在辅助储存器208上。辅助存储设备208包括如上文参考图3A和4详细地描述的多个数据文件385 (在存储阶段期间创建)和关系数据库324。主储存器206和辅助储存器208经由总线204或其他通信信道来传送数据。
除其他部件之外,查询模块314还包括解析器316、优化器318、执行引擎326和结果再现器329。解析器316接收查询请求并解析该请求以识别查询操作符。在一个实施例中,查询请求包括多个查询操作符和用于辨别查询操作符的分隔符。分隔符可以是ASCII直条字符“I”。示例性查询请求如下
示例(I)
failed login time = 〃the last two hours^ | rex "extract srcIP〃 | top srcIP head 5
以上查询请求包括四个单独的查询操作符。第一操作符“failed login time = ’ thelast two hours’”指示在指定事件源处、对过去两小时内的‘failed login’尝试的搜索。在第一操作符后面的直条字符“ I ”指示第一操作符结束,并且随后将是与第二操作符有关的字符串。第二操作符(rex “extract srcIP”)是用于从由第一操作符获得的事件(在这 里是在过去两小时期间发生的失败登陆尝试)提取第一值(在这里是源IP地址)的正则表达式。第二操作符后面是另一直条字符“I”以将第二操作符与第三操作符分离。第三操作符(“top srcIP”)操作符通过匹配计数来按事件中的字段(在这种情况下,源IP地址)将匹配条目排序。“top”操作符的结果是具有两列的表格第一列包括源IP地址,并且第二列指示事件计数(表示来自该源IP地址的失败登陆尝试事件的数目)。第三操作符后面是另一直条字符“I”以将第三操作符与第四操作符分离。最后,第四操作符(“head 5”)确定来自匹配事件的前5个结果。解析器316解析查询请求并将查询请求转换成多个查询操作符的查询管道(pipeline)。在此的查询管道指的是用于按照连续的顺序进行处理的一组多个查询操作。查询管道中的查询操作的结果被提供给查询管道中的后续查询操作。在顺序地经历所有操作之后,从最后的查询操作获得最终查询结果。在一个实施例中,解析器316识别查询请求的用户名,并且修改查询管道以基于对用户准许的访问来限制结果。例如,如果允许用户“joe”基于正则表达式来访问仅某种类型的事件,则在以上示例(I)中的第一操作符与第二操作符之间添加新操作符“regex ’ joeaccess regular expression’”以限制允许用户‘joe’访问的表达式。在一个实施例中,由解析器316生成的查询管道被提供给优化器318以重新布置、消除或重写查询管道中的操作符以使得查询管道对于查询操作而言更高效或可修正。在一个示例中,优化器318移动查询管道内的操作符的位置以便实现更好的性能。例如,可以将查询“failed login | cef srcIP | regex,magic regex expression,| cef dst | topdst,,重新布置成 “failed login | cef srcIP dst | regex ' magic regex expression'
top dst'CEF是开放日志管理标准,其改善了来自不同安全和网络设备和应用的安全相关信息的互操作性。“cef”操作符从符合CEF的事件提取字段值。“cef”操作符可以使用广泛的资源,因为需要对整个事件进行解析。已修改查询管道仅执行解析一次而不是两次。在一个实施例中,可以通过对第一查询操作符内部的“cef”操作符进行重新定位来执行优化。已修改查询将为“failed login (cef srcIP dst) | regex ’magic regex expression'top dst”。在这种情况下,完全消除了昂贵的cef解析。优化器318还可以消除不需要的操作符。例如,在查询请求“failed logincef srcIP | cef dst | top dst”中,结果列出了在“dst”字段中共享相同值的事件。"cef srcIP”操作符在此查询管道中是不相关的,因为结果取决于“dst”字段中的值而不是“srcIP”字段中的值。因此,优化器318去除了 “cef srcIP”操作符并将查询管道更新成“failed login | cef dst | top dst”。已更新查询管道不包括“cef srcIP”操作符。优化器318还可以将一个或多个管道操作符重写成更高效的形式。例如,在查询请求“failed login | cef srcIP | chart _count by srcIP | sort - srcIP,,中,可以将chart_count和sort操作符组合成单个“top”操作符。chart_count操作符生成指示表示标准(例如源IP地址)的某个条目值的发生次数的图表。Sort操作符基于某个标准(例如源IP地址)将该图表中的条目排序。“top”操作符是执行chart_count操作符和sort操作符的操作的单个操作符。因此,优化器318将查询请求重写成“failed login | cefsrcIP I top srcIP,,。优化的查询管道然后被馈送给执行引擎326。特别地,执行引擎326包括数据库接口 327和流处理器328。第一组操作符被预定义成使用关系数据库324进行搜索,并且第二组操作符被预定义成由流处理器328或数据库接口 327进行处理。数据库接口 327将第一 操作符中的任何一个(其使用关系数据库324)转换成数据库查询命令(例如SQL命令)。然后将数据库查询命令转发到关系数据库324以执行查询操作。相反,第二组操作符被转发到流处理器328以用于流处理。在示例(I)中,查询操作符“failed login ”和“top”更适合于由关系数据库324进行处理,而其他查询操作符全部由流处理器328来处理。使用关系数据库来执行可能消耗大量存储器的任何操作符和被配置成用于在关系数据库上的高效执行的操作符,而使用流处理来执行其他操作。示例操作符和操作符的细节是“chart”、“Where”、“rare”和“top”操作符,其可以用于关系数据库324上的操作。相反,在流处理器328处处理“(3社”、“价&1”、“打61(18”、“ head ”、“ regex ”、“ rex ”、“ sort ”、“ tai I '“rename,,、“ rep lace'“extract” 和 “keys” 操作符。执行引擎326根据从优化器318接收到的查询管道来执行一系列查询操作。例如,执行引擎326按照在查询管道中定义的序列来执行对应于查询操作符的一系列查询操作。查询管道中的第一操作符称为查询源。查询源生成多个匹配数据条目并使用对关系数据库324的访问。在以上示例(I)中,查询源是“failed login”。在查询源之后的是支持操作符。支持操作符包括至少两个类型的查询操作符。一个是单事件操作符且另一个是聚合事件操作符。当被执行时,单事件操作符获取一个事件、处理该事件并输出已处理事件或什么也不输出。相反,聚合事件操作符获取多个事件并输出该多个事件的摘要。在以上示例(I)中,“rex”操作符是单事件操作符,而“top”操作符和“head”操作符是聚合事件操作符。查询管道可以包括作为支持操作符的访问关系数据库324的操作符。某些操作符在使用关系数据库324来执行时更加高效或可靠,即使可以用流处理来执行这些操作。如果操作符导致大量的结果集,则此类操作符可以占用过大的存储器空间;并且因此,对于流处理而言可能是不合适的。此外,关系数据库在执行诸如“如?”、“]_0化”、“81*(11 ^”、“8的”操作和各种索引操作的操作时是非常高效的。因此,使用关系数据库324而不是流处理来执行此类操作。通过使用关系数据库来执行此类查询操作,查询模块314可以提供更高的性能和可缩放性。
为了使用关系数据库324来执行搜索,数据库接口 327经由插件323向关系数据库发送数据库查询命令301。关系数据库324可能需要经由插件323向日志系统170中的存储管理器320 (或其他部件)发布RPC (远程程序调用)353以识别与查询命令301有关的数据文件表375或块表380。如果是这样,则关系数据库324从存储管理器320或其他部件接收对RPC 353的响应(未示出),其使得关系数据库324能够直接地或经由其他部件来检索相关块351、352。在一个实施例中,存储管理器320管理与存储在数据文件385中的块相关联的元数据。在从数据库接口 327接收到查询命令301之后,关系数据库324向存储管理器320发布RPC 353。存储管理器320通过向关系数据库324进行查询来确定与查询命令301有关的所有数据块是否在块表380中被索引以搜索块表380。如果所有相关数据块被索引,则存储管理器320通过在块表380上执行搜索来识别相关元数据条目,并且将所识别的元数据条目发送到关系数据库324。在一个实施例中,在多个阶段中执行关系数据库324上的查询操作。如果至少·某些相关数据块未被索引(通过确定块表380中的对应条目的存在来确定),则存储管理器320使用数据文件表375来访问数据文件385中的块以识别相关事件。存储管理器320从数据文件385检索包括相关事件的压缩块352,将块352解压缩,并且将解压缩块351或所选事件发送到关系数据库324。关系数据库324基于查询命令来执行进一步的过程,并且向数据库接口 327发送数据库查询结果302。数据库查询结果302然后变成执行引擎326处的进一步下游查询操作的基础。在一个实施例中,关系数据库324在不向存储管理器320发布RPC 353的情况下执行查询操作。在本实施例中,关系数据库324根据需要直接访问数据文件表375和/或块表380,直接从数据文件385读取压缩块352,并且在处理之前将块解压缩。针对用于流处理的查询管道中的每个操作,流处理器328创建流过程实例并执行对应的查询操作。流过程实例并不向关系数据库324进行任何查询,并且使用主储存器206的存储器空间来执行。来自对应于查询操作符的流过程实例的已处理结果被馈送给对应于查询管道中的后续查询操作符的后续流过程实例。某些流过程实例可以基于部分结果来执行操作。针对此类流过程实例,可以通过同时地执行多个流过程实例来并行地执行流处理。在管道中较早的第一流过程实例接收输入,处理该输入并将已处理结果发送到在第一流过程实例之后的第二流过程实例。如果第二流过程实例是单事件操作符,则第二流过程实例随着从第一流过程实例接收到每个已处理事件而执行并输出数据。如果第二流过程是聚合事件操作符,则第二流过程在从第一流过程实例接收到多个已处理事件之后执行并输出结果。结果再现器329从执行引擎326接收查询结果。结果再现器329然后处理查询结果以用于传输或显示并发送到用户设备。图5是图示了根据一个实施例的用于查询的方法的流程图。首先,解析器316接收510查询请求。解析器316对查询请求进行解析514并确定包括在查询请求中的查询操作符。结果,解析器316创建514查询管道。优化器318然后通过去除、重写或重新布置查询管道中的查询操作符来对所创建的查询管道进行优化518。执行引擎326然后选择520查询管道中的第一操作符。然后,执行引擎326确定521第一操作符是否将被用于关系数据库324上的查询。如果第一操作符用于查询关系数据库324,则执行引擎326的数据库接口 327将查询操作符转换522成数据库查询命令522并向关系数据库324发送526数据库查询命令301。关系数据库324根据该数据库查询命令来执行操作并将DB查询结果302返回至数据库接口 327。第一查询操作符使用数据块接口 327来在关系数据库324上执行查询。然后确定536第一操作符是否是查询管道中的最后的查询操作符。根据定义,在查询管道中存在至少一个其他查询操作符;以及因此,该方法前进544至查询管道中的下一个操作符。在前进至下一个查询操作符之后,重复确定查询操作符是否需要关系数据库324上的查询的过程和后续步骤。如果在521处确定可以由流处理来执行查询,则在流处理器328处执行534流处理。针对流处理,可以创建多个流处理实例以用于同时操作。可以创建流处理实例的·管道,使得来自流处理实例的结果被馈送给后续流处理实例。这样,可以更高效地且即时地执行流处理。流处理可以包括在辅助存储设备外面的主存储器设备上执行操作。如果确定521下一个查询操作符需要关系数据库324上的查询,则数据块接口 327将查询操作符转换522成数据库查询命令301。然后将数据库查询命令301发送526至关系数据库324。在关系数据库324上执行查询,并且查询模块314从关系数据库324接收530查询的数据库查询结果302。然后该过程前进至确定536前一操作符是否是查询管道中的最后操作符,并且重复后续过程。如果确定536前一查询操作符是查询管道中的最后查询操作符,则执行引擎326将查询结果发送到结果再现器329。然后,结果再现器329处理538该查询结果以用于向用户传输或显示。在一个实施例中,执行引擎将部分查询结果提供给结果再现器329。这使得能够在已执行整个查询操作之前将某些结果显示给用户。上文参考图5所述的序列和步骤仅仅是说明性的。例如,在其中查询操作符已采取数据库查询命令的格式的情况下,可以省略步骤522。此外,还可以省略使查询管道优化的步骤518。
权利要求
1.一种生成查询管道的方法,包括 接收(510)查询请求;以及 由处理器(202)基于所述查询请求来创建(514)包括查询操作的查询管道,其中,所述查询操作包括第一查询操作符和第二查询操作符以对数据库和在该数据库外面的数据执行第一查询操作和第二查询操作,其中,来自所述查询管道中的第一查询操作的结果被馈送给所述查询管道中的第二查询操作。
2.权利要求I的方法,包括 将查询请求划分(514)成包括第一查询操作符和第二查询操作符的查询操作符序列,其中,第一查询操作符涉及对辅助存储设备中的所述数据库执行第一查询操作,并且第二查询操作符涉及对主存储器设备中的数据执行第二查询操作。
3.权利要求2的方法,包括 基于在数据库上执行第一查询操作时存储器的消耗量或基于数据库上的第一查询操作的执行效率来选择(520、521)将在数据库上执行第一查询操作。
4.权利要求2的方法,包括 在主存储器设备中加载从数据库获得的第一查询操作的结果;以及 根据第二操作符对主存储器设备中的加载结果执行第二查询操作。
5.权利要求4的方法,其中,执行第二查询操作包括 在不访问辅助存储设备的情况下在主存储器设备中执行(534)第二查询操作。
6.权利要求I的方法,其中,仓Il建包括查询操作的查询管道包括 重新布置来自所述请求的操作符,从该请求消除操作符或将来自该请求的多个操作符组合成单个操作符。
7.权利要求I的方法,包括 接收(410)日志数据; 将日志数据(420 )分成事件; 将事件(430)解析成字段值; 将字段值和接收时间存储在缓冲器中;以及 更新存储用于事件的元数据的元数据结构。
8.权利要求7的方法,包括 基于元数据从缓冲器中的字段值生成(440)块;以及 发送(450 )所述块以存储在数据库中。
9.权利要求8的方法,其中,每个块包括识别该块的唯一块ID、在一组块之间共享的条ID以及用于块中的每个字段值的索引本地标识符。
10.权利要求8的方法,包括 更新识别存储在用于数据库的数据文件中的块的块表,其中,如果块被包括在查询操作的结果中,则该块表用来从用于数据库的数据文件中检索所述块。
11.权利要求10的方法,包括 确定与结果有关的所有块是否在块表中被索引; 如果不是与结果有关的所有块都在块表中被索引,则从用于数据库的数据文件识别相关事件,从数据文件检索用于相关事件的块,并将所检索的块发送到数据库。
12.—种系统,包括 处理器(202),用以基于查询请求来创建包括查询操作的查询管道,其中,所述查询操作包括第一查询操作符和第二查询操作符以对数据库和在所述数据库外面的数据执行第一查询操作和第二查询操作,其中,来自所述查询管道中的第一查询操作的结果被馈送给所述查询管道中的第二查询操作。
13.权利要求12的系统,其中,处理器(202)把查询请求划分成包括第一查询操作符和第二操作符的查询操作符序列,其中,第一查询操作符涉及对辅助存储设备中的数据库执行第一查询操作,并且第二查询操作符涉及对主存储器设备中的数据执行第二查询操作。
14.一种存储机器可读指令的非暂时计算机可读介质(206、208),该机器可读指令在被处理器(202)执行时执行一种方法,包括 接收(510)查询请求;以及 基于该查询请求来创建(514)包括查询操作的查询管道,其中,该查询操作包括第一查询操作符和第二查询操作符以对数据库和在该数据库外面的数据执行第一查询操作和第二查询操作, 其中,来自所述查询管道的第一查询操作的结果被馈送给所述查询管道中的第二查询操作。
15.权利要求14的非暂时计算机可读介质(206、208),其中,该方法包括 将查询请求划分(514)成包括第一查询操作符和第二查询操作符的查询操作符序列,其中,第一查询操作符涉及对辅助存储设备中的数据库执行第一查询操作,并且第二查询操作符涉及对主存储器设备中的数据执行第二查询操作。
全文摘要
根据查询请求创建(514)查询管道。该查询管道包括包含多个查询操作符的多个查询操作。第一查询操作符和第二查询操作符对数据库(526)和在数据库(534)外面的数据执行第一和第二查询操作。来自查询管道中的第一查询操作的结果被馈送给查询管道中的第二查询操作。
文档编号G06F17/30GK102918534SQ201180028615
公开日2013年2月6日 申请日期2011年6月10日 优先权日2010年6月10日
发明者W.黃, Y.周, B.于 申请人:惠普发展公司,有限责任合伙企业
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1