IIS日誌分析
默認情況下,IIS會產生日誌文件,不過,還是有些參數值得我們關註。 IIS的設置界面如下(本文以 IIS 8 的界面為例)。
在IIS管理器中,選擇某個網站,雙擊【日誌】圖標,請參考下圖:
將裏面的日誌文件拷貝出來分析。
日誌文件是txt格式,我們可以通過兩種方法處理它:直接復制在excel中;用log parser工具將txt文件導入到sql數據庫中。
本文以後者(因為可以通過查詢刷選做更好的分析)講述如何處理。
IIS日誌文件處理步驟:
1、安裝軟件log parser2.2。(專門解析IIS日誌)
2、在CMD中 進入到安裝目錄下,執行以下命令
logparser "SELECT * FROM C:\Users\yong-h\Desktop\log\u_ex18051010.log TO IISLog_table" -o:SQL -server:localhost -driver:"SQL Server" -database:hy -username:sa -password:1127 -createtable:ON
或者
logparser "SELECT * FROM ‘C:\Users\yong-h\Desktop\log\u_ex18051010.log‘ to WebLog" -i:IISW3C -o:SQL -oConnString:"Driver={SQL Server};server=localhost;database=hy;Integrated Security=true" -createtable:ON
3、在sql數據庫中將日期和時間合成一列
alter table [IISLog_table] add RequestTime datetime
update [IISLog_table] set RequestTime=dateadd(hh,8,convert(varchar(10),date,120) + ‘ ‘ + convert(varchar(13),time,114))
--DATEADD() 函數在日期中添加或減去指定的時間間隔。DATEADD(datepart,number,date)
--CONVERT() 函數可以用不同的格式顯示日期/時間數據。CONVERT(data_type(length),data_to_be_converted,style)
4、分析數據
--1、查找耗時操作
SELECT RequestTime,LogRow ,cIp as 客戶端ip,sIp as 服務器ip,sPort,csMethod,csUriStem,timeTaken,scStatus as 協議狀態 ,scWin32Status as Win32狀態,csUriQuery,scBytes as 發送的字節數 ,csBytes as 接收的字節數據,csUserAgent
where timeTaken>1000
GO
--2、查找協議狀態不為200(ok)的
SELECT RequestTime,LogRow ,cIp as 客戶端ip,sIp as 服務器ip,sPort,csMethod,csUriStem,
timeTaken,scStatus as 協議狀態 ,scWin32Status as Win32狀態,csUriQuery,scBytes as 發送的字節數 ,
csBytes as 接收的字節數據,csUserAgent
FROM [hy].[dbo].[IISLog_table]
where scStatus<>200
--統計協議狀態
select scStatus, count(*) AS count
from [IISLog_table] with(nolock)
group by scStatus
--3、統計Win32狀態(它記錄了在處理請求過程中,發生的系統級別錯誤,例如網絡傳輸錯誤。0:正常)
select scWin32Status, count(*) AS count
from [IISLog_table] with(nolock)
group by scWin32Status
--所有狀態碼都可以通過下面的cmd命令來獲取對應的解釋:
net helpmsg 64
其中
2 系統找不到指定的文件
64 客戶端連接已關閉(或者斷開)。。換句話說:可以從scwin32status=64的統計結果看出網站的響應速度是否能讓用戶滿意。
121 傳輸超時
1236 本地網絡中斷
關於scwin32status與scStatus,我還想補充說明一下:它們沒有關聯。
比如請求這個地址:http://www.abc.com/test.aspx
有可能scStatus=200,但scwin32status=64,此時表示ASP.NET已成功處理請求,但是IIS在發送響應結果時,客戶端的連接斷開了。
另一種情況是:scStatus=500,但scwin32status=0,此時表示,在處理請求過程中發生了未捕獲異常,但異常結果成功發送給客戶端。
參考:IIS日誌-網站運維的好幫手
IIS日誌分析