IIS4.0事件记录详解
王志
当用户访问一个IIS Web站点时,IIS(Internet Information Server)4.0可以使用记录文件(log)来记录和追踪事件信息,比如用户访问IIS Web网站或者应用程序的时间,访问量的统计,以及发送或者接收的字节数等等,为网站管理人员提供宝贵的参考资料,以便检查数据和网络的运行状况和发展趋势,同时也可以避免用户恶意访问和攻击。
IIS4.0具有4中记录格式,记录数据既可以以文本格式存储也可以以数据库形式存储,维护记录文件将会对系统增加负担,因此在捕获记录数据时不能大小通吃,要挑选最具代表性的数据作为记录参数。下面我们一起看看在设置IIS4.0事件记录时要考虑和决定的关键要素,及其创建过程。
一、记录格式
表1: IIS 4.0 的4种记录文件格式
Log Format记录格式
Description说明
Time Zone Used时区
Log File Prefixes记录文件的前缀
W3C Extended Log File
可以自定义记录事件的属性和格式
GMT格林威治时间
extend,ex
NCSA Common Log File format
固定的标准NCSA时间
IIS 4.0 服务器本地时间
Ncsa,nc
Microsoft IIS Log File
IIS指定的固定格式
IIS 4.0 服务器本地时间
inetsv,in
ODBC Logging
记录到数据库的固定格式
IIS 4.0 服务器本地时间
无
表一列出了上面提到的在IIS4.0中可以使用的4种记录文件格式:World Wide Web Consortium (W3C) Extended Log File(W3C扩展记录文件)格式,National Center for Supercomputing Applications (NCSA) Common Log File(NCSA通用记录文件)格式,Microsoft IIS Log File(微软IIS记录文件)格式以及ODBC Logging File(ODBC记录文件)格式。其中W3C扩展记录文件格式是最常用的记录格式,因为它比后面的三种其他格式更具灵活性,也就是说用户可以根据需要设置记录的内容。
对于一个Web站点而言,我们希望能够根据不同的目的来选择记录属性,而W3C正好为我们提供了许多可选的记录项目。需要注意的是,你选用的记录项目越多,IIS4.0服务器的负担就越重,同时这也将增加磁盘空间或者说数据库空间的占用量。图1显示了默认状态下W3C记录格式的扩展选项。
当
图1 默认状态下W3C记录格式的扩展选项
你需要收集多个Web站点的信息,其中部分站点可能不是建立在IIS服务器上面,此时,可以使用W3C记录格式和NCSA通用记录格式。即使你的公司使用不同平台的网络服务器来提供Web服务,如果这些服务器都能够支持上述两种通用的记录格式,你也能够使用任何支持这种记录格式的分析工具来访问上述记录文件。比如说,Sane Solutions' NetTracker可以读取记录文件并且将其导入自带的分析工具可以使用的数据库中。当然,如果你希望记录信息以数据库形式存在,可以直接选择ODBC记录文件格式。
NCSA通用记录文件格式,微软IIS记录文件格式以及ODBC记录文件格式都是使用IIS4.0服务器的本地时间,但是W3C记录使用的是格林威治时间(即GMT)。显然,你需要知道你所在的时区,以防止开始记录的时间发生混乱。
对于IIS事件记录重新建立一个文件的时间,我们可以设置为一天、一周或者一个月。我们也可以根据记录文件的大小来确定何时重新开始记录,比如记录文件达到19MB时重新开始。上述设置的操作可以按照以下步骤完成:
启动Internet Service Manager(ISM)4.0, 右键单击所要记录的站点名称(如default web site),选择"properties",在Web Site标签下面,单击Active log format右面的Properties按钮,在弹出的窗口中,选择Daily, Weekly等等即可。
IIS4.0为记录文件通过以下方式命名:使用表一中的前缀来指示记录文件的格式,后面加上记录开始的日期。对于根据文件大小来设定的记录文件,IIS4.0使用一个长的前缀(如extend)而对于使用日期设定的记录文件则使用短前缀(如ex)。举一个具体的例子,当你看到下面的记录文件名nc010125,就应该知道其含义是:采用NCSA格式记录的文件,该文件是按每天产生一个的方式来记录的,该文件创建的日期是2001年1月25日。
二、记录到文件同记录到数据库的比较
根据微软的官方文件,当IIS4.0记录到文件时,IIS4.0会自动为这个记录文件建立缓存区,并且以64KB的数据块方式写到磁盘上。一旦记录停止,IIS也会自动将这个缓存区刷新掉。我们可以使用增加这个缓存区的办法来减少文件更新的次数,减低磁盘的写入时间。改变缓存区的大小可以通过下面的方式进行:
在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters位置建立名称为LogFileBatchSize的子键,将其键值设定为你需要的缓存数值即可。
当使用ODBC记录格式时,每发生一个事件,IIS4.0都会将事件记录到SQL数据库或者其他指定的数据库中。这种实时的记录方式导致IIS4.0不断的向记录数据库添加记录,显然这种方式增加了数据库服务器的负担,因而成为IIS4.0的瓶颈之一。因此在微软的Internet Information Server Resource Kit中提到:"对于一个繁忙的服务器来说,ODBC不是一个好选择,因为它会降低服务器的速度,而且在较高的负担下,也不能很好的记录事件。"
因此,微软的参考资料中似乎都推荐使用记录到文件而不是使用ODBC数据库。这种看法对吗?我们尚不能过早的下结论。我作了一个测试,结果发现IIS4.0在发生事件后会立即写入记录文件。这同一些参考资料恰恰相反,IIS4.0没有对记录数据进行缓存,而是直接写入文件,至少在默认的设置下是这样的。我们可以十分容易的做出这个测试:在IIS4.0的ISM里面任意选择一个Web站点,为其建立记录,然后访问这个站点,这时你到winnt\system32\LOGfiles目录下,找到记录文件,可以看到刚才的访问操作历历在目。
按照这个结论,如果IIS 4.0对于每次访问都直接写入记录文件,这同采用数据库记录并没有什么区别。而往往数据库文件的读写速度可能比记录文件还要快一些。因此,笔者建议你在确定记录格式之前,先进行测试,然后根据实际情况决定采用文件记录还是采用数据库记录。无论如何,我对文件记录比数据库记录快的说法表示怀疑。
另外,因为事件记录会耗费系统资源,因此建议网络管理员考虑下面两个建议,以减轻事件记录带来的系统负担:
1、利用班后时间将记录文件导入数据库,而不是实时写入。
2、在选择记录的项目时,尽可能慎重,不要把不必要的事件也记录下来。因为记录的项目越多,系统的负担就越重。
三、记录到文件的操作
默认情况下,IIS 4.0使用的是W3C记录格式,用以对时间、客户的IP地址、访问方法、URI Stem以及Http Status进行记录。为了改变这些默认的设置,我们可以进行如下操作:
1、打开ISM
2、点击你要记录的站点所在的服务器
3、右键单击站点,选择properties
4、选择 Web Site标签
5、在如图2所示的标签中,在Enable Logging前面打上对号(选中)
6、在Active log format列表框中选择一种记录文件格式
7、选择Active log format 列表框右边的properties按钮
8、改变记录的属性,然后返回Web Site 标签
当
图2 Web Site标签
你点击OK按钮,确认这种改变后,IIS4.0将关闭当前的记录文件,重新建立一个新的记录文件格式。
默认状态下,IIS4.0将向磁盘文件发送记录信息。Web服务器将default Web site的记录文件存放在C:\winnt\system32\logfiles\w3svc1目录中,将admin Web site的记录文件存放在C:\winnt\system32\logfiles\w3svc2目录中,依此类推。
你也可以使用ISM把记录文件存放到其他的目录中。这样我们可以通过把记录文件存放到更快的不含有Web网站内容的磁盘中,对于系统的性能将有所提升,因为这样能够降低Web站点所在磁盘的写入量。
改变记录文件的存储路径方法如下:
1、在图2 所示的窗口中选择Web Site
2、单击Properties
3、修改Log file directory下面的路径即可。需要注意的是,这里必需使用物理路径,UNC路径是无效的。
4、单击OK确认
上述步骤完成后,IIS4.0就会在你指定的目录中建立记录文件。
四、记录到数据库的操作
除了以文件格式记录事件以外,你也可以以ODBC数据库格式记录事件。比如,我让可以将记录直接发送到SQL服务器或者Oracle数据库中,之后使用SQL或其他的分析工具家已分析。
在SQL Server 6.5以上的版本上设置记录数据库的方法如下:
1、打开Enterprise Manager,并建立一个新的数据库
2、启动Query Analyzer,登录到数据库文件所在的SQL Server系统
3、选择记录数据库(log database)
这个数据库肯定包含一个具有记录数据格式的表格。IIS4.0中有一个SQL脚本文件,用以创建表格。这个脚本文件的样本如下:
create table inetlog (
clienthost varchar(255), username varchar(255),
logtime datetime, service varchar( 255), machine varchar( 255),
serverip varchar( 50), processingtime int, bytesrecvd int,
bytessent int, servicestatus int, win32status int,
operation varchar( 255), target varchar(255), parameters varchar(255) )
如果你选择的是默认安装的IIS4.0,这个文件将存放在C:\winnt\system32\inetsrv目录下。运行这个脚本就可以创建表格了。这个脚本会为创建的记录表格命名为Inetlog。
接
图3 ODBC记录的配置窗口
下来,在IIS4.0系统上创建ODBC系统的数据源,方法如下:
1、打开控制面板
2、单击ODBC图标
3、单击System DSN标签
4、单击ADD
5、选择SQL Server ODBC driver
6、输入Data Source Name (DSN)和说明
7、输入服务器名
8、然后按照提示选择数据库并测试数据源。
在IIS Web站点中,将事件记录以ODBC格式存储,其设置过程如下:
1、在Web Site标签中选择ODBC loging。
2、单击Properties,进入ODBC记录的配置窗口,如图3 所示。
3、将DSN修改为你在上面的SQL设置中所建立的那个数据库文件名。
4、将表格名修改为Inetlog。
5、输入访问表格所需的用户名和密码
6、单击OK确认。
如
图4 事件记录错误
果上述设置正确,IIS4.0就可以将记录发送到数据库中了。如果记录没有发送到数据库,检查事件记录是否存在错误。图4 显示的就是因为记录表格名同数据库表格名不一致导致的记录错误。其他诸如用户名或者密码的错误也将导致无法正常进行记录工作。
也许您在使用IIS4.0的事件记录过程中,有着更多的心得体会,本文只是起到抛砖引玉的作用。总的来说,要注意记录项目的选择和记录格式的选择。关于记录数据的分析,除了SQL之外,微软的NT4.0 Option Pack也提供了一个叫做Site Server Express(SSE)的工具,可以读取记录文件,并进行分析。当然,选用第三方的分析软件也可以,比如Seagate 软件公司提供的Seagate Crystal Reports就可以查询和分析SQL数据库。