设为首页 收藏本站
查看: 1344|回复: 0

[经验分享] 利用LogParser把IIS日志导入数据库中

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-13 09:34:06 | 显示全部楼层 |阅读模式
  一、概述
  目前很多网站都用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、 双击“功能视图”中的 “日志”项,设置日志路径。
DSC0000.jpg
  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如下:


DSC0001.gif DSC0002.gif View Code


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所用的插入数据的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 = "LogParser  file: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,如图:
DSC0003.jpg
  B、 在环境变量中加入c:\Program Files\Log Parser 2.2即可
  右击我的电脑 - - 属性 - - 更改设置 - - 高级 - - 环境变量 - - 系统变量中的“Path” - - 编辑 - - 在最后加上c:\Program Files\Log Parser 2.2如下图
DSC0004.jpg
  六、建立计划任务
  控制面板 - - 系统和安全 - - 管理工具最后一项“计划任务” - - 创建基本任务 - - 创建好了双击刚刚建立的计划任务,在触发器选项卡中选中任务,然后点击下面的编辑,可以设置为每5分钟运行一次。操作选项卡中,选中任务,点击编辑,如果电脑的环境变量中设置了c:\Program Files\Log Parser 2.2路径的话,启动程序中“起始于”就不用填了,如果没有设置的话,起始于要填上c:\Program Files\Log Parser 2.2。如下图:
DSC0005.jpg
  Windows 2003系统和Win7系统大同小异,部分功能没有特别细致的介绍,有什么问题欢迎拍砖。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-98243-1-1.html 上篇帖子: [收藏]IIS Compression in IIS6.0 下篇帖子: IIS 中 Service Unavailable问题的解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表