一、概述
目前很多網(wǎng)站都用IIS日志來做統(tǒng)計(jì),最近在公司把這個(gè)統(tǒng)計(jì)系統(tǒng)由一個(gè)物理機(jī)升級(jí)到三臺(tái)虛擬機(jī)上,建立計(jì)劃任務(wù)時(shí),遇到一些問題,記錄下來過程,供后來人參考。
實(shí)現(xiàn)原理:
新建一個(gè)站點(diǎn)tj.elong.com,這個(gè)站點(diǎn)只有一張1像素的圖片tj.gif,當(dāng)需要統(tǒng)計(jì)數(shù)據(jù)時(shí),可以訪問這個(gè)圖片,把需要統(tǒng)計(jì)的數(shù)據(jù)當(dāng)作參數(shù)(如:http://tj.elong.com/tj.gif?TableName=TjTest&OrderId=123456 ),每次訪問都會(huì)記錄在IIS日志中,編寫一個(gè)vbs利用LogParser小工具把IIS日志導(dǎo)入到數(shù)據(jù)庫中,然后再根據(jù)需要對(duì)數(shù)據(jù)進(jìn)行分析處理。下面介紹的是Win7系統(tǒng)下,在本地建立這一套機(jī)制。
二、IIS設(shè)置
1、 IIS設(shè)置
A、 新建tj.elong.com站點(diǎn),此站點(diǎn)包含一張1像素的圖片tj.gif。
B、 雙擊“功能視圖”中的 “日志”項(xiàng),設(shè)置日志路徑。
2、 查看日志信息,確認(rèn)日志記錄正常
A、設(shè)置hosts把tj.elong.com指向127.0.0.1
B、訪問http://tj.elong.com/tj.gif,并查看IIS日志信息,確認(rèn)站點(diǎn)OK
三、安裝LogParser
可以從這里:http://www.wfuwu.com/down/html/logparser.html下載,雙擊安裝。
四、創(chuàng)建數(shù)據(jù)庫表并編寫SQL
1、 創(chuàng)建數(shù)據(jù)庫表
在本地建立數(shù)據(jù)庫Log_IIS,在數(shù)據(jù)庫中建立表Online_tj,創(chuàng)建表的SQL如下:
USE [Log_IIS]
GO
/****** Object: Table [dbo].[Online_tj] Script Date: 10/28/2011 17:08:28 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Online_tj]') AND type in (N'U'))
DROP TABLE [dbo].[Online_tj]
GO
USE [Log_IIS]
GO
/****** Object: Table [dbo].[Online_tj] Script Date: 10/28/2011 17:08:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Online_tj](
[ID] [int] IDENTITY(1,1) NOT NULL,
[logtime] [datetime] NULL,
[s_ip] [varchar](255) NULL,
[cs_method] [varchar](255) NULL,
[cs_uri_stem] [varchar](255) NULL,
[cs_uri_query] [varchar](1024) NULL,
[s_port] [int] NULL,
[cs_username] [varchar](255) NULL,
[c_ip] [varchar](255) NULL,
[cs_User_Agent] [varchar](255) NULL,
[sc_status] [int] NULL,
[sc_substatus] [int] NULL,
[sc_win32_status] [int] NULL,
[time_taken] [int] NULL,
CONSTRAINT [PK__Online_tj__164452B1] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
USE [Log_IIS]
/****** Object: Index [IX_Online_tj_CI_LCCC] Script Date: 10/28/2011 17:08:29 ******/
CREATE NONCLUSTERED INDEX [IX_Online_tj_CI_LCCC] ON [dbo].[Online_tj]
(
[cs_uri_stem] ASC,
[ID] ASC
)
INCLUDE ( [logtime],
[c_ip],
[cs_uri_query],
[cs_User_Agent]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
USE [Log_IIS]
/****** Object: Index [ix_Online_tj_logtime] Script Date: 10/28/2011 17:08:29 ******/
CREATE NONCLUSTERED INDEX [ix_Online_tj_logtime] ON [dbo].[Online_tj]
(
[logtime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
2、 編寫logparser所用的插入數(shù)據(jù)的SQL
此SQL功能:從日志中選出數(shù)據(jù),插入數(shù)據(jù)庫表中
/*
logparser file:tj_insert.sql?start=starttime+end=endtime+log=logfilename
input parameter:
start - starttime example:1:00:00 or 18:00:00
end - endtime example:1:09:59 or 18:59:59
log - logfilename example:ex10111601 or ex10111618
*/
Select TO_TIMESTAMP(date,time), TO_TIMESTAMP(date,time), s-ip, cs-method, cs-uri-stem, cs-uri-query, s-port, cs-username, c-ip,
cs(User-Agent), sc-status, sc-substatus, sc-win32-status, time-taken
INTO
Log_IIS.dbo.Online_tj
FROM
E: jIISLogW3SVC10\%log%.log
WHERE TO_LOCALTIME(Time) BETWEEN TO_TIMESTAMP('%start%','h:mm:ss') AND TO_TIMESTAMP('%end%','h:mm:ss')
五、編寫VBS
1、 編寫tj.vbs
功能:調(diào)用并執(zhí)行上面寫的Sql語句
d = DateAdd("n", -6, Now())
strDate = Right(""&(100+Year(d)),2) & Right(""&(100+Month(d)),2) & Right(""&(100+Day(d)),2)
strHr = Hour(time())
strMin = Minute(time())
starttime = timeserial(strHr, strMin - 6, 0)
endtime = timeserial(strHr, strMin - 2, 59)
strHr = Right(""&(100+Hour(starttime)),2)
logfilename = "u_ex" & strDate
Set WshShell = Wscript.CreateObject("Wscript.Shell")
Wscript.Echo starttime &":"& endtime &":"&logfilename
strCMD = "LogParser file:E: j j_insert.sql?start=" & starttime &_
"+end=" & endtime & "+log=" & logfilename &_
" -iw:ON -i:iisw3c -o:sql -oConnString:""Driver={SQL Server};Server=(local);db=Log_IIS;uid=sa;pwd=123"""
Wscript.Echo strCMD
WshShell.run strCMD, 1, false
2、 測(cè)試VBS
測(cè)試這個(gè)vbs時(shí),遇到了一個(gè)不大不小的問題,如果使用開始中LogParser 2.2運(yùn)行vbs,則數(shù)據(jù)可以寫入數(shù)據(jù)庫,如果直接使用cmd運(yùn)行,則數(shù)據(jù)不能寫入數(shù)據(jù)庫。
解決辦法有兩個(gè):
A、 把cmd的路徑指向c:Program FilesLog Parser 2.2再運(yùn)行vbs,如圖:
B、 在環(huán)境變量中加入c:Program FilesLog Parser 2.2即可
右擊我的電腦 - - 屬性 - - 更改設(shè)置 - - 高級(jí) - - 環(huán)境變量 - - 系統(tǒng)變量中的“Path” - - 編輯 - - 在最后加上c:Program FilesLog Parser 2.2如下圖
六、建立計(jì)劃任務(wù)
控制面板 - - 系統(tǒng)和安全 - - 管理工具最后一項(xiàng)“計(jì)劃任務(wù)” - - 創(chuàng)建基本任務(wù) - - 創(chuàng)建好了雙擊剛剛建立的計(jì)劃任務(wù),在觸發(fā)器選項(xiàng)卡中選中任務(wù),然后點(diǎn)擊下面的編輯,可以設(shè)置為每5分鐘運(yùn)行一次。操作選項(xiàng)卡中,選中任務(wù),點(diǎn)擊編輯,如果電腦的環(huán)境變量中設(shè)置了c:Program FilesLog Parser 2.2路徑的話,啟動(dòng)程序中“起始于”就不用填了,如果沒有設(shè)置的話,起始于要填上c:Program FilesLog Parser 2.2。如下圖:
Windows 2003系統(tǒng)和Win7系統(tǒng)大同小異,部分功能沒有特別細(xì)致的介紹,有什么問題歡迎拍磚。
(文章來源:http://fuhongxue2011.cnblogs.com/ 作者:傅紅雪2011)