專利名稱:在支持查詢的同時高效地存儲日志數(shù)據(jù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及安全信息/事件管理(SIM或SIEM),并且特別地涉及在支持查詢的同時高效地存儲安全信息/事件。
背景技術(shù):
安全信息/事件管理(SIM或SIEM)的領(lǐng)域通常涉及1)從網(wǎng)絡(luò)和聯(lián)網(wǎng)設(shè)備收集反映設(shè)備的網(wǎng)絡(luò)活動和/或操作的數(shù)據(jù)和2)分析數(shù)據(jù)以提高安全性。例如,可以分析數(shù)據(jù)以識別對網(wǎng)絡(luò)或聯(lián)網(wǎng)設(shè)備的攻擊并確定哪個用戶或機器負責。如果攻擊正在進行中,則可以執(zhí)行抵制措施以挫敗該攻擊或減輕該攻擊造成的損壞。所收集的數(shù)據(jù)通常源自于消息(諸如事件、警報、或警告)或日志文件中的條目,其是由聯(lián)網(wǎng)設(shè)備生成的。示例性聯(lián)網(wǎng)設(shè)備包括防火墻、入侵檢測系統(tǒng)和服務(wù)器。每個消息或日志文件條目(“事件”)被存儲以供未來使用??梢砸远喾N方式來組織所存儲的事件。就寫事件數(shù)據(jù)、搜索事件數(shù)據(jù)和刪除事件數(shù)據(jù)而言,每個組織方法具有其自己的優(yōu)點和缺點??紤]以下情形每個事件包括稱為事件接收時間的屬性。由于事件接收時間屬性的值被頻繁地用于搜索,所以基于事件的事件接收時間來存儲事件。例如,針對一天的每分鐘創(chuàng)建一個文件。為了存儲事件,確定事件的事件接收時間。將事件附加于與事件接收時間的該分鐘相對應的文件。當后續(xù)事件到達時,其事件接收時間將始終單調(diào)增加。這意味著寫后續(xù)事件數(shù)據(jù)將僅要求附加操作。不需要存儲介質(zhì)的查尋。這導致寫事件數(shù)據(jù)方面的良好的效率。為了基于事件接收時間來搜索事件數(shù)據(jù),一旦已經(jīng)識別了第一事件,則通過按順序讀取存儲介質(zhì)可獲得后續(xù)事件。再次地,不需要查尋。這在基于事件接收時間來搜索事件數(shù)據(jù)方面導致良好的效率。為了刪除最舊的事件數(shù)據(jù),將最舊文件刪除。如果始終首先刪除最舊文件, 則存儲介質(zhì)將不會變得破碎。這在刪除事件數(shù)據(jù)方面導致良好的效率。這種方法的問題在于基于除事件接收時間之外的任何屬性來搜索事件數(shù)據(jù)是非常耗時的。例如,假設(shè)每個事件還包括指示生成事件的設(shè)備或應用(“事件源”)的屬性。為了搜索事件數(shù)據(jù)以尋找指示特定事件源的事件(即,包括事件源屬性的特定值的事件),將必須檢查整個存儲介質(zhì)。這是非常低效的。所需的是一種在支持對不同事件屬性的查詢的同時高效地存儲安全信息/事件的方式。
發(fā)明內(nèi)容
一種日志記錄(logging)系統(tǒng)在支持對不同事件屬性的查詢的同時高效地存儲安全信息/事件??梢耘c安全信息/事件管理(SIEM)系統(tǒng)相結(jié)合地使用日志記錄系統(tǒng)??梢杂筛鞣N源(包括設(shè)備和應用)生成的日志數(shù)據(jù)可以采取任何格式。日志數(shù)據(jù)由稱為“事件” 的一個或多個數(shù)據(jù)實例組成。事件可以例如是日志文件中的條目、系統(tǒng)日志服務(wù)器中的條目、警報、警告、網(wǎng)絡(luò)分組、電子郵件或通知頁面。通常,事件被生成一次且后來不改變。在一個實施例中,日志記錄系統(tǒng)包括事件接收器、存儲管理器和通信機構(gòu)。事件接收器接收日志數(shù)據(jù),處理日志數(shù)據(jù),并輸出基于列的數(shù)據(jù)“塊(chunk)”。事件接收器包括控制系統(tǒng)、一組緩沖器和元數(shù)據(jù)結(jié)構(gòu)。所述控制系統(tǒng)控制事件接收器的操作。該組緩沖器存儲一個或多個事件。如果不同的事件包括相同類型的字段,則可以在表格中組織事件。表格的每行將表示不同的事件,并且表格的每列將表示不同的字段。每個緩沖器與特定的字段相關(guān)聯(lián),并且包括來自于一個或多個事件的來自該字段的值(“屬性”)。元數(shù)據(jù)結(jié)構(gòu)存儲關(guān)于該組緩沖器的內(nèi)容的元數(shù)據(jù)。在一個實施例中,所述元數(shù)據(jù)包括與事件接收器相關(guān)聯(lián)的唯一標識符、該組緩沖器中的事件的數(shù)目和用于一個或多個“感興趣字段”中的每一個的最小值和最大值,所述最小值和最大值反映該組緩沖器中的所有事件上的該字段的值的范圍。在查詢事件數(shù)據(jù)時,元數(shù)據(jù)結(jié)構(gòu)充當搜索索引。所述存儲管理器接收基于列的數(shù)據(jù)塊并將其存儲,使得其能夠被查詢。所述存儲管理器包括控制系統(tǒng)、數(shù)據(jù)文件表格、塊表格和一個或多個數(shù)據(jù)文件??刂葡到y(tǒng)控制存儲管理器的操作。數(shù)據(jù)文件表格存儲關(guān)于該一個或多個數(shù)據(jù)文件的信息。在一個實施例中,對于每個數(shù)據(jù)文件,此信息包括與該數(shù)據(jù)文件相關(guān)聯(lián)的唯一標識符和該數(shù)據(jù)文件的位置。塊表格存儲關(guān)于被存儲在存儲管理器中(具體地,存儲在該一個或多個數(shù)據(jù)文件中)的一個或多個基于列的塊的信息。在一個實施例中,對于每個基于列的塊,此信息包括存儲在該塊中的元數(shù)據(jù)和該塊的位置。數(shù)據(jù)文件存儲多個塊。通信機構(gòu)通信地將事件接收器和存儲管理器華禹合。事件接收器和存儲管理器聯(lián)合地執(zhí)行用于存儲日志數(shù)據(jù)的方法。在該方法開始之前,對該組緩沖器和元數(shù)據(jù)結(jié)構(gòu)進行初始化。事件接收器接收日志數(shù)據(jù)。事件接收器控制系統(tǒng)將日志數(shù)據(jù)分離成一個或多個事件,并確定每個事件何時被事件接收器接收到??刂葡到y(tǒng)在該組緩沖器中存儲事件的字段值并且對于每個事件,存儲反映何時接收到事件的時間/日期戳??刂葡到y(tǒng)還更新元數(shù)據(jù)結(jié)構(gòu)。在某個時間點處,控制系統(tǒng)基于元數(shù)據(jù)結(jié)構(gòu)和該組緩沖器的內(nèi)容來生成基于列的數(shù)據(jù)塊(每個緩沖器一個基于列的塊)。在一個實施例中,基于列的塊包括元數(shù)據(jù)結(jié)構(gòu)和緩沖器內(nèi)容的壓縮版本。對該組緩沖器和元數(shù)據(jù)結(jié)構(gòu)進行重新初始化,從而清洗(flush)該組緩沖器??刂葡到y(tǒng)將基于列的塊發(fā)送到存儲管理器。 存儲管理器接收塊,將塊存儲在數(shù)據(jù)文件中,并更新塊表格。存儲管理器執(zhí)行用于回收(reclaim)存儲的方法。識別與特定保留(retention) 策略相關(guān)聯(lián)的最舊數(shù)據(jù)文件。從塊表格去除關(guān)于包括在所識別的數(shù)據(jù)文件中的所有基于列的塊的信息。刪除表示所識別的數(shù)據(jù)文件的數(shù)據(jù)文件表格中的條目。在數(shù)據(jù)文件表格中創(chuàng)建新的條目。將新回收的數(shù)據(jù)文件添加到可用的預分配數(shù)據(jù)文件的列表并準備好接收新的塊。
在已經(jīng)將基于列的塊存儲在數(shù)據(jù)文件中之后,可以查詢塊內(nèi)的字段值。將查詢表示為能夠針對事件進行評估的表達式(expression)。該表達式包括一個或多個搜索項。搜索項涉及事件的內(nèi)容,具體地涉及特定的字段和該字段的值。為了執(zhí)行查詢,首先基于“感興趣字段”信息(如存儲在塊的元數(shù)據(jù)中)來過濾數(shù)據(jù)塊。然后基于字段值(如存儲在塊的 “有效負荷”中)來過濾剩余塊。最后,將滿足該查詢的事件聚集。雖然剛剛描述的塊是基于列的,塊也可以是基于行的。美國申請No. 11/966,078 ("'078申請”)描述了使用基于行的塊來存儲事件數(shù)據(jù)。第三類型的事件存儲使用基于行的塊和基于列的塊二者。這種類型的事件存儲將事件存儲兩次一使用基于行的塊存儲一次且使用一個或多個基于列的塊存儲一次。例如,一組事件將被存儲為一個基于行的塊。那些事件的字段值還將被存儲為基于列的塊(每個字段一個基于列的塊)。
圖1是舉例說明根據(jù)一個實施例的具有安全信息/事件管理系統(tǒng)的環(huán)境的方框圖。圖2是舉例說明根據(jù)一個實施例的用于充當安全信息/事件管理系統(tǒng)的日志記錄系統(tǒng)的計算機的方框圖。圖3是舉例說明根據(jù)一個實施例的安全信息/事件管理系統(tǒng)的日志記錄系統(tǒng)的方框圖。圖4是舉例說明根據(jù)一個實施例的用于存儲日志數(shù)據(jù)的方法的流程圖。圖5是舉例說明根據(jù)一個實施例的用于回收存儲的方法的流程圖。圖6是舉例說明根據(jù)一個實施例的用于查詢的方法的流程圖。附圖僅僅出于圖示的目的描繪實施例。本領(lǐng)域的技術(shù)人員將很容易從以下說明認識到在不脫離本文所述的原理的情況下可以采用本文所舉例說明的結(jié)構(gòu)和方法的替換實施例。
具體實施例方式本文描述的是用于跨計算機網(wǎng)絡(luò)從不同的設(shè)備收集數(shù)據(jù)、將數(shù)據(jù)規(guī)格化成公共模式并將規(guī)格化數(shù)據(jù)合并的基于計算機的系統(tǒng)。然后可以以集中的方式監(jiān)視、分析數(shù)據(jù)(“事件”)并將其用于調(diào)查和糾正??梢允故录c規(guī)則互相關(guān)以創(chuàng)建元事件。相關(guān)包括例如發(fā)現(xiàn)事件之間的關(guān)系,推斷那些關(guān)系的重要性(例如,通過生成元事件),將事件和元事件按優(yōu)先次序排列,以及提供用于采取行動的框架。該系統(tǒng)(其一個實施例被表示為計算機軟件) 實現(xiàn)了可疑網(wǎng)絡(luò)活動的聚合、相關(guān)、檢測和調(diào)查性跟蹤。所述系統(tǒng)還支持響應管理、特別 (AD-HOC)查詢解析、用于鑒證分析的報告和重放以及網(wǎng)絡(luò)威脅和活動的圖形可視化。雖然將參考各種舉例說明的示例來討論本系統(tǒng),但不應將這些示例理解為限制本發(fā)明的更廣泛精神和范圍。例如,本文給出的示例描述了分布式代理、管理器和控制臺,其僅僅是本發(fā)明的一個實施例。本發(fā)明的一般概念和范圍是寬得多的,并且可以擴展至任何基于計算機或基于網(wǎng)絡(luò)的安全系統(tǒng)。并且,給出了可以被傳遞到系統(tǒng)的組件和從系統(tǒng)的組件傳遞的消息和可以被系統(tǒng)的組件使用的數(shù)據(jù)模式的示例以嘗試進一步描述本發(fā)明,但是其并不意圖是包括一切的示例,并且不應這樣認為。
按照對計算機存儲器內(nèi)的數(shù)據(jù)的操作的算法和符號表示給出了以下詳細說明的某些部分。這些算法說明和表示是計算機科學領(lǐng)域的那些技術(shù)人員用來最有效地向本領(lǐng)域的其它技術(shù)人員傳達其工作的主旨的手段。算法在這里且一般地被認為是產(chǎn)生期望結(jié)果的步驟的獨立序列。所述步驟是要求物理量的物理操縱的那些操作。通常,但不一定,這些量采取能夠被存儲、傳輸、組合、比較和以其他方式操縱的電或磁信號的形式。有時,主要是由于公共使用的原因,已經(jīng)證明將這些信號稱為位、值、元素、符號、字符、項、數(shù)字等是方便的。然而,應記住的是所有這些和類似術(shù)語將與適當?shù)奈锢砹肯嚓P(guān)聯(lián),并且僅僅是應用于這些量的方便標記。除非另外具體地說明,應認識到遍及本發(fā)明的說明書,諸如“處理”、“計算”、“運算”“確定”、“顯示”等術(shù)語的使用指的是計算機系統(tǒng)或類似電子計算設(shè)備的動作和過程,所述計算機系統(tǒng)或類似電子計算設(shè)備將被表示為計算機系統(tǒng)的寄存器和存儲器內(nèi)的物理(電子)量的數(shù)據(jù)操縱并變換成類似地被表示為計算機系統(tǒng)存儲器或寄存器或其它此類信息存儲、傳輸或顯示設(shè)備內(nèi)的物理量的其它數(shù)據(jù)。如上文所指示的,以計算機軟件、亦即機器可讀指令來實例化本發(fā)明的一個實施例,所述機器可讀指令在被一個或多個計算機處理器/系統(tǒng)執(zhí)行時命令處理器/系統(tǒng)執(zhí)行指定動作。此類計算機軟件可以駐留于一個或多個機器可讀存儲介質(zhì)中,諸如硬盤驅(qū)動器、 ⑶-R0M、DVD-R0M、只讀存儲器、讀寫存儲器等。此類軟件可以被分布在這些介質(zhì)中的一個或多個上,或者可以被使得可用于跨一個或多個計算機網(wǎng)絡(luò)(例如因特網(wǎng))進行下載。無論格式如何,本文所討論的計算機編程、再現(xiàn)和處理技術(shù)僅僅是可以用來實現(xiàn)本發(fā)明的方面的編程、再現(xiàn)和處理技術(shù)的類型的示例。這些示例不應以任何方式限制本發(fā)明,參考在本說明書之后的權(quán)利要求可最好地理解本發(fā)明。1.安全信息/事件管理(SIEM)系統(tǒng)架構(gòu)
圖1是舉例說明根據(jù)一個實施例的具有安全信息/事件管理系統(tǒng)的環(huán)境的方框圖。圖 1包括安全信息/事件管理(SIEM)系統(tǒng)100和一個或多個數(shù)據(jù)源110。數(shù)據(jù)源110是網(wǎng)絡(luò)節(jié)點,該網(wǎng)絡(luò)節(jié)點可以是設(shè)備或軟件應用。示例性數(shù)據(jù)源110包括入侵檢測系統(tǒng)(IDS)、入侵預防系統(tǒng)(IPS)、易損性評估工具、防火墻、防病毒工具、防垃圾郵件工具、加密工具、應用審計日志和物理安全日志。數(shù)據(jù)源110的類型包括安全檢測和代理系統(tǒng)、訪問和策略控制、核心服務(wù)日志和日志合并程序、網(wǎng)絡(luò)硬件、加密設(shè)備和物理安全。示例性安全檢測和代理系統(tǒng)包括IDS、IPS、 多功能安全工具、易損性評估和管理、防病毒、蜜罐、威脅響應技術(shù)和網(wǎng)絡(luò)監(jiān)視。示例性訪問和策略控制系統(tǒng)包括訪問和身份管理、虛擬專用網(wǎng)絡(luò)(VPN)、高速緩存引擎、防火墻和安全策略管理。示例性核心服務(wù)日志和日志合并程序包括操作系統(tǒng)日志、數(shù)據(jù)庫審計日志、應用日志、日志合并程序、web服務(wù)器日志和管理控制臺。示例性網(wǎng)絡(luò)硬件包括路由器和交換機。 示例性加密設(shè)備包括數(shù)據(jù)安全和完整性。示例性物理安全系統(tǒng)包括卡密鑰讀取器、生物測量、防竊報警器和火警報警器。在所示的實施例中,SIEM系統(tǒng)100包括一個或多個代理120、一個或多個管理器 130、一個或多個數(shù)據(jù)庫140、一個或多個在線檔案150、一個或多個用戶接口 160和一個或多個日志記錄系統(tǒng)170。在某些實施例中,將這些模塊組合在單個平臺中或分布在兩個、三個或更多平臺中(諸如在圖1中)。此多層架構(gòu)的使用支持隨著計算機網(wǎng)絡(luò)或系統(tǒng)的增長的可縮放性。在2008年5月20日授權(quán)的美國專利No. 7,376,969中進一步描述了 SIEM系統(tǒng)100,其被整體地通過引用結(jié)合到本文中。代理120提供到數(shù)據(jù)源110的接口。具體地,代理120從數(shù)據(jù)源110收集數(shù)據(jù)(“原始事件”),處理數(shù)據(jù),并將已處理數(shù)據(jù)(“事件”)發(fā)送到管理器130。代理120能夠在任何地方進行操作,諸如在經(jīng)由諸如簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)陷阱的協(xié)議通信的單獨設(shè)備處、在網(wǎng)絡(luò)內(nèi)的合并點處或在數(shù)據(jù)源110處。例如,如果數(shù)據(jù)源110是軟件應用,則可以在主控數(shù)據(jù)源的設(shè)備上對代理120進行共同主控(co-host)。在一個實施例中,代理120是來自加拿大庫珀蒂諾的ArcSight公司的連接器產(chǎn)品。處理可以包括規(guī)格化(normalization)、聚合和過濾。例如,可以對單獨的原始事件進行解析和規(guī)格化以供管理器130使用。規(guī)格化可以涉及將值(諸如嚴重程度、優(yōu)先級和時區(qū))規(guī)格化成公共格式和/或?qū)?shù)據(jù)結(jié)構(gòu)規(guī)格化成公共模式??梢允褂霉驳娜丝勺x格式將事件分類。此格式使得用戶更容易理解事件,并且使得更容易使用過濾器、規(guī)則、報告和數(shù)據(jù)監(jiān)視器來分析事件。在一個實施例中,所述公共格式是來自ArcSight公司的公共事件格式(CEF)日志管理標準。在2002年12月2日提交的美國申請No. 10/308,941中進一步描述了規(guī)格化,其被整體地通過應用結(jié)合到本文中。聚合和過濾減少被發(fā)送到管理器130的事件的量,這節(jié)省網(wǎng)絡(luò)帶寬和存儲空間, 增加管理器的效率和準確度,并減少事件處理時間。在2002年12月2日提交的美國申請 No. 10/308,584和在2004年10月27日提交的美國申請No. 10/975,962中進一步描述了聚合,這兩個申請被整體地通過引用結(jié)合到本文中。代理120基于時間段的截止或基于到達的事件的閾值數(shù)目分批地將事件發(fā)送到管理器130。在2007年5月15日授權(quán)的美國專利No. 7,219,239中進一步描述了對事件分批以便傳輸?shù)焦芾砥?30,其被整體地通過引用結(jié)合到本文中。代理120還可以向數(shù)據(jù)源110發(fā)送命令和/或在本地主機上執(zhí)行命令,諸如命令掃描儀運行掃描??梢允謩拥鼗蛲ㄟ^來自規(guī)則和數(shù)據(jù)監(jiān)視器的自動化動作來執(zhí)行這些動作。在2002年12月2日提交的美國申請No. 10/308,417中進一步描述了命令支持,其被整體地通過引用結(jié)合到本文中。代理120還可以向其已經(jīng)收集的數(shù)據(jù)添加信息,諸如通過查找網(wǎng)際協(xié)議(IP)地址和/或主機名以便在管理器130處解析IP/主機名查找。經(jīng)由相關(guān)配置文件(未示出)來配置代理120。代理120可以包括一個或多個軟件模塊,所述模塊包括規(guī)格化組件、時間修正組件、聚合組件、分批組件、解析器組件、傳輸組件和/或附加組件??梢酝ㄟ^配置文件中的適當命令來對這些組件進行激活和/或去激活。 在配置期間,向管理器130注冊代理120并用基于其數(shù)據(jù)源110和期望行為的特性來配置代理120。代理120是可通過手動和自動化過程兩者來進一步配置的。例如,管理器130可以向代理120發(fā)送命令或配置更新。在2002年12月2日提交的美國申請No. 10/308, 548 中進一步描述了代理組件,其被整體地通過引用結(jié)合到本文中。在2004年10月27日提交的美國申請No. 10/974,105;在2004年12月23日提交的美國申請No. 11/021,601;在 2005年3月1日提交的美國申請No. 11/070,024;以及在2008年10月14日授權(quán)的美國專利No. 7,437,359中描述了附加代理能力,其被整體地通過引用結(jié)合到本文中。管理器130提供分析能力、情況管理工作流能力和服務(wù)能力。管理器130與代理 120之間的通信可以是雙向的(例如以使得管理器130能夠向主控代理120的平臺傳送命令)并被加密。在某些裝置中,管理器130能夠充當用于多個代理120的集中器,并且能夠?qū)⑿畔⑥D(zhuǎn)發(fā)到其它管理器130(例如,在企業(yè)總部處部署的管理器)。為了執(zhí)行其任務(wù),管理器130使用多種過濾器、規(guī)則、報告、數(shù)據(jù)監(jiān)視器、儀表盤和網(wǎng)絡(luò)模型。在一個實施例中,管理器130是諸如來自ArcSight公司的企業(yè)安全管理器(ESM)產(chǎn)品的基于Java的服務(wù)器。分析可以包括檢測、相關(guān)和升級。例如,管理器130使用規(guī)則引擎(未示出)使從代理120接收到的事件互相關(guān),所述規(guī)則引擎用網(wǎng)絡(luò)模型和易損性信息來評估每個事件以獲得實時威脅概要。在2002年12月2日提交的美國申請No. 10/308,767中進一步描述了相關(guān),其被整體地通過應用結(jié)合到本文中。關(guān)于情況管理,管理器130可以保持關(guān)于安全事故的狀態(tài)及其解決方案的報告。在2003年11月14日提交的美國申請No. 10/713,471 中進一步描述了事故報告,其被整體地通過引用結(jié)合到本文中。服務(wù)可以包括管理、通知和報告。管理器130還可以提供對知識庫的訪問。在2004年4月9日提交的美國申請No. 10/821,459 ;在2007年8月21日授權(quán)的美國專利No. 7,260, 844 ;在2009年7月21日授權(quán)的美國專利No. 7,565,696 ;以及在2009年3月M日授權(quán)的美國專利No. 7,509,677中描述了附加管理器能力,其被整體地通過引用結(jié)合到本文中。在管理器130接收到事件時,其被存儲在數(shù)據(jù)庫140中。存儲事件使得其稍后能夠被用于分析和參考。在一個實施例中,數(shù)據(jù)庫140是諸如來自加拿大Redwood S1OresW Oracle公司的數(shù)據(jù)庫的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。在一個實施例中,數(shù)據(jù)庫140按分區(qū)存儲數(shù)據(jù),所述分區(qū)是數(shù)據(jù)庫的按時間排序的切片。例如,每天創(chuàng)建一個新的分區(qū)以存儲當天的事件。可以將分區(qū)壓縮并存儲在在線檔案150中以供稍后檢索。在2004年5月4日提交的美國申請No. 10/839,563中進一步描述了分區(qū)管理,其被整體地通過引用結(jié)合到本文中。在一個實施例中,由來自ArcSight 公司的安全生命周期信息管理(SLIM)產(chǎn)品的SmartStorage存檔和檢索組件來提供分區(qū)管理。用戶經(jīng)由用戶接口 160與管理器130相交互。用戶接口 160使得用戶能夠?qū)芾砥?30的特征和功能進行導航。單個管理器130能夠支持多個用戶接口實例??捎糜谟脩舻奶卣骱凸δ芸梢匀Q于用戶的角色和許可和/或管理器的配置。在一個實施例中,訪問控制列表使得多個安全專業(yè)人員能夠使用相同的管理器130和數(shù)據(jù)庫140,但每個專業(yè)人員具有適合于其責任的其自己的視圖、相關(guān)規(guī)則、警報、報告和知識庫。管理器130與用戶接口 160之間的通信是雙向的,并且可以被加密。在一個實施例中,存在兩種類型的用戶接口 160 基于工作站的接口和基于web瀏覽器的接口。工作站接口是意圖供安全操作中心(SOC)或類似安全監(jiān)視環(huán)境中的專職安全人員使用的獨立軟件應用。工作站接口包括用于創(chuàng)建和修改過濾器、規(guī)則、報告、模式發(fā)現(xiàn)、 儀表盤和數(shù)據(jù)監(jiān)視器的創(chuàng)作工具。工作站接口還使得用戶能夠管理用戶、數(shù)據(jù)庫分區(qū)和工作流(例如,事故調(diào)查和報告)。例如,工作站接口使得用戶能夠執(zhí)行例行監(jiān)視、構(gòu)建復雜的相關(guān)和長序列規(guī)則并執(zhí)行例行的管理功能。在一個實施例中,工作站接口是來自ArcSight 公司的ESM控制臺產(chǎn)品。在2002年12月2日提交的美國申請No. 10/308,418和2008年 2月19日授權(quán)的美國專利No. 7,333,999中進一步描述了用戶接口,其被整體地通過引用結(jié)合到本文中。web接口是為web瀏覽器客戶端提供與管理器130的安全接口的獨立且可遠程安裝的web服務(wù)器。web接口意圖被用作用于管理的服務(wù)安全提供商(MSSP)的客戶、SOC運
10營商和需要從受保護網(wǎng)絡(luò)的外部訪問管理器130的用戶的有效(streamlined)接口。由于web瀏覽器能夠被安裝在遠離管理器130的位置處,所以web服務(wù)器能夠在保護管理器 130的防火墻外部操作。web接口提供事件監(jiān)視和細查能力。在一個實施例中,作為安全特征,web接口沒有實現(xiàn)創(chuàng)作或管理功能。在一個實施例中,web接口是來自ArcSight公司的 ArcSight Web 產(chǎn)品。在一個實施例中,日志記錄系統(tǒng)170是針對極高的事件吞吐量被最優(yōu)化的事件數(shù)據(jù)存儲工具。日志記錄系統(tǒng)170存儲安全事件(有時稱為“日志數(shù)據(jù)”)。在一個實施例中, 以壓縮形式來存儲安全事件。然而,日志記錄系統(tǒng)170能夠在需要時檢索這些事件并將其恢復成其原始的未修改形式以得到鑒證質(zhì)量的數(shù)據(jù)。多個日志記錄系統(tǒng)170能夠一起工作以在存儲事件時擴展為支持高持續(xù)輸入速率??梢钥缛罩居涗浵到y(tǒng)170的對等網(wǎng)絡(luò)來分布事件查詢。用戶能夠經(jīng)由用戶接口(未示出)來配置日志記錄系統(tǒng)170。在一個實施例中, 日志記錄系統(tǒng)170是來自ArcSight公司的記錄器產(chǎn)品。日志記錄系統(tǒng)170能夠接收已處理事件(例如,遵守公共事件格式的事件)和原始事件。在一個實施例中,直接從數(shù)據(jù)源110(諸如系統(tǒng)日志消息和日志文件)接收原始事件, 并且從代理120或管理器130接收已處理事件。日志記錄系統(tǒng)170還可以發(fā)送原始事件和已處理事件兩者。在一個實施例中,原始事件被作為系統(tǒng)日志消息發(fā)送(至任何設(shè)備;未示出),并且已處理事件被發(fā)送到管理器130。下面將進一步描述日志記錄系統(tǒng)170。通過上述架構(gòu),SIEM系統(tǒng)100能夠支持集中式或分散式環(huán)境。這是有用的,因為組織可能希望實現(xiàn)SIEM系統(tǒng)100的單個實例并使用訪問控制列表來劃分用戶。可替換地,組織可能選擇為許多組中的每一個部署單獨的SIEM系統(tǒng)100并在“主”級別處合并結(jié)果。此類部署還能夠?qū)崿F(xiàn)“跟著太陽走”布置,其中,在地理上分散的對等組通過將主要監(jiān)督責任傳遞至當前工作在標準營業(yè)時間的組來相互協(xié)作。還可以按企業(yè)層級部署SIEM系統(tǒng)100, 其中,業(yè)務(wù)部門單獨地工作并支持到集中式管理功能的匯總。2.日志數(shù)據(jù)
本文描述的是用于在支持查詢的同時高效地存儲日志數(shù)據(jù)的系統(tǒng)和方法。可以由各種源來產(chǎn)生本文所使用的“日志數(shù)據(jù)”,所述源包括設(shè)備和應用。這些源包括例如上述的數(shù)據(jù)源110以及網(wǎng)絡(luò)系統(tǒng)、計算機、操作系統(tǒng)、防病毒系統(tǒng)、數(shù)據(jù)庫、物理基礎(chǔ)設(shè)施、身份管理系統(tǒng)、目錄服務(wù)、系統(tǒng)健康信息系統(tǒng)、web業(yè)務(wù)、遺留系統(tǒng)、專用系統(tǒng)、主機、主機應用、安全系統(tǒng)、物理設(shè)備和SIEM源(諸如代理120和管理器130)。系統(tǒng)能夠以許多方式來獲得日志數(shù)據(jù)。例如,可以接收日志數(shù)據(jù)(例如根據(jù)系統(tǒng)日志協(xié)議)。可替換地,可以訪問日志數(shù)據(jù)(例如,通過讀取被本地或遠程地存儲的文件)。其它方法包括例如開放式數(shù)據(jù)庫連接性(ODBC)、簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)陷阱、NetFlow和專用應用編程接口(API)。還可以由用戶來輸入日志數(shù)據(jù)(例如,使用命令行接口(CLI))。日志數(shù)據(jù)可以采用任何格式。一個此類格式是例如公共事件格式(上述)。其它格式例如是生成日志數(shù)據(jù)的數(shù)據(jù)源110所特有的。日志數(shù)據(jù)由稱為“事件”的一個或多個數(shù)據(jù)實例組成。事件可以是例如日志文件中的條目、系統(tǒng)日志服務(wù)器中的條目、警報、警告、網(wǎng)絡(luò)分組、電子郵件或通知頁面。通常,事件被生成一次且后來不改變。在一個實施例中,事件包括隱含元數(shù)據(jù)和消息。隱含元數(shù)據(jù)可以包括關(guān)于例如生
11成事件的設(shè)備或應用(“事件源”)和何時從事件源接收到事件(“接收時間”)的信息。在一個實施例中,接收時間是日期/時間戳,并且事件源是網(wǎng)絡(luò)端點標識符(例如,IP地址或介質(zhì)接入控制(MAC)地址)和/或源的描述,可能包括關(guān)于產(chǎn)品的供應商和版本的信息。該消息表示從事件源接收到的內(nèi)容,并且可以是任何形式(二進制數(shù)據(jù)、字母數(shù)字數(shù)據(jù)等)。在一個實施例中,消息是描述值得注意的情形或變化的自由形式文本。在另一實施例中,消息還包括顯式元數(shù)據(jù)。顯式元數(shù)據(jù)是例如通過解析消息獲得的。當事件源生成事件時,事件通常包括指示事件何時發(fā)生(“事件發(fā)生時間”)的信息。通常是日期/時間戳的事件發(fā)生時間是顯式元數(shù)據(jù)的示例,并且被頻繁地用于分析。不同的事件源常常產(chǎn)生不一致的顯式元數(shù)據(jù)(例如,事件的優(yōu)先級或關(guān)鍵性、受事件影響的設(shè)備/應用/用戶和哪些用戶觸發(fā)事件)。在一個實施例中,如果事件不包括發(fā)生時間,則由事件接收器在其接收到事件時生成的隱含時間戳(下文描述)被視作原始發(fā)生時間戳。當事件被處理并潛在地通過各種系統(tǒng)轉(zhuǎn)發(fā)時,每個系統(tǒng)通常具有事件接收時間的隱含注釋。在一個實施例中,事件表示包括一個或多個字段的數(shù)據(jù)結(jié)構(gòu),其中,每個字段可以包含值(有時稱為“屬性”)。此數(shù)據(jù)結(jié)構(gòu)的尺寸通常落在100字節(jié)至10千字節(jié)的范圍內(nèi)。3.行存儲和列存儲
如果不同的事件包括相同類型的字段,則可以在表格中組織事件。表格的每行將表示不同的事件,并且表格的每列將表示不同的字段??梢允褂脙蓚€架構(gòu)來將事件數(shù)據(jù)存儲在數(shù)據(jù)庫中行存儲和列存儲。在行存儲架構(gòu)中,存儲是面向記錄(行)的。記錄(或元組)的屬性(字段值)被鄰接地放置在儲存器中。 在此架構(gòu)中,單次盤寫入足以將單個記錄的所有字段推出到盤中。因此,實現(xiàn)了高性能的寫入,并且具有行存儲架構(gòu)的數(shù)據(jù)庫管理系統(tǒng)(DBMS)被稱為寫入優(yōu)化系統(tǒng)(W0S)。在列存儲架構(gòu)中,存儲是面向字段(列)的??缍鄠€記錄地被存儲在一個列中的值被鄰接地放置在儲存器中。在此架構(gòu)中,DBMS需要讀取僅僅那些處理給定查詢所需的列的值,并且能夠避免向存儲器中加載不相關(guān)的字段值(屬性)。因此,實現(xiàn)了高性能的特別查詢,并且具有列存儲架構(gòu)的DBMS被稱為讀取優(yōu)化系統(tǒng)(R0S)。美國申請No. 11/966,078 (“’ 078申請”)描述了使用基于行的“塊”來存儲事件數(shù)據(jù)。具體地,’ 078申請描述了包括事件接收器和存儲管理器的日志記錄系統(tǒng)。接收器接收日志數(shù)據(jù),對其進行處理,并輸出基于行的數(shù)據(jù)“塊”。管理器接收基于行的數(shù)據(jù)塊并將其存儲,使得其能夠被查詢。接收器包括存儲事件的緩沖器和存儲關(guān)于緩沖器的內(nèi)容的信息的元數(shù)據(jù)結(jié)構(gòu)。元數(shù)據(jù)包括與接收器相關(guān)聯(lián)的唯一標識符、緩沖器中的事件的數(shù)目以及對于每一個“感興趣字段”包括最小值和最大值,所述最小值和最大值反映緩沖器中的所有事件上的該字段的值的范圍。塊包括元數(shù)據(jù)結(jié)構(gòu)和緩沖器內(nèi)容的壓縮版本。在查詢事件數(shù)據(jù)時,元數(shù)據(jù)結(jié)構(gòu)充當搜索索引??梢耘c安全信息/事件管理(SIEM)系統(tǒng)相結(jié)合地使用日志記錄系統(tǒng)。在’ 078申請中,塊包括事件接收器緩沖器的內(nèi)容(采取壓縮形式),并且緩沖器包含一個或多個事件。因此,塊包括一個或多個事件。由于能夠?qū)⑹录暈楸砀竦男校阅軌驅(qū)K視為包含表格的一個或多個行。換言之,在’ 078申請中描述的塊遵循行存儲架構(gòu)。雖然在’ 078申請中描述的塊是基于行的,但是塊也可以遵循列存儲架構(gòu)。例如,考慮存儲事件的事件接收器中的緩沖器。在’ 078申請中,這些事件被一個事件接另一個事件地聯(lián)接在一起,以便被放入(基于行的)塊中。構(gòu)建塊的不同方式將是將事件“表格”的每個列存儲為不同的(基于列的)塊。每個基于列的塊將表示表格中的列(即,用于多個事件中的相同字段的一組值)。不是將表格表示為包含所有行(事件)的一個大的基于行的塊,而是將表格表示為多個基于列的塊(表格的每列一個)。本申請描述了使用基于列的塊來存儲事件數(shù)據(jù),使得塊遵循列存儲架構(gòu)。本申請還描述了使用基于行的塊和基于列的塊的組合來存儲事件數(shù)據(jù)。將首先描述純基于列的存儲,接著是基于行和基于列的存儲的組合。4.日志記錄系統(tǒng)架構(gòu)
圖2是根據(jù)一個實施例的用于充當安全信息/事件管理(SIEM)系統(tǒng)100的日志記錄系統(tǒng)170的計算機200的高級方框圖。所示的是被耦合到總線204的至少一個處理器202。耦合到總線204的還有存儲器206、存儲設(shè)備208、鍵盤210、圖形適配器212、指示(pointing) 設(shè)備214和網(wǎng)絡(luò)適配器216。在一個實施例中,由互連芯片組來提供總線204的功能。顯示器218被耦合到圖形適配器212。存儲設(shè)備208是能夠保持數(shù)據(jù)的任何設(shè)備,例如硬盤驅(qū)動器、緊致盤只讀存儲器 (⑶-ROM)、DVD或固態(tài)存儲器設(shè)備。存儲器206保持處理器202所使用的指令和數(shù)據(jù)。指示設(shè)備214可以是鼠標、軌跡球或其它類型的指示設(shè)備,并且被與鍵盤210相結(jié)合地用來向計算機200中輸入數(shù)據(jù)。圖形適配器212在顯示器218上顯示圖像及其它信息。網(wǎng)絡(luò)適配器216將計算機200耦合到局域網(wǎng)或廣域網(wǎng)。如本領(lǐng)域中已知的,計算機200可以具有與圖2所示的那些不同的和/或其它組件。另外,計算機200可以缺少某些所示組件。例如,充當日志記錄系統(tǒng)170的計算機200 可以缺少鍵盤210、指示設(shè)備214、圖形適配器212和/或顯示器218。此外,存儲設(shè)備208 可以是本地的和/或遠離計算機200 (諸如在存儲區(qū)域網(wǎng)(SAN)內(nèi)實現(xiàn))。圖3是舉例說明根據(jù)一個實施例的安全信息/事件管理(SIEM)系統(tǒng)100的日志記錄系統(tǒng)170的方框圖。在所示的實施例中,日志記錄系統(tǒng)170包括事件接收器310、存儲管理器320和通信機構(gòu)330。雖然為了明了起見僅示出了一個事件接收器310,但系統(tǒng)170 能夠支持與許多事件接收器310的大量并發(fā)會話。在一個實施例中,每個事件接收器310 與唯一標識符相關(guān)聯(lián)。事件接收器310接收日志數(shù)據(jù)340,處理日志數(shù)據(jù)340并輸出數(shù)據(jù)“塊” 350。事件接收器310包括控制系統(tǒng)355、一個或多個緩沖器360的組和元數(shù)據(jù)結(jié)構(gòu)365??刂葡到y(tǒng) 355被通信地耦合到一個或多個緩沖器360的組和元數(shù)據(jù)結(jié)構(gòu)365??刂葡到y(tǒng)355控制事件接收器310的操作,并且下文參考圖4來進一步描述。每個緩沖器360存儲關(guān)于一個或多個事件的信息。在一個實施例中,緩沖器的尺寸是固定的,但是該尺寸本身是可配置的?;叵肴绻煌氖录ㄏ嗤愋偷淖侄?,則可以在表格中組織事件。表格的每行將表示不同的事件,并且表格的每列將表示不同的字段。 在一個實施例中,每個緩沖器360與特定的字段相關(guān)聯(lián),并且包括來自一個或多個事件的來自該字段的值(“屬性”)。在另一實施例中,每個緩沖器360還包括指示哪個字段與該緩沖器相關(guān)聯(lián)的標識符(“ hdexID”)。例如,假設(shè)事件包括稱為SourceIPAddress (源IP地址)的字段,其值反映發(fā)起由事件表示的動作的設(shè)備的IP地址。與SourceIPAddress字段相關(guān)聯(lián)的緩沖器360將包含一個或多個IP地址(由事件接收器310作為日志數(shù)據(jù)340的一部分接收并處理的每個事件一個IP地址)。緩沖器360還可以包含指示SourceIPAddress字段的“ 100”的hdexID值。在一個實施例中,該組緩沖器360包括用于每個事件字段的一個緩沖器。當接收到事件時,解析出每個字段值并將其存儲在適當?shù)木彌_器中(下文所述)。最終,每個緩沖器被存儲為單獨的基于列的塊(下文討論)。以此方式,事件“表格”的每個列被存儲為不同的 (基于列的)塊。每個基于列的塊將表示表格中的列(即,用于多個事件中的相同字段的一組值)。不是將表格表示為包含所有行(事件)的一個大的基于行的塊,而是將表格表示為多個基于列的塊(表格的每列一個)。在另一實施例中,該組緩沖器還包括ReceiptTime (接收時間)緩沖器,其對于每個事件存儲時間/日期戳,所述時間/日期戳反映何時由事件接收器310接收到該事件。在又一實施例中,該組緩沖器還包括對于每個事件存儲“導出”值的緩沖器,所述“導出”值是基于存儲在事件的一個或多個字段中的值確定的。元數(shù)據(jù)結(jié)構(gòu)365存儲關(guān)于該組緩沖器360的內(nèi)容的元數(shù)據(jù)。在一個實施例中,此元數(shù)據(jù)包括與接收事件的事件接收器310相關(guān)聯(lián)的唯一標識符、該組緩沖器中的事件的數(shù)目以及對于一個或多個“感興趣字段”中的每一個包括最小值和最大值,所述最小值和最大值反映該組緩沖器中的所有事件上的該字段的值的范圍。在查詢事件數(shù)據(jù)(下文描述)時, 元數(shù)據(jù)結(jié)構(gòu)365充當搜索索引。 例如,假設(shè)事件包括稱為OccurrenceTime (發(fā)生時間)的字段,其值反映事件發(fā)生的時間。如果OccurrenceTime是感興趣字段,則元數(shù)據(jù)結(jié)構(gòu)365將包括用于 OccurrenceTime的最小值禾口用于OccurrenceTime的最大值。OccurrenceTime的最小值將是該組緩沖器360中的首先發(fā)生的事件的OccurrenceTime。OccurrenceTime的最大值將是該組緩沖器360中的最后發(fā)生的事件的OccurrenceTime。在一個實施例中,ReceiptTime也是感興趣字段。因此,在本實施例中,元數(shù)據(jù)結(jié)構(gòu)365還存儲反映該組緩沖器中的所有事件的接收時間的值范圍的最小值和最大值。ReceiptTime的最小值將是該組緩沖器360中首先接收到的事件的ReceiptTime。 ReceiptTime的最大值將是該組緩沖器360中最后接收到的事件的ReceiptTime。在一個實施例中,僅存儲ReceiptTime的最小值。在該實施例中,未存儲ReceiptTime的最大值;這降低了存儲要求。如果緩沖器360常常被清洗(這在生成塊時發(fā)生,如下文所述),則 ReceiptTime的最大值將接近ReceiptTime的最小值(例如,遲一秒鐘)。在一個實施例中,感興趣字段本身不是事件字段。代替地,其是基于存儲在事件的一個或多個字段中的值確定的“導出”值。存儲管理器320接收數(shù)據(jù)塊350并將其存儲,使得其能夠被查詢。存儲管理器320 包括控制系統(tǒng)370、數(shù)據(jù)文件表格375、塊表格380和一個或多個數(shù)據(jù)文件385??刂葡到y(tǒng) 370被通信地耦合到數(shù)據(jù)文件表格375、塊表格380和一個或多個數(shù)據(jù)文件385??刂葡到y(tǒng)370控制存儲管理器320的操作,并且下文參考圖4來進一步描述。數(shù)據(jù)文件表格375存儲關(guān)于一個或多個數(shù)據(jù)文件385的信息。在一個實施例中, 數(shù)據(jù)文件表格375中的每個條目表示已經(jīng)為其分配空間的一個數(shù)據(jù)文件385,并且該條目包括與數(shù)據(jù)文件相關(guān)聯(lián)的唯一標識符和數(shù)據(jù)文件的位置(例如,文件系統(tǒng)、其中的路徑和文件名)。在數(shù)據(jù)文件表格375中列出的數(shù)據(jù)文件385可以包含或可以不包含數(shù)據(jù)(例如,塊 350)。數(shù)據(jù)文件表格375被例如存儲在數(shù)據(jù)庫(未示出)中。在一個實施例中,在需要數(shù)據(jù)文件385之前將其分配。在該實施例中,保持這些預先分配的數(shù)據(jù)文件385的列表(稱為 “自由列表”)。塊表格380存儲關(guān)于存儲在存儲管理器320中(具體地,存儲在一個或多個數(shù)據(jù)文件385中)的一個或多個塊350的信息。在一個實施例中,對于每個塊350而言,此信息包括存儲在塊中的元數(shù)據(jù)(下文描述)和塊的位置(例如,與存儲塊的數(shù)據(jù)文件相關(guān)聯(lián)的唯一標識符和數(shù)據(jù)文件中存儲該塊的位置(例如,作為偏移(offset)))。塊表格380被例如存儲在數(shù)據(jù)庫(未示出)中。數(shù)據(jù)文件385存儲多個塊350。在一個實施例中,所有的數(shù)據(jù)文件是相同的尺寸 (例如,1千兆字節(jié))并被按照時間順序組織。數(shù)據(jù)文件385被例如存儲在原始盤上或諸如文件系統(tǒng)(未示出)的數(shù)據(jù)存儲系統(tǒng)中。如果數(shù)據(jù)文件385被存儲在原始盤上,則能夠更快地訪問數(shù)據(jù),因為不需要附加的間接層。并且,能夠增加安全性。通信機構(gòu)330通信地將事件接收器310和存儲管理器320耦合。在一個實施例中, 通信機構(gòu)330包括部分公用或完全公用的網(wǎng)絡(luò),諸如因特網(wǎng)。在其它實施例中,通信機構(gòu) 330包括專用網(wǎng)絡(luò)或一個或多個不同的或邏輯專用網(wǎng)絡(luò)(例如虛擬專用網(wǎng)絡(luò)或局域網(wǎng))。去往和來自通信機構(gòu)330的通信鏈路可以是有線或無線的(例如基于陸地或衛(wèi)星的收發(fā)機)。 在一個實施例中,通信機構(gòu)330是分組交換網(wǎng),諸如使用以太網(wǎng)協(xié)議的基于IP的廣域網(wǎng)或城域網(wǎng)。在另一實施例中,通信機構(gòu)330對于單個計算機系統(tǒng)而言是本地的(例如,如果事件接收器310的一部分和存儲管理器320的一部分在同一設(shè)備上執(zhí)行)。在該實施例中,例如通過本地的僅軟件的回環(huán)設(shè)備來實現(xiàn)通信機構(gòu)330。例如,數(shù)據(jù)被拷貝到存儲器中的各種位置,并且通信經(jīng)由API發(fā)生。在又一實施例中,通信機構(gòu)330對于單個過程而言是本地的(例如,如果事件接收器310的一部分和存儲管理器320的一部分在同一設(shè)備上和同一過程中執(zhí)行)。在該實施例中,例如,通過共享存儲器和/或到共享存儲器的指針來實現(xiàn)通信機構(gòu)330。5.初始存儲
圖4是舉例說明根據(jù)本發(fā)明的一個實施例的用于存儲日志數(shù)據(jù)的方法的流程圖。在一個實施例中,由事件接收器310 (例如,其控制系統(tǒng)355)和存儲管理器320 (例如,其控制系統(tǒng)370)來聯(lián)合地執(zhí)行圖4的方法400。在一個實施例中,在方法400開始之前,對該組緩沖器360和元數(shù)據(jù)結(jié)構(gòu)365進行初始化。例如,控制系統(tǒng)355在每個緩沖器中存儲適當?shù)膆dexID??刂葡到y(tǒng)355還在元數(shù)據(jù)結(jié)構(gòu)365中存儲與事件接收器310相關(guān)聯(lián)的唯一標識符。方法400在事件接收器310接收到410日志數(shù)據(jù)340時開始。在一個實施例中, 以流的形式來接收日志數(shù)據(jù)340??刂葡到y(tǒng)355將日志數(shù)據(jù)分離420成一個或多個事件,并確定420每個事件何時被事件接收器310接收到??刂葡到y(tǒng)355將事件解析430成其字段值,并將字段值和接收時間存儲在適當?shù)木彌_器中。控制系統(tǒng)355還更新430元數(shù)據(jù)結(jié)構(gòu)365。例如,緩沖器中的事件的數(shù)目將已經(jīng)增加。可能還需要更新用于(一個或多個)感興趣字段的最小值和最大值。在一個實施例中, 使數(shù)據(jù)寫操作和元數(shù)據(jù)寫操作同步以避免在發(fā)生系統(tǒng)崩潰的情況下的可能的不一致。例如,使用事務(wù)型數(shù)據(jù)庫系統(tǒng),使得如果字段值被存儲在緩沖器360中,保證元數(shù)據(jù)結(jié)構(gòu)365 被相應地更新,即使底層系統(tǒng)在兩個步驟之間崩潰。在某個時間點(見下文),控制系統(tǒng)355基于元數(shù)據(jù)結(jié)構(gòu)365和緩沖器360的內(nèi)容來生成440數(shù)據(jù)塊350。具體地,為每個緩沖器生成一個塊。不同的塊可以具有不同的尺寸。塊尺寸可以由于例如存儲在塊中的字段值的類型(和下文討論的對其應用的壓縮算法) 和促使該快被生成的觸發(fā)器的類型(也在下文討論)而不同。在一個實施例中,可以指定最大塊尺寸。在一個實施例中,每個塊包括元數(shù)據(jù)結(jié)構(gòu)365、相關(guān)緩沖器的內(nèi)容、塊標識符 (ChunkID)、條帶標識符(StripeID)和一組索引位置標識符(IndexLocationID)。請注意,涉及塊的元數(shù)據(jù)部分的感興趣字段和涉及塊的“有效負荷”部分的與緩沖器相關(guān)聯(lián)的字段需要不是相同字段。ChimkID相對于其它塊唯一地識別所述塊。使用在塊組之間被共享的MripeID來將塊相互關(guān)聯(lián)(因為所有塊涉及同一組事件)。下一次控制系統(tǒng)355 生成440數(shù)據(jù)塊350時,該塊將涉及一組不同的事件,因此將使用不同的MripelD。該組MdexLocationID包括用于緩沖器/塊中的每個字段值的一個hdexLocationID。 IndexLocationID用來訪問對應于同一事件的不同塊中的字段值。在一個實施例中, IndexLocationID 包括 StripeID 和偏移標識符(OffsetID)。OffsetID 指示(緩沖器 / 土夬內(nèi))哪個字段值對應于期望事件。在一個實施例中,相關(guān)緩沖器360的內(nèi)容在其被存儲在塊350中之前被壓縮。壓縮緩沖器內(nèi)容使得這種方法成為用于長期數(shù)據(jù)存儲的成本有效的選擇。可以使用任何數(shù)據(jù)壓縮算法來生成內(nèi)容的壓縮版本。在一個實施例中,使用列類型特定壓縮算法。例如,包含時間戳的基于列的塊 (諸如與ReceiptTime字段相關(guān)聯(lián)的塊)可以使用增量編碼。增量編碼存儲相對于前一個值的差,而不是存儲值本身。例如,如果原始值是序列<88888123、88888125、88888126、 88888127、88888128>,則增量編碼將產(chǎn)生序列<88888123,2,1,1,1>。作為另一示例,低基數(shù)的列可以使用常見的串壓縮。生成唯一串符號表格。存儲符號表格中的條目的索引而不是串本身。例如,如果原始值是〈成功、失敗、成功、失敗、成功、成功、失敗〉的序列且符號表格是〈成功、失敗〉,則常見的串壓縮將產(chǎn)生<0,1,0,1,0,0,1>的序列。在另一實施例中,使用不同的無損壓縮算法,諸如GNU zip (gzip)。在一個實施例中,塊350還包括“幻數(shù)”和版本標識符。有時稱為文件簽名的幻數(shù)是識別塊的數(shù)據(jù)類型的字節(jié)的短序列。例如,幻數(shù)在其它數(shù)據(jù)和文件格式(包括其它塊)上是合理地唯一的(即,以高概率是唯一的)。因此,當讀取塊時,容易確定塊是否采取期望的格式。如果塊的實際幻數(shù)不同于期望的幻數(shù),則塊是“錯誤的”(例如,被損壞)?;脭?shù)從而幫助檢測數(shù)據(jù)損壞并重新使數(shù)據(jù)塊邊界同步以便恢復損壞數(shù)據(jù)。(如果實際幻數(shù)與期望的幻數(shù)匹配,則在塊中稍后發(fā)生的數(shù)據(jù)仍可能是錯誤的。然而,匹配幻數(shù)對大多數(shù)常見情況排除了這種可能性。)版本標識符使得能夠適應已經(jīng)改變的數(shù)據(jù)和文件格式。例如,當讀取塊時,可以與幻數(shù)相結(jié)合地使用版本標識符以指示關(guān)于數(shù)據(jù)或文件格式的附加信息。在另一實施例中(也未示出),控制系統(tǒng)355還生成緩沖器360的內(nèi)容的消息摘要。例如,控制系統(tǒng)355對存儲在緩沖器360中的字節(jié)應用密碼散列函數(shù)。可以使用任何密碼散列函數(shù),諸如消息摘要算法5 (MD5)或安全散列算法家族中的算法(例如,SHA-256)。在一個實施例中,摘要值被存儲在塊350中。此值稍后可以用來確定(以壓縮形式)存儲在塊中的緩沖器數(shù)據(jù)是否已改變或被篡改。這通過在事件已經(jīng)改變時使得其引起注意來幫助保證存儲事件的完整性。并且,當塊350到達存儲管理器320時,可以將摘要值連同塊的元數(shù)據(jù)一起存儲在塊表格380中。這樣,如果稍后塊在其被存儲在數(shù)據(jù)文件385中的時候被篡改(或損壞),則被篡改塊的消息摘要將不與先前存儲在塊表格380中的消息摘要匹配。然后將該組緩沖器360和元數(shù)據(jù)結(jié)構(gòu)365重新初始化440,從而清洗緩沖器360。 在一個實施例中,該組緩沖器360包括附加緩沖器,其能夠用來在其它緩沖器滿了或正在被清洗的時候存儲進入的事件。在一個實施例中,在緩沖器360中的任何一個裝滿時執(zhí)行(“觸發(fā)”)步驟440。在另一實施例中,當已經(jīng)逝去特定時間段(“超時窗口”)時執(zhí)行(觸發(fā))步驟440,在該特定時間段期間,事件接收器310未接收到事件??刂葡到y(tǒng)355將數(shù)據(jù)塊350發(fā)送450到存儲管理器320。存儲管理器320接收460塊350??刂葡到y(tǒng)370將塊存儲470在一個或多個數(shù)據(jù)文件385中(見下文)。在一個實施例中,在塊被存儲之前出于安全目的將其加密??刂葡到y(tǒng)370還更新470塊表格380。例如,控制系統(tǒng)370向該表格添加關(guān)于其剛剛存儲在(一個或多個)數(shù)據(jù)文件385中的塊350的信息。控制系統(tǒng)370在每個數(shù)據(jù)文件385內(nèi)按照“附加”順序來寫入塊350。這有時稱為 “寫一次日記(write once journaled)”。在一個實施例中,控制系統(tǒng)保持指示數(shù)據(jù)文件內(nèi)的能夠?qū)懭雺K的位置的“寫指針”。在塊已被寫入數(shù)據(jù)文件之后,修改寫指針以指示同一數(shù)據(jù)文件內(nèi)的位置(具體地,在剛剛寫入的塊的結(jié)尾處)。如果寫入塊裝滿了數(shù)據(jù)文件,則將寫指針修改為指示不同數(shù)據(jù)文件內(nèi)的能夠用來存儲塊的位置(具體地,在開頭處)。在一個實施例中(未示出),通過首先將塊高速緩存在存儲器中來推遲塊寫入。然后將多個連續(xù)塊組合到一個寫操作中以便在RAID 5盤存儲系統(tǒng)上最優(yōu)化完全條帶化寫入。通過使用諸如寫的大型順序輸入操作,以高速度、吞吐量和并發(fā)性來驅(qū)動硬件。如果存在預先分配的數(shù)據(jù)文件(例如,如在上述自由列表中列出的),則控制系統(tǒng) 370使用該數(shù)據(jù)文件并將該數(shù)據(jù)文件的唯一標識符從自由列表去除(因為該數(shù)據(jù)文件不再可用)。如果不存在預先分配的數(shù)據(jù)文件,則控制系統(tǒng)370通過定位可用空間并更新數(shù)據(jù)文件表格375來創(chuàng)建新的數(shù)據(jù)文件。例如,控制系統(tǒng)370向該表格添加關(guān)于其剛剛創(chuàng)建的新數(shù)據(jù)文件385的信息。在一個實施例中,分派給新數(shù)據(jù)文件385的唯一標識符等于1和與最近分配的數(shù)據(jù)文件385相關(guān)聯(lián)的唯一標識符的和。方法400具有許多期望的特性。例如,其是高度可縮放的,因為其能夠支持接收非常高的數(shù)目的每秒事件(EPS)。可以使用多個事件接收器310,并且事件數(shù)據(jù)的寫入是快速的,因為其僅涉及附加操作而沒有查尋操作。方法400還以高可用性為特征,因為其提供對數(shù)據(jù)的連續(xù)訪問。刪除舊事件不會使得存儲介質(zhì)破碎,這意味著不要求碎片整理過程,以及因此也不要求維護窗口。不要求用于清理任務(wù)的隱含停機時間。并且,由于盤寫入操作是高效的,所以其避免了開銷,以便為處理查詢留出余地。6.存儲回收在某個時間點(下文討論),回收正在被一個或多個數(shù)據(jù)文件385使用的存儲以供未來使用。圖5是舉例說明根據(jù)一個實施例的回收存儲的方法。在一個實施例中,由存儲管理器320 (例如,其控制系統(tǒng)370)來執(zhí)行圖5的方法500。識別510與特定保留策略(下文描述)相關(guān)聯(lián)的最舊數(shù)據(jù)文件385。由于數(shù)據(jù)文件具有基于單調(diào)增加編號的唯一標識符,所以容易查詢數(shù)據(jù)文件表格375以找到與保留策略相關(guān)聯(lián)的最舊數(shù)據(jù)文件(即,具有最低唯一標識符的數(shù)據(jù)文件)。從塊表格380去除520關(guān)于包含在已識別數(shù)據(jù)文件385中的所有塊350的信息。刪除530表示已識別數(shù)據(jù)文件385的數(shù)據(jù)文件表格375中的條目。用a)新的唯一標識符(其比最高的所使用的數(shù)據(jù)文件標識符高一)和b)引用先前最舊數(shù)據(jù)文件(即在步驟510中識別的數(shù)據(jù)文件)的物理位置的路徑屬性在數(shù)據(jù)文件表格 375中創(chuàng)建540新的條目。新回收的數(shù)據(jù)文件385被添加550到可用的預先分配數(shù)據(jù)文件的列表并準備好接收新的塊。在所示的實施例中,當回收了數(shù)據(jù)文件的存儲,該數(shù)據(jù)文件被重復利用(例如,重新使用或重寫)而不是刪除。存儲回收算法的細節(jié)(包括例如何時執(zhí)行它和回收多少存儲)取決于與數(shù)據(jù)文件 385相關(guān)聯(lián)的保留策略。保留策略基于例如盤空間使用閾值或保留塊的最大時間來限制塊 350的保留。何時執(zhí)行存儲回收算法的示例是當與該策略相關(guān)聯(lián)的所有數(shù)據(jù)文件都是滿的且不能再分配數(shù)據(jù)文件時(例如,因為沒有留下的存儲空間);當已經(jīng)達到特定閾值時(例如,在為與該保留策略相關(guān)聯(lián)的數(shù)據(jù)文件留下的自由存儲空間的量的方面);當已經(jīng)逝去特定時間段時;當存在與該策略相關(guān)聯(lián)的特定數(shù)目的數(shù)據(jù)文件時;以及當與該策略相關(guān)聯(lián)的數(shù)據(jù)文件中的最舊塊已經(jīng)達到閾值年齡時。在一個實施例中,數(shù)據(jù)文件在回收其空間之前被備份到另一系統(tǒng)上。以此方式,可以在仍保持現(xiàn)有數(shù)據(jù)的同時使得更多的存儲可用。在一個實施例中,所有數(shù)據(jù)文件385與同一保留策略相關(guān)聯(lián)。在另一實施例中,存在多個保留策略,并且每個數(shù)據(jù)文件與多個保留策略中的任何一個相關(guān)聯(lián)??梢詫⒍鄠€數(shù)據(jù)文件與同一保留策略相關(guān)聯(lián)??梢杂捎脩魜韯?chuàng)建并修改保留策略。在一個實施例中,存儲管理器320在邏輯上為每個保留策略保持上述的存儲回收算法的一個實例。例如,每個數(shù)據(jù)文件385包括指示應用于該數(shù)據(jù)文件的保留策略的元數(shù)據(jù),并且塊被存儲在對應于該塊的保留策略的數(shù)據(jù)文件中。如果存在多個保留策略,則略微修改圖3所示的系統(tǒng)170 (未示出)。具體地,事件接收器310包括用于每個保留策略的一組緩沖器360和一個元數(shù)據(jù)結(jié)構(gòu)365。在從事件提取字段值并將其存儲在該組緩沖器中且更新元數(shù)據(jù)結(jié)構(gòu)(步驟430)之前,控制系統(tǒng)355確定應對該事件應用哪個保留策略。此確定是基于例如特定時間的靜態(tài)映射或?qū)傩???梢允褂萌魏螌傩?,諸如優(yōu)先級或事件源?;诖舜_定,控制系統(tǒng)355將事件字段值存儲在適當?shù)囊唤M緩沖器中并更新適當?shù)脑獢?shù)據(jù)結(jié)構(gòu)。因此,一組特定緩沖器中的所有事件字段值將與同一保留策略相關(guān)聯(lián)。因而斷定,基于該該組緩沖器生成的基于列的塊350將與同一保留策略相關(guān)聯(lián)。 在將塊存儲在數(shù)據(jù)文件385中(步驟470)之前,控制系統(tǒng)370確定塊的保留策略并將塊存儲在與該策略相關(guān)聯(lián)的數(shù)據(jù)文件中。因此,特定數(shù)據(jù)文件中的所有塊將與同一保留策略相關(guān)聯(lián)。可替換地,可以將基于列的塊相關(guān)的不同緩沖器360與不同的保留策略相關(guān)聯(lián), 即使緩沖器正在存儲來自同一組事件的字段值。例如,存儲被更經(jīng)常搜索的字段的塊能夠具有與存儲不那么經(jīng)常被搜索的字段的塊不同的保留策略。在該實施例中,可以將來自第一事件的第一字段值與第一保留策略相關(guān)聯(lián),并且可以將來自同一事件的第二字段值與第二(不同的)保留策略相關(guān)聯(lián)。在一個實施例中,每個保留策略具有其自己的數(shù)據(jù)文件385的群組。用唯一編號來標記每個數(shù)據(jù)文件。該編號確定一個群組內(nèi)的文件的順序。按照附加順序來寫入數(shù)據(jù)文件。文件未被更新,并且文件被寫入一次且在僅附加模式下操作,這防止日志數(shù)據(jù)篡改。當一個保留群組內(nèi)的所有文件被裝滿時,從該群組中的第一(即最舊)文件回收存儲。在一個實施例中,針對每個保留策略來保持單獨的數(shù)據(jù)文件表格375,其包含用于已被分配給該保留策略的數(shù)據(jù)文件385的條目。如果保持自由列表,則只有一個自由列表被用于整個存儲管理器320,無論存在多少保留策略。7.查詢/數(shù)據(jù)檢索
回想基于行的塊包含用于一組事件的完整信息。來自該同一組事件的字段值的基于列的塊是包含在基于行的塊中的信息的子集。由于基于列的塊包含比基于行的塊少的信息, 所以加載到存儲器中(例如從數(shù)據(jù)文件)并進行搜索也是更快的。因此,如果搜索查詢項涉及基于列的塊的字段,則搜索基于列的塊比搜索基于行的塊更快。由于基于列的塊有助于搜索,所以其有時稱為“搜索索引,,或簡單地“索引”。在塊350已被存儲在數(shù)據(jù)文件385中之后,可以查詢塊內(nèi)的字段值??梢元毩⒌鼗蜃鳛樘幚斫换ニ阉骰蛏蓤蟾娴囊徊糠謥韴?zhí)行查詢。查詢被表示為能夠被針對事件進行評估的表達式。該表達式包括一個或多個搜索項。搜索項涉及事件的內(nèi)容,具體地涉及特定字段和該字段的值。例如,搜索項“TransportProtocol (傳輸協(xié)議)=TCP”涉及 TransportProtocol字段和等于“TCP”的該字段的值。作為另一示例,搜索項“優(yōu)先級包含 ‘高’ ”涉及優(yōu)先級字段和等于“ ‘高’ ”的該字段的值。搜索項的一個常見類型包括時間戳字段(例如EventReceipt (事件接收))和時間段(例如起始時間和結(jié)束時間)。執(zhí)行搜索查詢的結(jié)果常常是一個或多個事件的組。例如,搜索查詢“從其中TransportProtocol = TCP的事件選擇*”將返回一組事件,其中的每一個在其TransportProtocol字段中具有“TCP”的值。在一個實施例中,查詢過程分多個階段發(fā)生。第一階段基于“感興趣字段”信息 (如存儲在塊的元數(shù)據(jù)中)來過濾數(shù)據(jù)塊350。第二階段基于字段值(如存儲在塊的“有效負荷”中)來過濾數(shù)據(jù)塊350。第三階段將滿足該查詢的事件聚集。第一階段從而充當用于識別應進一步調(diào)查哪些數(shù)據(jù)塊(及其對應事件)和應忽視哪些數(shù)據(jù)塊(及其對應事件)的“粗切割”。在大多數(shù)情況下,當查詢或檢索事件時不考慮分派給塊的保留策略,因為哪個保留策略應用于包含事件的塊不是令人感興趣的。在第一階段中,識別涉及包含在元數(shù)據(jù)結(jié)構(gòu)365 (當事件字段值被存儲在緩沖器 360中而不是作為數(shù)據(jù)文件385中的數(shù)據(jù)塊350的一部分時返回)中的信息的查詢內(nèi)的搜索項。此元數(shù)據(jù)信息包括相關(guān)事件接收器的唯一標識符并且對于每個感興趣字段包括最小值和最大值,所述最小值和最大值一起反映多個事件(最初,其字段值被存儲在同一緩沖器中的事件;稍后,其字段值被存儲在同一數(shù)據(jù)塊中的事件)上的該字段的值的范圍?;叵朐獢?shù)據(jù)信息被作為塊150的一部分傳送到存儲管理器320。然后,元數(shù)據(jù)信息被存儲在塊表格 380中。因此,為了基于此元數(shù)據(jù)來搜索事件,使用“元數(shù)據(jù)搜索項”來搜索塊表格380。這將產(chǎn)生哪些塊(如果有的話)可能包含滿足元數(shù)據(jù)搜索項的事件。以此方式,可以基于用于事件接收器和/或感興趣字段的特定值(或值范圍)來約束搜索(因為這些值被存儲在塊表格380中的元數(shù)據(jù)中)。由于“感興趣字段”元數(shù)據(jù)被表示為值的范圍,所以塊滿足元數(shù)據(jù)搜索項的事實不一定意味著塊包含滿足元數(shù)據(jù)搜索項的事件。例如,如果元數(shù)據(jù)搜索項是10的字段值且塊包含其字段值分別是5和15的事件,則10將落在該范圍內(nèi),并且該塊將被識別為滿足元數(shù)據(jù)搜索項。然而,塊可能不包含具有10的字段值的事件。(這就是為什么查詢分多個階段發(fā)生的原因。)然而,始終是成立的是如果塊可以包含滿足搜索項的事件,則該塊將被識別為滿足搜索項。在第二階段中,基于字段值(如存儲在塊的“有效負荷”中)來進一步過濾由第一階段識別的數(shù)據(jù)塊350。具體地,識別涉及其值被存儲在基于列的塊350中的字段(即“索引化”字段)的查詢內(nèi)的搜索項。例如,如果搜索項涉及SourceIPAddress字段,則識別與 SourceIPAddress字段相關(guān)聯(lián)的基于列的塊。(這可以通過檢查塊的hdexID來完成。)然后在已識別塊內(nèi)搜索該搜索項的請求值(例如,特定IP地址)。如果塊的有效負荷部分(即, 一組字段值)采取壓縮格式,則在其中搜索所述搜索項的請求值之前對其解壓縮。在第三階段中,將滿足查詢的事件聚集。繼續(xù)前一示例,假設(shè)已經(jīng)識別了與 SourceIPAddress字段相關(guān)聯(lián)的特定的基于列的塊。此外,假設(shè)特定的字段值條目已經(jīng)在塊內(nèi)被識別為與搜索項的請求值匹配。該特定字段值條目與hdexLocationID相關(guān)聯(lián)?,F(xiàn)在使用hdexLocationID來獲得事件的其余字段值?;叵?IndexLocationID 包括 StripeID 和 OffsetID0 StripeID 用來識別涉及同一組事件的其它基于列的塊。(在一個實施例中,存儲管理器320保持MripeID到與該MripeID相關(guān)聯(lián)的ChimkID列表的映射。)一旦識別了那些其它基于列的塊,則使用 OffsetID來獲得適當?shù)淖侄沃?S卩,屬于與基于SourceIPAddress字段識別的事件相同的事件的那些字段值)。作為示例,考慮一組事件,其中的每一個包括DeviceVendor (設(shè)備供應商)字段、 TransportProtocol 字段和 I^riority(優(yōu)先級)字段。搜索查詢“從其中 TransportProtocol =TCP且I^riority = ’ Very High'的事件中選擇*”將返回一組事件,其中的每一個在其 TransportProtocol字段中具有“TCP”的值且在其I^riority字段中具有“ ‘Very High,,,的值。搜索查詢“從其中TransportProtocol = TCP且Priority = 'Very High'的事件中選擇DeviceVendor”將僅返回來自該組事件(其中的每一個在其TransportProtocol字段中具有“TCP”的值且在其I^riority字段中具有‘Very High,的值)的DeviceVendor字段值。假設(shè)DeviceVendor、TransportProtocol 和 Priority 不是“感興趣字段”(并因此不具有存儲在任何塊的元數(shù)據(jù)部分中的值范圍)。執(zhí)行此查詢的一種方式如下1)識別與 TransportProtocol字段相關(guān)聯(lián)的基于列的塊。搜索那些塊以尋找等于“TCP”的字段值。對于每個匹配的字段值而言,存儲相關(guān)的hdexLocationID。2)識別與I^riority字段相關(guān)聯(lián)的基于列的塊。搜索那些塊以尋找等于“‘Very High’ ”的字段值。對于每個匹配的字段值而言,存儲相關(guān)的IndexLocationID0 3)確定在(1)中存儲的IndexLocationID和在(2)中存儲的MdexLocationID的交集(即確定哪些MdexLocationID被存儲在(1)和(2)兩者中)。 4)識別與DeviceVendor字段相關(guān)聯(lián)的基于列的塊。對于(3)中的每個hdexLocationID 而言,確定對應的字段值并將該值作為搜索結(jié)果的一部分返回。在一個實施例(未示出)中,按照特定的順序來分析事件。例如,按照升序(即首先是最舊事件)或降序(首先是最新事件),基于事件的事件接收時間來分析事件。按照特定順序來分析事件并將匹配事件附加于搜索結(jié)果意味著搜索結(jié)果中的事件將已經(jīng)處于該特定順序。不要求事件的排序。在第一階段中,可能的是沒有搜索項涉及包含在元數(shù)據(jù)結(jié)構(gòu)365中的信息。如果這種情況發(fā)生,則所有塊350將被識別為可能包含滿足元數(shù)據(jù)搜索項的事件字段值(因為不存在元數(shù)據(jù)搜索項)。上述算法搜索被存儲在塊350中的事件字段值。然而,日志記錄系統(tǒng)170可以包含事件接收器310中(例如,該組緩沖器360內(nèi))的尚未被存儲在塊中的附加事件字段值。以上算法將不搜索這些事件字段值。在一個實施例中,在執(zhí)行算法之前,清洗該組緩沖器360, 使得事件字段值將被發(fā)送到存儲管理器320并存儲在塊中。這樣,當執(zhí)行算法時,還將搜索先前在該組緩沖器中的事件字段值。在另一實施例中,與上述算法類似地,使用該組緩沖器 360和元數(shù)據(jù)結(jié)構(gòu)365的內(nèi)容在事件接收器310上執(zhí)行單獨的搜索。這樣,將搜索所有事件字段值,無論其被存儲在存儲管理器320中還是事件接收器310中。圖6是舉例說明根據(jù)一個實施例的用于查詢的方法的流程圖。在一個實施例中, 由存儲管理器320 (例如,其控制系統(tǒng)370)來執(zhí)行圖6的方法600。在方法600開始之前, 接收搜索查詢。該搜索查詢包括一個或多個搜索項。識別610 (在接收到的搜索查詢內(nèi))任何元數(shù)據(jù)搜索項。使用已識別的元數(shù)據(jù)搜索項來搜索620塊表格380?;叵雺K表格380中的每個條目對應于塊350,并且條目包括存儲在塊中的元數(shù)據(jù)和塊的位置。使用已識別的元數(shù)據(jù)搜索項來搜索塊表格380的元數(shù)據(jù)部分。使用存儲在塊表格380中的塊的位置來檢索630其元數(shù)據(jù)滿足元數(shù)據(jù)搜索項的每個塊350。識別640 (在接收到的搜索查詢內(nèi))任何索引化搜索項。(從在步驟630中檢索的那些之中)識別650與索引化搜索項相關(guān)聯(lián)的任何塊。使用所識別的索引化搜索項來搜索660在步驟640中識別的塊的有效負荷部分。將滿足搜索查詢的事件聚集670。當塊的有效負荷部分內(nèi)的字段值條目與搜索
項匹配時,確定條目的hdexLocationlD并將其用來訪問匹配事件的其余字段的字段值條目。8.附加實施例一存檔
在一個實施例中,日志記錄系統(tǒng)170支持用于數(shù)據(jù)文件385的存檔功能。例如,可以將數(shù)據(jù)文件385導入日志記錄系統(tǒng)170并從日志記錄系統(tǒng)170導出。作為另一示例,可以將數(shù)據(jù)文件385備份到另一系統(tǒng)上,并稍后恢復到日志記錄系統(tǒng)170中。由于事件被存儲在塊中且塊被存儲在數(shù)據(jù)文件中,所以事件可容易地轉(zhuǎn)移成近線或離線存儲。在一個實施例中, 基于檔案標準自動地將數(shù)據(jù)文件存檔,所述檔案標準可以類似于用于查詢的標準(例如,存
21儲在數(shù)據(jù)文件內(nèi)的塊的元數(shù)據(jù)結(jié)構(gòu)中的信息的值)。在另一實施例中,手動地將數(shù)據(jù)文件存檔(例如,響應于用戶命令)。9.與基于列的塊相結(jié)合的基于行的塊 A.存儲
'078申請描述了僅使用基于行的塊來存儲事件數(shù)據(jù)。在上文中,本申請描述了僅使用基于列的塊來存儲事件數(shù)據(jù)。第三種類型的事件存儲使用基于行的塊和基于列的塊兩者。 這種類型的事件存儲將事件存儲兩次一使用基于行的塊存儲一次和使用一個或多個基于列的塊存儲一次。例如,一組事件將被存儲為一個基于行的塊。那些事件的字段值還將被存儲為基于列的塊(每個字段一個基于列的塊)?;叵牖谛械拇鎯κ菍懽顑?yōu)化的,而基于列的存儲是讀最優(yōu)化的。使用基于行和基于列的塊兩者來存儲事件的優(yōu)點是這兩種優(yōu)化都是可用的。基于行的塊的寫入更快,因此使用該架構(gòu)使得事件能夠被更加快速地存儲?;诹械膲K讀起來更快,因此使用該架構(gòu)使得事件能夠被更快速地讀取(例如查詢)。在其中正在使用基于行的塊和基于列的塊兩者的一個實施例中,不作為同一事務(wù)的一部分來執(zhí)行基于行的塊的生成和存儲及基于列的塊的生成和存儲。如果正在以非常高的速率接收事件,則基于列的塊的生成和存儲(“索引化”)可以落后于基于行的塊的生成和存儲。并沒有以索引化為成本(例如,時間成本)而放棄或延遲數(shù)據(jù)。請注意,即使索引化落在基于行的塊的生成和存儲后面,用戶仍能夠使用基于行的塊來查詢所有事件數(shù)據(jù)。并且,可以將基于行的塊和基于列的塊與不同的保留策略相關(guān)聯(lián)。例如,可以將存儲一組事件的基于行的塊與第一保留策略相關(guān)聯(lián),并且可以將存儲同一組事件的基于列的塊與第二保留策略(或多個保留策略,如上所述)相關(guān)聯(lián)。只要存在基于行的塊,則在必要時能夠重新創(chuàng)建基于列的塊。同樣地,只要存在基于列的塊,則在必要時能夠重新創(chuàng)建基于行的塊。通常,在多個基于列的塊中比在一個基于行的塊中要求更少的空間來存儲一組事件。 因此,在一個實施例中,(例如,對于同一組事件)比基于行的塊更長地存儲基于列的塊。如果正在使用基于行和基于列的塊兩者,這不一定意味著必須將事件的所有列 (字段)存儲在基于列的塊中??紤]使用基于行的塊存儲的一組事件。代替將事件的所有列存儲為基于列的塊,以這種方式僅存儲所選列。由于基于列的塊查詢起來更快,所以也許僅僅被最頻繁查詢的列被存儲為基于列的塊。請注意,即使其余列未被存儲為基于列的塊,仍能通過使用基于行的塊來查詢其字段值,因為基于行的塊包括所有事件數(shù)據(jù)。因而斷定,最優(yōu)化對于存儲為基于行的塊的事件的查詢的一種方式是為被最頻繁地查詢的事件字段創(chuàng)建基于列的塊。這些基于列的塊的創(chuàng)建可以在事件存儲過程中的任何點發(fā)生。例如,’078申請描述了存儲基于行的塊的數(shù)據(jù)文件??梢詮拇鎯Φ幕谛械膲K提取事件并然后將其用來創(chuàng)建一個或多個基于列的塊。(請注意,如果期望,可以將來自多個基于行的塊的字段值的列存儲在一個基于列的塊中。)可替換地,當存儲管理器首先接收到塊并將該塊加載到存儲器中時,管理器可以創(chuàng)建一個或多個基于列的塊。這樣,不必從存儲的基于行的塊提取事件并在稍后將其加載到存儲器中。另一可能性是事件接收器創(chuàng)建基于列的塊,如上所述?;蛘?,被發(fā)送到事件接收器的日志數(shù)據(jù)可以已經(jīng)采取基于列的格式。上述四個存儲類型(僅行、僅列、行和所有列以及行和所選列)不是互相排斥的。 一個日志記錄系統(tǒng)可以使用全部四個存儲類型。例如,可以使用基于行的塊來存儲第一組事件,可以使用基于列的塊來存儲第二組事件,可以使用基于行和基于列的塊(對于所有列而言)來存儲第三組事件,并可以使用基于行和基于列的塊(對于所選列而言)來存儲第四組事件。哪個存儲方案是最好的取決于情況。雖然基于行的塊創(chuàng)建起來更快,但基于列的塊查詢起來更快。在一個實施例中,基于何時接收到事件來選擇存儲架構(gòu)。例如,使用基于行和基于列的塊(對于所有列而言)來存儲最近(例如,在過去的30天內(nèi))接收到的事件。使用僅基于行的塊(或僅基于列的塊)來存儲較舊的事件。如果先前使用基于行和基于列的塊(對于所有塊而言)來存儲較舊的事件,則基于行的塊和基于列的塊包含相同的信息,因此可以刪除任何一個。如果先前使用基于行和基于列的塊(對于所選列而言)來存儲較舊的事件,則基于行的塊和基于列的塊不包含相同的信息,并且刪除基于行的塊將導致信息被丟失。在這種情況下,刪除基于列的塊可能更好(因為其包含的信息是冗余的)。在另一實施例中,基于接收到事件的事件接收器來選擇存儲架構(gòu)。例如,使用基于行和基于列的塊來存儲由第一接收器接收到的事件。使用僅基于行的塊(或僅基于列的塊) 來存儲由第二接收器接收到的事件。在一個實施例中,日志記錄系統(tǒng)170的初始化包括指定存儲方案(例如,僅行、僅列、行和所有列或行和所選列)和應何時使用該方案(例如,基于事件接收時間落在時間段內(nèi)或基于由特定事件接收器接收到事件)。在另一實施例中,可以在任何時間改變存儲方案 (和/或應何時使用該方案)。B.查詢/數(shù)據(jù)檢索
'078申請描述了對于使用僅基于行的塊存儲的事件數(shù)據(jù)的查詢和數(shù)據(jù)檢索。為了執(zhí)行查詢,識別可以包含滿足該查詢的事件的數(shù)據(jù)塊。具體地,識別查詢內(nèi)的包含被包含在元數(shù)據(jù)結(jié)構(gòu)中的信息的搜索項。使用“元數(shù)據(jù)搜索項”來搜索塊表格。以此方式,可以基于存儲在元數(shù)據(jù)中的信息的特定值來約束搜索。將所識別的塊分解成其組成事件。識別滿足該查詢的事件。在上文中,本申請描述了對于使用僅基于列的塊存儲的事件數(shù)據(jù)的查詢和數(shù)據(jù)檢索。為了執(zhí)行查詢,首先基于“感興趣字段”信息(如存儲在塊的元數(shù)據(jù)中)來過濾數(shù)據(jù)塊。 然后基于字段值(如存儲在塊的“有效負荷”中)來過濾剩余塊。最后,將滿足該查詢的事件逐字段地聚集?;叵牖诹械膲K包括一組索引位置標識符(hdexLocationID)。該組 IndexLocationID^fgM^?1SitIndexLocationlD。 IndexLocationlD 用來訪問對應于同一事件的不同塊中的字段值。當僅存在基于列的塊時,使用 IndexLocationID來將滿足搜索查詢的事件(逐字段地)聚集。當存在基于行和基于列的塊兩者時,不需要逐字段地將滿足搜索查詢的事件聚集。作為替代,能夠全部從對應的基于行的塊獲得事件。具體地,基于列的塊使用“表格位置標識符”(TableLocationID)來間接地引用其相關(guān)的基于行的塊。在一個實施例中,一組表格位置標識符(TableLocationID)被存儲為其自己的基于列的塊。該塊中的每個TableLocationID對應于特定的事件。TableLocationID包括基于行的塊標識符 (RBChunkID)和基于列的塊偏移標識符(RBChunkOffsetID)。RBChunkID指示哪個基于行的塊包含與TableLocationID相關(guān)聯(lián)的事件。RBChunkOffsetID指示該事件(在基于行的塊內(nèi))在哪里開始。每當生成一組基于列的塊(例如,基于現(xiàn)有基于行的塊或由事件接收器, 如上文關(guān)于步驟440所述)時,還生成TableLocationID基于列的塊。稍后,當執(zhí)行查詢并在這些基于列的塊中的一個中找到匹配字段值時,使用相關(guān)hdexLocationlD (具體地為 OffsetID)來訪問來自TableLocationID基于列的塊的適當TableLocationID。以此方式, 單個查詢可以使用基于行的存儲和基于列的存儲二者。剛剛已描述了三個不同的查詢執(zhí)行方案一僅行、僅列以及行和列。查詢優(yōu)化器確定應對特定的查詢使用哪個執(zhí)行方案。具體地,查詢優(yōu)化器計算每個執(zhí)行方案的“總成本” 并且然后選擇具有最低成本的方案。(在一個實施例中,查詢優(yōu)化器僅考慮僅列方案及行和列方案,因為僅行方案在成本上很可能是最高的。)執(zhí)行方案的總成本是不同的子成本的函數(shù),所述子成本諸如CPU成本和輸入/輸出(1/0)成本。子成本又是查詢的謂詞的選擇性和在查詢(謂詞和期望搜索結(jié)果兩者)中涉及的列(字段)的數(shù)目的函數(shù)?;陉P(guān)于過去事件的字段的統(tǒng)計信息來估計該選擇性。例如,由直方圖來提供關(guān)于字段上的數(shù)據(jù)分布的信息,直方圖將字段上的值劃分到k個桶中。通常,選擇性越低,查詢優(yōu)化器越有可能選擇僅列方案。選擇性越高,查詢優(yōu)化器越有可能選擇行和列方案。并且,列的數(shù)目越低,查詢優(yōu)化器越有可能選擇僅列方案。列的數(shù)目越高,查詢優(yōu)化器越有可能選擇行和列方案。搜索查詢可能不請求滿足該查詢的事件的所有字段。在這種情況下,可以如上所述(使用TableLocationID和基于行的塊)整體地獲得事件,以及然后可以在生成搜索結(jié)果之前去除不必要的字段。如果搜索查詢請求許多字段,則這種方法可能比從不同的基于列的塊單獨地獲得每個字段更快?;叵胨阉骰诹械膲K比搜索基于行的塊更快??紤]涉及特定事件字段的搜索查詢項。如果該字段與現(xiàn)有基于列的塊相關(guān)聯(lián),則搜索該基于列的塊來尋找期望字段值。如果不存在此類基于列的塊,則改為搜索適當?shù)幕谛械膲K??商鎿Q地,可以(基于基于行的塊) 創(chuàng)建基于列的塊并然后對其進行搜索。當將需要針對若干事件搜索同一字段時,創(chuàng)建基于列的塊可能是優(yōu)選的。C.附加實施例
在其中正在使用基于行的塊和基于列的塊兩者的一個實施例中,基于列的塊發(fā)生器 (“索引器”)支持檢查點恢復。具體地,在系統(tǒng)崩潰的情況下,索引器能夠從上一次的檢查點恢復并重新開始。檢查點間隔是可配置的。間隔越長,索引器的性能越高(例如,用來生成基于列的塊的速度越高),但是崩潰恢復時間越長。在檢查點階段期間,索引器保持上次掃描的TableLocationID和上次創(chuàng)建的hdexLocationID。在恢復階段期間,索引器在所保持的TableLocationID和MdexLocationID處開始并繼續(xù)索引化表格中的任何剩余數(shù)據(jù)??梢詫谛械拇鎯?或基于列的存儲執(zhí)行存檔。用于自動存檔的檔案標準在基于行的存儲與基于列的存儲之間可以是不同的。包括以上說明是為了舉例說明優(yōu)選實施例的操作且并不意圖限制本發(fā)明的范圍。 本發(fā)明的范圍僅僅由以下權(quán)利要求來限制。根據(jù)以上討論,許多變化對于相關(guān)領(lǐng)域的技術(shù)人員來說將是顯而易見的,所述變化仍被本發(fā)明的精神和范圍所涵蓋。
2權(quán)利要求
1.一種用于處理日志數(shù)據(jù)的方法,包括接收包括多個事件的日志數(shù)據(jù),其中,事件包括一組字段,并且其中,字段存儲值;以及對于所述多個事件中的每個事件而言將事件存儲在一組緩沖器中,其中,事件的每個字段與不同的緩沖器相關(guān)聯(lián);以及更新包括關(guān)于緩沖器的內(nèi)容的信息的元數(shù)據(jù)結(jié)構(gòu),其中,關(guān)于緩沖器的內(nèi)容的信息包括反映存儲在緩沖器中的所有事件的第一字段的最小值的第一最小值。
2.權(quán)利要求1的方法,其中,關(guān)于緩沖器的內(nèi)容的信息還包括反映存儲在緩沖器中的所有事件的第一字段的最大值的第一最大值。
3.權(quán)利要求1的方法,其中,關(guān)于緩沖器的內(nèi)容的信息還包括反映存儲在緩沖器中的所有事件的第二字段的最小值的第二最小值。
4.權(quán)利要求1的方法,其中,關(guān)于緩沖器的內(nèi)容的信息還包括存儲在緩沖器中的事件的數(shù)目。
5.權(quán)利要求1的方法,還包括響應于第一觸發(fā)條件,為該組緩沖器中的每個緩沖器生成一個數(shù)據(jù)塊,其中,所述數(shù)據(jù)塊基于元數(shù)據(jù)結(jié)構(gòu)的內(nèi)容并且還基于緩沖器的內(nèi)容。
6.權(quán)利要求5的方法,其中,所述第一觸發(fā)條件基于緩沖器使用閾值或基于超時窗口。
7.權(quán)利要求5的方法,還包括響應于第二觸發(fā)條件,回收被數(shù)據(jù)塊中的一個使用的存儲空間。
8.權(quán)利要求7的方法,其中,所述第二觸發(fā)條件基于與數(shù)據(jù)塊相關(guān)聯(lián)的保留策略。
9.權(quán)利要求7的方法,其中,所述第二觸發(fā)條件基于盤空間使用閾值或基于保留數(shù)據(jù)塊的最大時間。
10.權(quán)利要求5的方法,還包括響應于第二觸發(fā)條件,將數(shù)據(jù)塊中的一個存檔。
11.權(quán)利要求10的方法,其中,所述第二觸發(fā)條件基于與數(shù)據(jù)塊相關(guān)聯(lián)的檔案標準。
12.權(quán)利要求10的方法,其中,所述第二觸發(fā)條件包括用戶命令。
13.權(quán)利要求1的方法,還包括對于所述多個事件中的每個事件而言確定何時接收到該事件;以及在附加緩沖器中存儲反映何時接收到該事件的時間戳。
14.權(quán)利要求1的方法,其中,將事件存儲在該組緩沖器中包括將事件的每個字段值存儲在與該字段相關(guān)聯(lián)的緩沖器中。
15.權(quán)利要求1的方法,還包括為該組緩沖器中的每個緩沖器生成一個數(shù)據(jù)塊,其中, 所述數(shù)據(jù)塊包括元數(shù)據(jù)結(jié)構(gòu)的內(nèi)容和緩沖器的內(nèi)容的壓縮版本。
16.權(quán)利要求15的方法,其中,所述數(shù)據(jù)塊還包括文件簽名或版本標識符。
17.權(quán)利要求15的方法,其中,所述數(shù)據(jù)塊還包括緩沖器的內(nèi)容的消息摘要。
18.根據(jù)權(quán)利要求15所述的方法,還包括 接收包括一個或多個搜索項的組的搜索查詢;從該組搜索項中識別涉及包含在元數(shù)據(jù)結(jié)構(gòu)中的信息的一個或多個第一搜索項;以及通過針對每個數(shù)據(jù)塊將已識別的第一搜索項與包括在數(shù)據(jù)塊內(nèi)的元數(shù)據(jù)結(jié)構(gòu)的內(nèi)容相比較來搜索一個或多個數(shù)據(jù)塊。
19.權(quán)利要求18的方法,還包括對于滿足已識別的第一搜索項的每個數(shù)據(jù)塊而言從該組搜索項中識別涉及與和該數(shù)據(jù)塊相關(guān)聯(lián)的緩沖器相關(guān)聯(lián)的字段的一個或多個第二搜索項;將已識別的第二搜索項與包括在該數(shù)據(jù)塊內(nèi)的緩沖器的內(nèi)容的未壓縮版本相比較。
20.權(quán)利要求19的方法,還包括對于滿足已識別的第二搜索項的每個字段值而言 識別與該字段值相關(guān)聯(lián)的索引位置標識符; 對于該組緩沖器中的每個緩沖器而言 訪問與該緩沖器相關(guān)聯(lián)的數(shù)據(jù)塊;以及識別該數(shù)據(jù)塊中的與索引位置標識符匹配的字段值;以及將已識別的字段值聚集成事件。
21.一種用于處理日志數(shù)據(jù)的計算機程序產(chǎn)品,該計算機程序產(chǎn)品包括機器可讀存儲介質(zhì),該機器可讀存儲介質(zhì)包含用于執(zhí)行方法的計算機程序代碼,該方法包括接收包括多個事件的日志數(shù)據(jù),其中,事件包括一組字段,并且其中,字段存儲值;以及對于所述多個事件中的每個事件而言將事件存儲在一組緩沖器中,其中,事件的每個字段與不同的緩沖器相關(guān)聯(lián);以及更新包括關(guān)于緩沖器的內(nèi)容的信息的元數(shù)據(jù)結(jié)構(gòu),其中,關(guān)于緩沖器的內(nèi)容的信息包括反映存儲在緩沖器中的所有事件的第一字段的最小值的第一最小值。
22.一種用于處理日志數(shù)據(jù)的系統(tǒng),包括機器可讀存儲介質(zhì),其包含用于執(zhí)行方法的計算機程序代碼,該方法包括 接收包括多個事件的日志數(shù)據(jù),其中,事件包括一組字段,并且其中字段存儲值;以及對于所述多個事件中的每個事件而言將事件存儲在一組緩沖器中,其中,事件的每個字段與不同的緩沖器相關(guān)聯(lián);以及更新包括關(guān)于緩沖器的內(nèi)容的信息的元數(shù)據(jù)結(jié)構(gòu),其中,關(guān)于緩沖器的內(nèi)容的信息包括反映存儲在緩沖器中的所有事件的第一字段的最小值的第一最小值;以及處理器,其被配置為執(zhí)行由所述機器可讀介質(zhì)存儲的計算機程序代碼。
23.一種用于處理事件的方法,其中,事件包括多個字段,并且其中,字段存儲值,包括接收一組事件;生成包括該組事件和關(guān)于該組事件的元數(shù)據(jù)的基于行的塊;以及生成基于列的塊,所述基于列的塊包括關(guān)于該組事件的元數(shù)據(jù)以及對于該組事件中的每個事件包括特定字段的值,其中,關(guān)于該組事件的元數(shù)據(jù)包括反映該組事件中的所有事件上的第一字段的最小值的第一最小值。
24.權(quán)利要求23的方法,還包括生成第二基于列的塊,所述第二基于列的塊包括關(guān)于該組事件的元數(shù)據(jù)以及對于該組事件中的每個事件包括附加字段的值。
25.權(quán)利要求23的方法,其中,所述基于行的塊與第一保留策略相關(guān)聯(lián),并且其中,所述基于列的塊與不同的保留策略相關(guān)聯(lián)。
26.一種用于處理事件的方法,其中,事件包括多個字段,并且其中,字段存儲值,包括接收第一組事件;生成基于行的塊,所述基于行的塊包括所述第一組事件和關(guān)于所述第一組事件的元數(shù)據(jù),其中,關(guān)于所述第一組事件的元數(shù)據(jù)包括反映所述第一組事件中的所有事件上的第一字段的最小值的第一最小值; 接收第二組事件;以及生成基于列的塊,所述基于列的塊包括關(guān)于所述第二組事件的元數(shù)據(jù)以及對于所述第二組事件中的每個事件包括特定字段的值,其中,關(guān)于所述第二組事件的元數(shù)據(jù)包括反映所述第二組事件中的所有事件上的第二字段的最小值的第二最小值。
27.權(quán)利要求沈的方法,其中,關(guān)于所述第一組事件的元數(shù)據(jù)還包括反映所述第一組事件中的所有事件上的第一字段的最大值的第一最大值。
28.權(quán)利要求沈的方法,其中,關(guān)于所述第一組事件的元數(shù)據(jù)還包括反映所述第一組事件中的所有事件上的第三字段的最小值的第三最小值。
29.權(quán)利要求沈的方法,還包括生成第二基于列的塊,所述第二基于列的塊包括關(guān)于第二組事件的元數(shù)據(jù)以及對于第二組事件中的每個事件包括附加字段的值,其中,關(guān)于第二組事件的元數(shù)據(jù)包括反映第二組事件中的所有事件上的第二字段的最小值的第二最小值。
30.一種用于根據(jù)搜索查詢來搜索一組事件的方法,其中,事件包括多個字段,并且其中字段存儲值,并且其中所述搜索查詢指示期望值和多個字段中的一個字段,所述方法包括訪問第一基于列的塊,所述第一基于列的塊包括用于該組事件中的每個事件的所指示的字段的值和相關(guān)索引位置標識符;識別第一基于列的塊中的與所述期望值匹配的值; 識別與所識別的值相關(guān)的索引位置標識符;訪問第二基于列的塊,所述第二基于列的塊包括用于該組事件中的每個事件的表格位置標識符和相關(guān)索引位置標識符;識別所述第二基于列的塊中的與所識別的索引位置標識符相關(guān)聯(lián)的表格位置標識符;訪問包括該組事件中的每個事件的基于行的塊;以及識別基于行的塊中的與所識別的表格位置標識符相關(guān)聯(lián)的事件。
31.一種用于選擇用于查詢的執(zhí)行方案的方法,包括 估計查詢的謂詞的選擇性;確定查詢中所涉及的字段的數(shù)目;響應于所述選擇性是低的且列的數(shù)目是低的,選擇僅列方案;以及響應于所述選擇性是高的且列的數(shù)目是高的,選擇行和列方案。
全文摘要
一種日志記錄系統(tǒng)包括事件接收器和存儲管理器。接收器接收日志數(shù)據(jù),對其進行處理并輸出基于列的數(shù)據(jù)“塊”。管理器接收并存儲塊。接收器包括存儲事件的緩沖器和存儲關(guān)于緩沖器的內(nèi)容的元數(shù)據(jù)的元數(shù)據(jù)結(jié)構(gòu)。每個緩沖器與特定的事件字段相關(guān)聯(lián)并包括來自一個或多個事件的來自該字段的值。對于每個“感興趣字段”而言,元數(shù)據(jù)包括反映緩沖器中的所有事件上的該字段的值范圍的最小值和最大值。為每個緩沖器生成塊,并且該塊包括元數(shù)據(jù)結(jié)構(gòu)和緩沖器內(nèi)容的壓縮版本。在查詢事件數(shù)據(jù)時元數(shù)據(jù)結(jié)構(gòu)充當搜索索引。該日志記錄系統(tǒng)可以與安全信息/事件管理(SIEM)系統(tǒng)相結(jié)合地使用。
文檔編號G06F7/00GK102239472SQ200980144159
公開日2011年11月9日 申請日期2009年9月4日 優(yōu)先權(quán)日2008年9月5日
發(fā)明者于 B., F. 比德金 C., 唐 W., 黃 W., 周 Y. 申請人:Arc景象有限責任公司