eglid 发表于 2015-8-13 09:34:06

利用LogParser把IIS日志导入数据库中

  一、概述
  目前很多网站都用IIS日志来做统计,最近在公司把这个统计系统由一个物理机升级到三台虚拟机上,建立计划任务时,遇到一些问题,记录下来过程,供后来人参考。
  实现原理:
  新建一个站点tj.elong.com,这个站点只有一张1像素的图片tj.gif,当需要统计数据时,可以访问这个图片,把需要统计的数据当作参数(如:http://tj.elong.com/tj.gif?TableName=TjTest&OrderId=123456 ),每次访问都会记录在IIS日志中,编写一个vbs利用LogParser小工具把IIS日志导入到数据库中,然后再根据需要对数据进行分析处理。下面介绍的是Win7系统下,在本地建立这一套机制。
  二、IIS设置
  1、IIS设置
  A、 新建tj.elong.com站点,此站点包含一张1像素的图片tj.gif。
  B、 双击“功能视图”中的 “日志”项,设置日志路径。

  2、查看日志信息,确认日志记录正常
  A、设置hosts把tj.elong.com指向127.0.0.1
  B、访问http://tj.elong.com/tj.gif,并查看IIS日志信息,确认站点OK
  三、安装LogParser
  可以从http://download.iyunv.com/detail/fuhongxue2011/3729508下载,双击安装。
  四、创建数据库表并编写SQL
  1、创建数据库表
  在本地建立数据库Log_IIS,在数据库中建立表Online_tj,创建表的SQL如下:


View Code


USE
GO
/****** Object:Table .    Script Date: 10/28/2011 17:08:28 ******/
IFEXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'.') AND type in (N'U'))
DROP TABLE .
GO
USE
GO
/****** Object:Table .    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 .(
    IDENTITY(1,1) NOT NULL,
    NULL,
    (255) NULL,
    (255) NULL,
    (255) NULL,
    (1024) NULL,
    NULL,
    (255) NULL,
    (255) NULL,
    (255) NULL,
    NULL,
    NULL,
    NULL,
    NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
    ASC
)WITH (PAD_INDEX= OFF, STATISTICS_NORECOMPUTE= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS= ON) ON
) ON
GO
SET ANSI_PADDING OFF
GO

USE
/****** Object:Index     Script Date: 10/28/2011 17:08:29 ******/
CREATE NONCLUSTERED INDEX ON .
(
    ASC,
    ASC
)
INCLUDE ( ,
,
,
) 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
GO

USE
/****** Object:Index     Script Date: 10/28/2011 17:08:29 ******/
CREATE NONCLUSTERED INDEX ON .
(
    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
GO
  2、编写logparser所用的插入数据的SQL
  此SQL功能:从日志中选出数据,插入数据库表中


View Code


/*
    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:\tj\IISLog\W3SVC10\%log%.log
WHERE TO_LOCALTIME(Time) BETWEEN TO_TIMESTAMP('%start%','h:mm:ss') AND TO_TIMESTAMP('%end%','h:mm:ss')
  五、编写VBS
  1、编写tj.vbs
  功能:调用并执行上面写的Sql语句


View Code


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 = "LogParserfile:E:\tj\tj_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、测试VBS
  测试这个vbs时,遇到了一个不大不小的问题,如果使用开始中LogParser 2.2运行vbs,则数据可以写入数据库,如果直接使用cmd运行,则数据不能写入数据库。
  解决办法有两个:
  A、 把cmd的路径指向c:\Program Files\Log Parser 2.2再运行vbs,如图:

  B、 在环境变量中加入c:\Program Files\Log Parser 2.2即可
  右击我的电脑 - - 属性 - - 更改设置 - - 高级 - - 环境变量 - - 系统变量中的“Path” - - 编辑 - - 在最后加上c:\Program Files\Log Parser 2.2如下图

  六、建立计划任务
  控制面板 - - 系统和安全 - - 管理工具最后一项“计划任务” - - 创建基本任务 - - 创建好了双击刚刚建立的计划任务,在触发器选项卡中选中任务,然后点击下面的编辑,可以设置为每5分钟运行一次。操作选项卡中,选中任务,点击编辑,如果电脑的环境变量中设置了c:\Program Files\Log Parser 2.2路径的话,启动程序中“起始于”就不用填了,如果没有设置的话,起始于要填上c:\Program Files\Log Parser 2.2。如下图:

  Windows 2003系统和Win7系统大同小异,部分功能没有特别细致的介绍,有什么问题欢迎拍砖。
页: [1]
查看完整版本: 利用LogParser把IIS日志导入数据库中