本文會介紹以解析各種不同記錄檔而聞名的強大工具 Log
Parser,它不但可以解析一般的文字格式記錄檔,它也能同時連結到資料庫去處理查詢的功能,而本文還會介紹兩個免費且 GUI 的 Log
Parser 整合應用工具:Visual Log Parser 與 Log Parser Lizard。
在機房中與各大伺服器與網路為伍的 MIS
人員,除了整天要管理伺服器以及網路的各項狀態外,對於出問題的服務或是應用程式,基本上也需要能夠做初步的故障診斷與簡易的問題排除,早期的伺服器軟體
還沒有像 Windows Server 系列 GUI 管理工具時,要能夠找出問題可能發生的原因,大概就只有去找尋記錄檔(log
file)中伺服器的活動記錄,來搜尋問題可能發生的地方,狀態,錯誤碼,再綜合研判可能的因素,像是 Web
伺服器有時會出現網站無法連線或是存取被拒(401)、網頁消失(404)的情況,若應用程式本身是正常的話,就只能由伺服器來找原因了。
舉個例來說,在 IIS 記錄檔中,有一種 Win32 錯誤碼 64,會出現這個錯誤碼的情況是 IIS
行程在將執行結果回傳時,用戶端無法連線發生的,它的錯誤訊息為『指定的網路名稱無法使用』,其原因通常是被防火牆擋住了輸出(out
bound)的連線,但前端只會出現『無法連線伺服器』,若只依前端的訊息會沒辦法得知真正的問題在哪裡,所以這時候 IIS
的記錄檔就變得很重要,同時網管或系統管理人員也應該要盡可能記錄伺服器活動的參數(以 IIS 7.0
來說,預設的欄位已足夠基本分析需要),以利發生問題時的追踪調查。只是,像 IIS
記錄檔這樣的文字檔案,一般來說都會有數百行甚至數十萬行(若網站流量大),單純用記事本來看的話,基本上是很難快速的查出問題在哪,唯一可用的就只有『編輯\尋找』的功能,然後一行一行判斷而已:
點擊放大
若每種伺服器記錄檔都要這樣找,豈不浪費時間又不精準?因此才有 Log Parser 這個工具的產生,Log Parser 可以解析像
IIS log 這種文字式的記錄資料,並且允許系統管理員人使用 SQL 指令來查詢,有學過資料庫的讀者應該都知道 SQL
指令適合用在資料集合的查詢處理上,像是由資料集合中篩選出指定欄位中符合條件的資料,只要利用 WHERE 指令即可;若要排序,則用 ORDER
BY 就可以輕鬆做到,Log Parser 支援標準的 SQL 語法以及基本的彙總指令,像是 SUM/COUNT/AVG
等,可以用來做簡單的統計功能。
目前 Log Parser 2.2 版可支援 20 種不同的記錄檔來源,IIS 本身就有六種,而一般文字資料有七種,系統資訊類有四種,特殊資料三種(查詢來源類型由指令參數 i 設定),列表如下:
資料類型 |
檔案格式 |
IIS 記錄來源 |
IIS |
IIS 本身的基本記錄檔。 |
IISW3C |
IIS 輸出的 W3C 格式記錄檔(目前是 IIS 預設的記錄檔格式)。 |
BIN |
IIS 的集中化二進位記錄檔(Centralized Binary Logging)。 |
IISODBC |
IIS 的 ODBC 記錄檔。 |
HTTPERR |
由 HTTP.SYS(IIS 6.0 以後的版本才有)輸出的httperr.log。 |
URLSCAN |
由 URL scan 工具掃瞄輸出的記錄檔。 |
一般文字資料來源 |
CSV |
CSV(Comma Separated Values)格式文字檔。 |
TSV |
TSV(Tab Separated Values)格式文字檔。 |
XML |
XML 資料檔。 |
W3C |
W3C 格式記錄檔。 |
NCSA |
NCSA 格式記錄檔。 |
TEXTLINE |
剖析文字並傳回行。 |
TEXTWORD |
剖析文字並傳回單字。 |
系統資料來源 |
EVT |
Windows 事件檢視器。 |
FS |
檔案系統 |
REG |
登錄資料庫(Registry) |
ADS |
Active Directory Service |
特殊資料來源 |
NETMON |
網路監控程式(Network Monitor)的記錄檔。 |
ETW |
Event Tracing for Windows 的記錄檔。 |
COM |
利用 COM Plug-in 解析的自訂格式記錄檔。 |
剖析後的輸出,Log Parser 可以支援十一種:
輸出格式 |
說明 |
示例 |
W3C |
輸出 W3C 格式的記錄檔。 |
|
XML |
輸出 XML 格式的資料檔。 |
|
TPL |
輸出由使用者定義範本格式的記錄檔。 |
|
TSV |
輸出以 Tab 分隔的記錄檔。 |
|
SYSLOG |
輸出由 RFC 3164 規範所定義格式的記錄檔。 |
|
NAT |
輸出可讀式表格化欄位格式(readable tabulated column format)的記錄檔。 |
|
IIS |
輸出 IIS 記錄檔(非 W3C)格式的記錄檔。 |
|
SQL |
將記錄檔轉入資料庫中,可以用相關的參數指令設定目標伺服器,並且將資料直接輸入到目標伺服器的資料庫中,以利日後直接使用資料庫來分析。 |
DATAGRID |
將資料以資料方格(Data Grid)方式呈現,並且直接顯示在使用者介面中。 |
|
CSV |
將資料輸出到以逗號分隔格式的記錄檔中。 |
|
CHART |
將資料輸出成圖表,這是 Log Parser 最令人激賞的功能,但它需要使用者安裝 OWC 元件。 |
|
而 Log Parser 的用法也很簡單,它是一個命令列(command-line)的工具,在使用時至少要給定輸入格式、輸出格式以及查詢指令,例如:
[Command-line]
C:\>LogParser -i:EVT -o:NAT "SELECT * FROM System"
表示由事件檢視器中查詢所有系統記錄的資料,並且輸出到一個 NAT 格式的記錄檔中。又例如下列的指令:
[Command-line]
C:\>LogParser -i:FS -o:NAT "SELECT Name, Size, CreationTime FROM
C:\MyDirectory\*.* ORDER BY Size, CreationTime"
可以查出目前在 C:\MyDirectory 下的檔案名稱、檔案大小與建立日期,然後以大小與建立日期排序後輸出到 NAT 格式的記錄檔中。
由上面兩個範例可看的出來,Log Parser 要活用的關鍵是在對它的 SQL
指令的操控,在不同的輸入格式,有可能SQL會有些許的變化,尤其是欄位的不同,所以在使用 Log Parser
下指令時要注意這個部份。同時,Log Parser 因為不是正統的DBMS,它的 SQL
指令雖然可以使用,但是它是以模擬(emulate)的方式解析並執行,對 SQL-92 標準的支援度上當然不能拿 DBMS 和它比,它也沒有多數
DBMS
可以利用的內建使用者函數,而且也因為解析的是文字檔的關係,速度會比較慢一些,這是文字檔讀寫的限制,就筆者測試的感覺下來,它已經算是很快了。
Log Parser 2.2 可以在這裡找到:
http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en
Log Parser 雖然功能強大,但是命令列工具的先天限制就是-只能在 Command Line 中使用,對於不常使用
Command Line 工作的一般使用者(或初階 MIS)來說,要在 Command Line
中打一堆指令和參數對他們而言可能是很痛苦的,尤其是打了一堆字後它回報錯誤或參數不對時,很容易出現挫折感。所以有佛心的開發人員利用了 Log
Parser 開放的 COM API 撰寫了一個圖形化的使用者介面,讓大家可以利用 GUI 介面來操作 Log Parser,而且這個 GUI
工具還有語法檢查和文法標記(Syntax Highlight)的功能,讓大家能夠清楚 SQL 指令的各個部份。
Visual Log Parser 是由 jroland 與 mchouteau 兩位所發展的一個整合化的應用工具,它的介面就像是
Visual Studio 或 SQL Server Management Studio 類似的風格,是一種整合所有必要介面於一身的 GUI
工具。它是利用 SharpDevelop 這套 Open Source 的整合開發工具的核心函式庫為基礎打造出來的,不但具有與 Visual
Studio 類似的視窗風格與排版,同時它也具有文法標記這個開發人員與 DBA 經常看到且用到的功能,而且預設的 Visual Log
Parser 設定中,說明窗格會顯示在右邊,並會隨著所選的輸入格式有所變化:
點擊放大
圖:Visual Log Parser 使用者介面
點擊放大
圖:Visual Log Parser 輸入介面以及說明視窗
它的基本功能很類似 SQL Server Management Studio,若有操作過 SQL Server 的讀者對它應該會有很熟悉的感覺,它可以由外部檔案取得 SQL 指令(*.sql),也可以將查詢結果輸出到文字檔中,這些行為都和 SSMS 很像。
點擊放大
這個工具可以由 Visual Log Parser 在 Codeplex 上的官方網站 http://visuallogparser.codeplex.com/ 中下載,它的安裝也很簡單,它用的是 ClickOnce 的部署方式,使用者不需要介入太多動作即可安裝完成,而它需要的 Log Parser 2.2 元件也會由安裝程式自動偵測與安裝,而安裝完成時會自動開啟工具以讓使用者使用。
Log Parser Lizard 是由 Lizard Labs 所開發,將 Log Parser 的功能包裝成 GUI
介面的一個視覺化操作介面,與 Visual Log Parser 的基本功能大致相同,但它具有 Visual Log Parser
所沒有的功能:輸出圖表。而且它的使用者介面也是以整合環境為主,不過筆者覺得它比較像是 Outlook。
點擊放大
圖:Log Parser Lizard
這個工具可以在 Lizard Labs 的官方網站找到:http://www.lizard-labs.net/PageHtml.aspx?lng=2&PageId=18&PageListItemId=17,並且提供了一個安裝程式檔可供使用者下載安裝,此軟體為免費,且可以用在商業或非商業行為,而它也提供了付費支援的選項,在第一次執行 Log Parser Lizard 時,會出現下列畫面,若要使用免費版本,則按 OK 略過即可:
點擊放大
若讀者有購買授權的話,可以在這個畫面中輸入註冊碼以啟用關閉的功能。付費版本的 Log Parser Lizard 可以支援 PDF/XPS 查詢結果匯出以及視窗外觀的變化等等,但筆者認為免費版本的功能就已經十分充足(圖表功能在免費版本就有了)。
它的操作方式也十分簡單,它和 Visual Log Parser 的不同點之一,就是它有提供一些查詢的 SQL 指令範本,在窗格的左邊列舉適用不同資料來源的查詢指令範例,對於不熟悉 Log Parser 的 SQL 指令的使用者來說很容易的上手:
點擊放大
另一個與 Visual Log Parser 不同的地方是,它的查詢結果方格(Grid)具有樞紐查詢的能力,只要在功能表 View
中,將 Advanced Grid 啟用即可,操作方式就像在 Excel
中的樞紐分析表,只要將指定的欄位拖放到要做樞紐分析的欄位區,它就可以自動幫使用者依所選的欄位進行樞紐分析。
點擊放大
雖然 Log Parser Lizard 的功能比 Visual Log Parser 還要強一些,但它卻有個有點煩人的小問題,就是當使用者的 SQL 中有錯誤時,它都會先彈出 Visual C++ Debug Library Error 的對話盒:
此時請務必按『略過』,才會出現正確的訊息:
若按了中止或是重試時,就算會出現對話盒,程式還是會變得沒有回應,要強制由工作管理員將行程終止才可以。
Log Parser 不但是一個強而有力的記錄檔分析工具,它也是 MIS 在處理伺服器或應用程式不正常時的診斷好幫手,是每一位擔任
MIS 的人必須要學習的工具,而隨著 GUI 工具的出現讓記錄檔的解析變得更方便,因此 MIS 更要學會利用 Log
Parser,這樣不但可以有效的處理系統問題,也可以利用它來產出不同的系統報表(例如網站流量分析),作為系統效率的評估之用。