Log Parser 工具在手 紀錄我有 | IIS W3C Logs 分析指南
2022-01-11
說明如何使用 Log Parser 進行 IIS Logs 的分析,讓生活變得容易 (Make your life easier)。
說明
Installation & Usage
前往 Microsoft 進行下載,下載後不斷下一步就可以安裝完成。
Log Parser 為 CLI Tool,必須先切換到應用程式的路徑使用。
cd "C:\Program Files (x86)\Log Parser 2.2"
Example Codes
不要問,問就是直接執行的 Quick Script 😃
cd "C:\Program Files (x86)\Log Parser 2.2"
logparser -i:IISW3C -rtp:-1
"SELECT date,time,cs-uri-stem,cs-method,cs-username,c-ip,sc-status
FROM c:\users\*.log
WHERE cs-uri-stem like '%ApplicationName%'"
LogParser.exe -i:IISW3C "SELECT * into C:\Temp\IISLog.csv FROM C:\Temp\*.log" -o:csv
LogParser.exe -i:IISW3C "SELECT * into IISLogTable FROM C:\Temp\*.log"
-o:SQL -server:servrName -database:dbName
-CreateTable:On -transactionRowCount:-1
使用 transactionRowCount 可以避免每筆資料寫入都建立一個 TCP 連線,而是使用單一 TCP 批次將資料寫入資料庫,對於寫入效能的改善上有所幫助。
如果要將資料匯出到 SQL Server 上面,Log Parser 的表現不盡理想,尤其是和 Bulk Insert 以及 BCP 相比,但簡易的使用情境可以使用,如果是複雜的 IIS Logs To SQL Server 則應該另行設計流程,結合使用 Bulk Insert 或者是 BCP。
來些查詢資料的使用範例 🍨
根據 sc-win32-status
的狀態碼處理發生問題的 IIS Reuqests。
SELECT Distinct sc-status, sc-win32-status
FROM C:\Temp\*.log
WHERE sc-win32-status <> 0
LogParser.exe -i:IISW3C -rtp:-1 "SELECT Distinct sc-status, sc-win32-status FROM C:\Temp\*.log WHERE sc-win32-status <> 0"
使用 -rtp:-1
參數,可以避免預設每 10 筆按任意按鍵進行換頁的功能,讓資料可以一次全部顯示,非常方便。
IIS Logs
IIS Logs Default Column
Column Name | Meaning |
---|---|
date | 日期 UTC |
time | 時間 UTC |
s-ip | 伺服器 IP |
cs-method | HTTP Method (GET, POST) |
cs-uri-stem | URI 相對路徑 |
cs-uri-query | URI 參數 |
s-port | 伺服器 Port |
cs-username | 使用者名稱 |
c-ip | 使用者 IP |
cs(User-Agent) | 瀏覽器、作業系統資訊 |
cs(Referer) | 來源位址 |
sc-status | Http Status |
sc-substatus | |
sc-win32-status | 顯示各種錯誤狀態的代碼,0 表示為正常 |
time-taken | Byte 傳送時間,單位為 ms,1000 為 1 秒 |
Log Parser Cretae IIS Log Table
下列為使用 Log Parser 匯出到 SQL Server 時會自動建立 Table 的 Schema。
CREATE TABLE [dbo].[IISLog](
[LogFilename] [varchar](255) NULL,
[LogRow] [int] NULL,
[date] [datetime] NULL,
[time] [datetime] NULL,
[cIp] [varchar](255) NULL,
[csUsername] [varchar](255) NULL,
[sSitename] [varchar](255) NULL,
[sComputername] [varchar](255) NULL,
[sIp] [varchar](255) NULL,
[sPort] [int] NULL,
[csMethod] [varchar](255) NULL,
[csUriStem] [varchar](255) NULL,
[csUriQuery] [varchar](255) NULL,
[scStatus] [int] NULL,
[scSubstatus] [int] NULL,
[scWin32Status] [int] NULL,
[scBytes] [int] NULL,
[csBytes] [int] NULL,
[timeTaken] [int] NULL,
[csVersion] [varchar](255) NULL,
[csHost] [varchar](255) NULL,
[csUserAgent] [varchar](255) NULL,
[csCookie] [varchar](255) NULL,
[csReferer] [varchar](255) NULL,
[sEvent] [varchar](255) NULL,
[sProcessType] [varchar](255) NULL,
[sUserTime] [real] NULL,
[sKernelTime] [real] NULL,
[sPageFaults] [int] NULL,
[sTotalProcs] [int] NULL,
[sActiveProcs] [int] NULL,
[sStoppedProcs] [int] NULL
) ON [PRIMARY]
GO
小結
Log Parser 不僅可以應用於 IIS Logs 上,對於 Text file 以及其他類型的 Log 處理一樣拿手,不需要自己 DRY 爬檔案,使用 Log Parser 進行探索即可。
愛藏使用 Log Parser Script
確認 IIS Logs Http Status 分布情形
LogParser.exe -i:IISW3C -rtp:-1 "SELECT sc-status, count(*) FROM C:\Temp\*.log group by sc-status"
確認前 100 筆,最費時的查詢
LogParser.exe -i:IISW3C -rtp:-1 "SELECT TOP 100 c-ip, date, time, time-taken, sc-status FROM C:\Temp\*.log ORDER BY time-taken DESC"
確認前 100 筆連線次數最多的 IP
LogParser.exe -i:IISW3C -rtp:-1 "SELECT TOP 100 c-ip, count(*) FROM C:\Temp\*.log GROUP BY c-ip ORDER BY count(*) DESC"
參考資料
LogParser Performance Inserting into SQL Server
使用 Log Parser 將 IIS LOG 轉入 SQL 2005 Express
Log Parser Rocks! More than 50 Examples!