管理 IIS 日志文件存储

作者:Jim van de Erve

可以使用压缩、远程存储和脚本化删除来管理 Internet Information Services (IIS) 日志文件使用的服务器磁盘空间量。

概述

IIS 生成的日志文件可能会随时间推移消耗大量磁盘空间。 日志可能会填满整个硬盘驱动器。 为了缓解此问题,许多用户会完全关闭日志记录。 幸运的是,还有一些替代方法可以执行此操作,例如:

以下各节介绍了上述缓解措施。 可能还需要执行以下操作来控制磁盘使用量:

  • 通过省略不需要的属性字段来限制日志大小
  • 为网站和应用程序创建单独的日志
  • 使用集中式二进制日志记录来保留内存资源。

有关详细信息,请参阅在 IIS 中配置日志记录

启用文件夹压缩

IIS 日志文件可压缩到其原始大小的大约 2%。 按如下方式启用日志文件的压缩。 只有管理员才能执行此过程。

  1. 单击图标栏中的“文件管理器”图标。
  2. 移动到包含 IIS 日志文件的文件夹(默认情况下为 %SystemDrive%\inetpub\logs\LogFiles)。
  3. 右键单击此文件夹,然后单击“属性”。
  4. 在“属性”页的“常规”选项卡上,单击“高级”。
  5. 单击“压缩内容以节省磁盘空间”,然后单击“确定”。 Enabling compression
  6. 单击“应用”,然后选择是仅压缩文件夹,还是压缩文件夹、子文件夹及其文件。
  7. 单击“确定”。 验证文件夹内容是否已压缩。 文件夹的名称和每个文件的名称应为蓝色,并且压缩文件的大小应该较小。

这是降低磁盘使用量的简单方法。 但是,这不是最终解决方案,因为磁盘使用量在一段时间内仍会增长,最终可能会填满硬盘驱动器。

如果文件夹已包含大量数据,则计算机可能需要一段时间才能压缩其内容。 另请注意,此一次性进程可能会在初始压缩期间降低计算机速度,因此,如果这是生产服务器,请在非高峰时段执行此操作,以防止服务降级。

将日志文件夹移动到远程系统

IIS 日志文件默认存储在 IIS 服务器的 %SystemDrive%\inetpub\logs\LogFiles 文件夹中。 可在服务器或单个站点的“日志记录”页上的 Directory 属性中配置该文件夹。 为了减少日志磁盘使用量问题,可以将 IIS 日志文件移到另一台具有更多空间的文件夹。 此服务器可以位于本地 IIS 服务器所在的同一域中,也可以位于其他域中。 可以为整个服务器或单个网站远程保存日志文件。

此解决方案可以确保系统的安全性,因为如果本地硬盘驱动器崩溃,日志数据仍可用于远程存储。 此外,分析系统可以使用日志文件。

将 IIS 日志文件的位置更改为远程共享,如下所示:

  1. 在与运行 IIS 的本地 Web 服务器位于同一域中的远程服务器上创建日志文件目录。

  2. 在文件夹的“属性”页的“共享”选项卡上,单击“共享”,以便共享目录。 在“安全性”选项卡上,为组和用户分配适当的权限。 确保相应的组和用户能够读取和写入日志文件。 Log Folder Properties

    有关详细信息,请参阅配置远程日志记录的权限

    注意:如果要将日志文件写入其他域中的远程服务器,请参阅为跨域日志记录设置 Null 会话

  3. 在本地 Web 服务器上打开 IIS Manager

  4. IIS Manager 的“连接”窗格中,单击服务器或网站。

  5. 双击“日志记录”。 Logging Icon

  6. 在“目录”文本框中,输入在远程服务器上创建的目录的完整 UNC 路径。 例如,键入 \servername\Logs,其中“servername”表示远程服务器的名称,“Logs”表示存储日志文件的共享的名称。 Logging Page

  7. 在“操作”窗格中,单击“应用”,然后单击“确定”。 目录中的所有网站都应开始将数据记录到远程共享。

    有关详细信息,请参阅远程日志记录

通过脚本删除旧日志文件

通过运行用于自动删除早于特定保留时间的日志文件的脚本,可控制日志文件的磁盘使用量。 在计划任务中运行此脚本可控制磁盘填充问题,而无需持续维护。

以下 VBScript 将检查文件夹中每个日志文件的保留时间,并删除超过指定保留时间的任何日志文件。 若要根据自己的目的自定义脚本,只需更改脚本第 1 行中文件夹的名称和路径,并在第 2 行中将最长保留时间更改为所需值(以天为单位)。

sLogFolder = "c:\inetpub\logs\LogFiles"
iMaxAge = 30   'in days
Set objFSO = CreateObject("Scripting.FileSystemObject")
set colFolder = objFSO.GetFolder(sLogFolder)
For Each colSubfolder in colFolder.SubFolders
        Set objFolder = objFSO.GetFolder(colSubfolder.Path)
        Set colFiles = objFolder.Files
        For Each objFile in colFiles
                iFileAge = now-objFile.DateCreated
                if iFileAge > (iMaxAge+1)  then
                        objFSO.deletefile objFile, True
                end if
        Next
Next

上面的脚本将扫描所有子文件夹,因此它将处理指定文件夹中和文件夹下的所有站点的日志。 如果要将进程限制为单个站点,请相应地更改路径。

若要手动运行脚本,请在管理员命令行中执行以下脚本:cscript.exe c:\scripts\retentionscript.vbs

使用脚本删除日志文件是使解决日志文件占用磁盘空间问题的长期可靠解决方案。 如果自动执行此过程(如下所示),则不需要持续维护。

将脚本作为计划任务运行

通过创建 Windows 任务计划来定期运行脚本,可自动执行删除日志文件的任务。 可以使用 Windows 任务计划程序,将脚本计划为在任何时候运行。 配置计划任务的方式应与日志文件滚动更新选项的配置协调一致。

  1. 打开服务器管理器,单击“工具”菜单,然后单击“任务计划程序”。
  2. 在“任务计划程序”对话框的“操作”窗格中,单击“创建任务”。 Create Task control
  3. 在“创建任务”对话框的“常规”选项卡中,输入任务的名称,例如“删除日志文件”。 设置安全属性,选择具有足够权限的用户帐户来运行脚本。 Create Task dialog box
  4. 单击“触发器”选项卡,然后单击“新建”。 在“新建触发器”对话框中,将“开始任务”任务设置为“按计划运行”。 选择周期,例如“每日”。 输入开始日期日期,选择更高级的设置,并确保在准备好启动计划时选择“启用”。 单击“确定”。 New Trigger dialog box
  5. 单击“操作” 选项卡,然后单击“新建” 。 在“新建操作”对话框中,选择“操作”的值,在本例中为“启动程序”。 在“程序/脚本”中,输入 cscript;在“添加参数(可选)”中,输入脚本文件的路径和名称,例如 C:\iis\Log\_File\_Deletion.vbs。 单击“确定”。 New Action dialog box
  6. 单击“确定”。
  7. 验证是否已将任务添加到“活动任务”窗格中。
  8. 右键单击新任务,然后选择“运行”。 Task Scheduler dialog box
  9. 导航到脚本运行的文件夹,并验证是否已删除相应的日志文件。
  10. 导航回任务计划程序,右键单击任务,然后单击“结束”以使状态返回到“就绪”,此时任务已准备好按计划运行。