關鍵字:IISLog、Logparser2.2、SQL
網站會有自動記錄IISLog,文件一般放在 C:\WINDOWS\system32\Logfiles\W3SVC1,利用Logparser將.txt檔上傳到DB中供分析。
一、SQL如下:
這裡有四個參數可以自己手動修改:
@sys:系統名稱,為空表示所有系統。
@session:網頁生命週期,默認為30分鐘,比如某IP第一次登陸為6:00,則6:00~6:30內此IP所有操作都算作一個人數,不再做重複計算。距6:30最近的一次如7:40再次登陸,則以7:40再次為標準,7:40~8:10內的登陸也只算作一個人數,以此類推下去……Session的單位為分鐘,30表示30分鐘這樣。
@startdate:選擇查詢某個範圍的記錄
@enddate:同上
代码
-- 根據IISLog查看使用人數
-- 用遊標遍歷,(數據量越大越明顯)
-- 查詢何系統,空表示全選
declare @sys nvarchar(20)
set @sys='YourWebName'
-- Session週期
declare @session int
set @session=30
-- 查詢某個範圍的記錄
declare @startdate datetime
declare @enddate datetime
set @startdate='2010-05-01'
set @enddate=getdate()
declare c cursor local for select cIp,[date]+' '+[time] from IISLog where date between @startdate and @enddate and csUriStem like '%'+@sys+'%' order by cIp,[date]
open c;
declare @tab table (cIp nvarchar(20),cnt int);
declare @cnt int;
set @cnt=1;
declare @base_ip nvarchar(20), @base_date datetime;
fetch next from c into @base_ip,@base_date;
declare @ip nvarchar(20), @date datetime;
while 1=1
begin
fetch next from c into @ip,@date;
if @@FETCH_STATUS<>0
begin
insert into @tab values(@base_ip,@cnt);
break;
end
if @ip <> @base_ip
begin
insert into @tab values(@base_ip,@cnt);
select @base_ip=@ip, @base_date=@date, @cnt=1;
end
else if DATEDIFF(MI,@base_date,@date)>@session
begin
select @base_date=@date, @cnt=@cnt+1;
end
end
close c;
deallocate c;
-- Detail
select * from @tab;
-- 合計
select sum(cnt) as Amount from @tab;
二、LogParser如下:
如果將LogParser.exe放在和IISLog同一目錄下,可用下面這段。
logparser "select logfilename,logrow,to_string(date,'yyyy-MM-dd') as date,to_string(time,'hh:mm:ss') as time,c-ip,cs-username,s-sitename,s-computername,s-ip,s-port,cs-method,cs-uri-stem,cs-uri-query,sc-status,sc-substatus,sc-win32-status,sc-bytes,cs-bytes,time-taken,cs-version,cs-host,cs(user-agent),cs(cookie),cs(referer),s-event,s-process-type,s-user-time,s-kernel-time,s-page-faults,s-total-procs,s-active-procs,s-stopped-procs into IISLog from ex*.log where to_lowercase(extract_extension(cs-uri-stem)) in ('aspx';'asp';'html') and sc-status<>404" -i:IISW3C -o:SQL -database:IISLog -iCheckpoint:mycheckpoint.lpc
如果不在同一目錄下,可用這段:
"C:\Program Files\Log Parser 2.2\LogParser.exe " "SELECT TO_LOCALTIME(TO_TIMESTAMP([date], [time])), [s-sitename], [s-computername], [s-ip], [cs-method], [cs-uri-stem], [cs-uri-query], [s-port], [cs-username], [c-ip], [cs-version], [cs(User-Agent)], [cs(Cookie)], [cs(Referer)], [cs-host], [sc-status], [sc-substatus], [sc-win32-status], [sc-bytes], [cs-bytes], [time-taken] INTO IISLog FROM C:\WINDOWS\system32\LogFiles\W3SVC1\ex*.log WHERE TO_LOWERCASE (EXTRACT_EXTENSION(cs-uri-stem)) NOT IN ('gif';'jpg';'png';'bmp';'ico';'axd')" -o:SQL -server:(local) -database:IISLog -driver:"SQL Server" -username:sa -password:yourpassword-createTable:OFF

浙公网安备 33010602011771号