天天看點

《日志管理與分析權威指南》一2.2.2 日志文法

本節書摘來華章計算機《日志管理與分析權威指南》一書中的第2章 ,第2.2.2節,(美) anton a. chuvakin kevin j. schmidt christopher phillips 著 姚 軍 簡于涵 劉 晖 等譯更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

任何格式的日志檔案都具有文法,日志文法在概念上與語言(如英語)文法相似。人類語言文法中的句子通常包含一個主語、一個謂語、有時還包含一個表語,當然還有補語和定語。句子的文法涵蓋句子成員之間的關系和他們的含義。需要注意的是,文法并不涉及消息的内容。換句話說,文法處理的是如何構造我們所要表述的内容,而不是我們使用的具體詞語。

那麼,在日志消息的環境下文法又有什麼意義呢?當然,每條日志消息都有表征它的結構。一些類型的日志消息自身具有人類語言的部分文法,日志消息每部分由各種類型的資訊模式組成。基于規則,可以定義一組通用的日志字段。而正是由于其必要性,故應存在于每條日志條目中。例如,常見的一組字段如下:

1)日期/時間(理想的情況下應包含時區)

2)日志條目的類型

3)産生該條目的系統

4)産生該條目的應用程式或元件

5)成功與失敗的訓示

6)日志消息的嚴重性、優先級或重要性(通常存在于所有syslog消息)

7)和該日志相關的任何使用者活動,也可記錄使用者名

網絡裝置制造商通常在其日志中遵循上述結構,但是,缺乏某些細節的例外情況也很多。

日志的句子中有哪些内容?讓我們試着對syslog的單行記錄做次“文法分析”。作為最靈活(也最混亂)的日志格式的例子,我們将使用syslog的一條日志消息。

《日志管理與分析權威指南》一2.2.2 日志文法

日志消息的文法有什麼意義?日志文法對于任何一種日志資料的自動分析(本書讨論的主題)都非常重要。我們需要按照文法将日志分解成各個組成部分,才能從日志資料中得出明智的結論。

一些日志分析相關的軟體産品(商用和開源)已經開發了“消息模式”(message schema)來确定各種日志類型的文法。這種模式被設計成可以滿足從各種裝置、系統、應用程式和其他來源日志檔案産生的任何消息。

對讀者來說,大部分上面的日志消息例子顯然都适合于這種模式。例如如下的dragon nids消息:

《日志管理與分析權威指南》一2.2.2 日志文法

上例很容易融入表2.1所示的通用模式。這條消息表明,伺服器10.1.1.3遭到從10.208.231.102發起的iis web伺服器攻擊(可能是由黑客或蠕蟲病毒等惡意軟體發起的)。此攻擊與internet information services(iis,一個标準的windows web服務)的unicolde解碼漏洞相關。

《日志管理與分析權威指南》一2.2.2 日志文法
《日志管理與分析權威指南》一2.2.2 日志文法

注意,在收集這些消息時還添加了一些資料(由日志分析解決方案提供)。

注意,日志分析系統添加了event和event_type以及變量名稱(ndns,netbios,以及其他),以完成dragon入侵檢測系統所描繪的情景。

來自“不尋常應用程式”(盡管我們不确定是否曾經見過任何“正常”的應用程式日志)等特殊日志來源的資料如何處理呢?這種情況下,人們可能會使用通用的“自定義”字段存儲這類資料。雖然這樣會使日志結構看上去很混亂,但是很遺憾,目前日志分析的特性就是如此。

總的來說,在做任何一種日志分析之前,對日志檔案文法有一定了解都是至關重要的。有些人可以在自己頭腦中執行這樣的分析,但這并不影響此方法的價值,隻是說明這樣的分析可能很簡單(也凸顯了人類對機器有一定的優勢)。大多數情況下,自動化日志分析系統需要了解日志文法,這種了解通常被編碼成某種模闆。

總體上,各種各樣的系統和裝置供應商會采用少數特定日志記錄類型,并結合幾種常見文法(在前一小節中定義)。例如,一些安全日志被記錄為xml格式,以便進行更簡單、資訊更豐富的內建。很多營運日志通過syslog記錄,采用非結構化文本或半結構化消息。與此相似,許多調試日志采用syslog甚至臨時文本檔案。而高性能日志記錄常常采用二進制和專有格式。

常用裝置日志記錄選項在表2.2進行了總結。

《日志管理與分析權威指南》一2.2.2 日志文法

除了這些知名的日志記錄方法之外,少數網絡裝置還會将日志記錄為逗号分隔(csv)或elf格式(前文已經提到)。當然這些情況相對較少出現。