前言

因應近期工作需求,必須對 IIS Log 與 Window Event 進行解析,了解並評估目前伺服器效能與問題排除。面對複雜與龐大的系統,所產生的 Log 也相當驚人,透過人眼逐一檢視或一般搜尋功能,根本無法快速彙整資料與發現問題。最近開始接觸 Log Parser/Log Parser Studio 這些工具,在使用過程中順便紀錄常用的語法,提供自己未來使用或有興趣的朋友參考。



介紹

Log Parser

logparser 是一個非常早期但相當實用命令列執行程式,最早期是由微軟員工Gabriele Giuseppini撰寫。他能夠透過 SQL 指令查詢多種格式日誌,如 xml、csv、Windows 事件紀錄、Windows 檔案系統、IIS 日誌...等,並可以自行定義格式進行輸出資料與圖表,功能強大。目前版本為 2.2 版,您可以在 Log Parser 2.2 下載。

安裝完成後,你可以直接執行 log parser,或者切換目錄到下列資料夾,即可開始透過指令進行查詢工作


Log Parser Studio

Log parser 圖形化使用者戶介面 (GUI) 是 Log Parser Studio。您可以透過簡易直覺的操作快速的查詢、測試與取得您要的結果。 您可以在  Log Parser Studio 下載。
Log Parser Studio 操作介面

Log Parser Studio 操作介面


常用語法

因為工作需求,需要快速檢視 IIS 狀況,或者建立 Monitor Dashboard 進行觀察,需要透過 log parser 彙整資料,這裡彙整一些常用語法(過去網路上彙整的),提供給有需要的朋友參考:

找出每一個小時 Request 數量
SELECT  
    QUANTIZE(TO_LOCALTIME(TO_TIMESTAMP(date, time)), 3600) AS Hour,  
    COUNT(*) AS Hits  
FROM c:\inetpub\logs\LogFiles\W3SVC1\*  
WHERE date>'2019-05-01' and date<'2019-05-02'  
Group By Hour

找出所有 Status 數量
SELECT
    STRCAT(TO_STRING(sc-status),  
    STRCAT('.', TO_STRING(sc-substatus))) As Status,  
    COUNT(*) AS Hits  
FROM c:\inetpub\logs\LogFiles\W3SVC1\*  
GROUP BY Status  
ORDER BY Status ASC


列出 Win32 status
  SELECT sc-win32-status As Win32-Status,      
         WIN32_ERROR_DESCRIPTION(sc-win32-status) as Description,      
         COUNT(*) AS Hits  FROM c:\inetpub\logs\LogFiles\W3SVC1\*  
   WHERE Win32-Status<>0  
GROUP BY Win32-Status  
ORDER BY Win32-Status ASC


列出前 30 名 Url 呼叫次數
  SELECT TOP 30     
         cs-uri-stem as Url,      
         COUNT(*) As Hits  
    FROM c:\inetpub\logs\LogFiles\W3SVC1\*  
GROUP BY cs-uri-stem  ORDER By Hits DESC


列出花費時間最久前 30 的項目
  SELECT TOP 30      
         cs-uri-stem as URL,      
         MAX(time-taken) As Max,      
         MIN(time-taken) As Min,      
         Avg(time-taken) As Average  
    FROM c:\inetpub\logs\LogFiles\W3SVC1\*  
GROUP BY URL  
ORDER BY Average DESC

參考資料

1. Log Parser - Wiki
2. Analyze your IIS Log Files – Favorite Log Parser Queries - MSDN