The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹好用工具:Log Parser (分析多種 Log 格式的超強工具)

Log Parser 大概是我兩、三年前得知的一套工具,因為當初我們正在進行一個專案的開發,該專案所收集的 Log 量十分龐大,每分鐘最大產出量為 4 萬筆紀錄,當我正一籌莫展的時候,我的一個好友小昌介紹給我這套鮮為人知的 Log Parser (其實是我孤陋寡聞),我可說是目瞪口呆,除了 Log Parser 的分析效率極高之外(印象中好像每分鐘可以分析完好幾百 MB 的純文字紀錄檔),還提供一組類似 SQL 語法的查詢機制,可以非常彈性的讓你選取 Log 檔中的欄位(SELECT)、群組(GROUPING)或篩選(WHERE)資料,就像是在使用資料庫一樣。

目前最新的版本為 Log Parser 2.2,下載後從「程式集」中可以找到 Log Parser 2.2 的蹤跡,如下圖:

Log Parser 2.2 

點選 Log Parser 2.2 之後,就會開啟一個「命令提示字元」的視窗,而要學會 Log Parser 要如何操作,最快的方式就是先看範例啦,各位可以打以下指令列出許多 Log Parser 的指令用法範例,相信有經驗的人光是看範例就有「感覺」要怎麼用了:

logparser -h EXAMPLE |more

我舉幾個例子說明好了:

1. 之前我寫BlogEngine 1.3.0.0 出現嚴重安全性漏洞文章的時候其實就有提供一個簡單的範例了,以下這行指令就是分析目前工作目錄下所有 *.log 檔案為資料來源(FROM),並選取出該檔案中的 date, time, cs-uri-stem, cs-uri-query, c-ip, cs(User-Agent) 這些欄位,並透過 -i 參數來指定「輸入資料的格式」為 W3C 格式(詳細的格式定義在 Log Parser 2.2 Documentation 中都有詳細說明),-o 是指令輸出的格式為 CSV 格式。

LogParser "SELECT date, time, cs-uri-stem, cs-uri-query, c-ip, cs(User-Agent) FROM *.log 
 WHERE cs-uri-stem like '%js.axd%' and cs-uri-query like '%users.xml%'" -i:W3C -o:CSV

2. 找出 C:\*.* 中所有檔案(含子目錄),並列出檔案體積最大的前 10 名。

LogParser "SELECT TOP 10 Path,Name,Size FROM C:\*.* ORDER BY Size DESC" -i:FS

3. 以上面的例子來說,甚至於 Log Parser 還可以將結果輸出成「圖表」格式,我將以第2個例子改成以下這樣,就可以輸出一個名為 Pie.gif 且大小為 590x400 的 Column3D 圖表!

LogParser "SELECT TOP 10 Name,Size INTO Pie.gif FROM C:\Going32\*.* ORDER BY Size DESC" 
 -i:FS -o:CHART -chartType:Column3D -groupSize:590x400

產生後的圖形長這樣:

Log Parser 輸出的 Column3D 圖表範例

夠強吧!

特別注意:若要讓 Log Parser 能夠輸出圖表,必須先安裝 Office XP Tool: Web Components 才能用。

除此之外,我覺得初學者比較容易遇到的問題是「當我在下 SELECT 的時候,我怎麼知道我的 FROM 來源資料有哪些可用的欄位呢?」,其實這問題很容易解決,你只要先下一次  SELECT TOP 1 * FROM xxxx 就可以先取得所有的欄位了,你可以再依據你查到的欄位改寫你的 SQL 查詢語法即可。如下範例:

LogParser "SELECT TOP 1 * FROM C:\Going32\*.* ORDER BY Size DESC" -i:FS > a.txt

相信連初學者也會有概念了,剩下的各位就認真看 Log Parser 2.2 Documentation 文件吧。

相關連結