Log Parser 工具在手 紀錄我有 | IIS W3C Logs 分析指南


  1. 說明
    1. Installation & Usage
    2. Example Codes
  2. IIS Logs
    1. IIS Logs Default Column
    2. Log Parser Cretae IIS Log Table
    3. 小結
  3. 愛藏使用 Log Parser Script
  4. 參考資料
  5. 相關連結

說明如何使用 Log Parser 進行 IIS Logs 的分析,讓生活變得容易 (Make your life easier)。

logo

說明

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 '%EmergencyReport%'"

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 秒

Win32 Status Error Code

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!

相關連結

使用 SQL Server 匯入 IIS Logs 進行分析

IIS 筆記整理

IIS 網頁伺服器的安全設定 (IIS Security Configuration)