我们在使用IIS部署网站的时候,随着时间推移,IIS 生成的日志文件可能会消耗大量磁盘空间。 日志可能会填满整个硬盘驱动器,为了缓解此问题,许多用户完全关闭日志记录,但关了记录又会导致出现问题无从排查,故整理出一些替代方法来缓解日志文件带来的问题:
- 启用文件夹压缩
- 将日志文件夹移动到远程系统
- 通过脚本删除旧日志文件。
- 将脚本作为计划任务定期删除旧的日志文件。
启用文件夹压缩
IIS 日志文件压缩到其原始大小的大约 2%。 按如下所示启用日志文件压缩:
-
单击图标栏中 的“文件管理器 ”图标。
-
默认情况下,移动到包含 IIS 日志文件 (的文件夹,
%SystemDrive%\inetpub\logs\LogFiles
) 。说明:如果IIS安装后,日志文件地址未发生改变,默认路径是
C:\inetpub\logs\LogFiles
-
右键单击文件夹,然后单击“ 属性”。
-
在“属性”页的“常规”选项卡上,单击“高级”。
-
单击“ 压缩内容”以节省磁盘空间,然后单击“ 确定”。
-
单击“ 应用”,然后选择是仅压缩文件夹,还是压缩文件夹、其子文件夹及其文件。
-
单击 “确定” 。 验证文件夹内容是否已压缩。 文件夹名称和每个文件的名称应为蓝色,压缩文件的大小应较小。
这是一种降低磁盘使用率的简单方法。 但是,这不是最终的解决方案,因为磁盘使用量仍会随着时间推移而增长,最终可能会填满硬盘驱动器。
如果文件夹已包含大量数据,则计算机可能需要一段时间才能压缩其内容。 另请注意,此一次性进程可能会在初始压缩期间降低计算机速度,因此,如果这是生产服务器,请在非高峰时间执行此操作
,以防止服务降级。
将日志文件夹移动到远程系统
默认情况下 %SystemDrive%\inetpub\logs\LogFiles
,IIS 日志文件存储在 IIS 服务器的 文件夹中。 文件夹在服务器或单个站点的“日志记录”页上的“目录”属性中配置。 若要减少日志磁盘使用情况的问题,可以将 IIS 日志文件移动到另一台具有更多空间的服务器上的文件夹。 此服务器可与本地 IIS 服务器位于同一域中,也可以位于其他域中。 可以远程保存整个服务器或单个网站的日志文件。
此解决方案可帮助提高系统的安全性,因为如果本地硬盘驱动器崩溃,日志数据仍可在远程存储上使用。 此外,日志文件可由分析系统使用。
将 IIS 日志文件的位置更改为远程共享,如下所示:
-
在与运行 IIS 的本地 Web 服务器位于同一域中的远程服务器上创建日志文件目录。
-
在文件夹的 “属性” 页的“ 共享 ”选项卡上,单击“ 共享 ”,以便共享目录。 在“ 安全 ”选项卡上,分配具有相应权限的组和用户。 确保相应的组和用户能够读取和写入日志文件。
-
在本地 Web 服务器上打开 IIS 管理器 。
-
在 IIS 管理器的“ 连接 ”窗格中,单击服务器或网站。
-
双击“ 日志记录”。
-
在“ 目录 ”文本框中,输入在远程服务器上创建的目录的完整 UNC 路径。 例如,键入
\servername\Logs
,其中“servername”表示远程服务器的名称,“Logs”表示存储日志文件的共享的名称。
-
在 “操作 ”窗格中,单击“ 应用”,然后单击“ 确定”。 目录中的所有网站都应开始将数据记录到远程共享。
通过脚本删除旧日志文件
可以通过运行脚本来控制日志文件的磁盘使用情况,该脚本会自动删除早于特定期限的日志文件。 在计划任务中运行此脚本将使磁盘填满问题得到控制,而无需持续维护。
以下 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 任务计划程序将脚本计划为随时运行。 配置计划任务的方式应与日志文件滚动更新选项的配置相协调。
-
打开服务器管理器,单击“工具”菜单,然后单击“任务计划程序”。
-
在“任务计划程序”对话框的“操作”窗格中,单击“创建任务”。
-
在“创建任务”对话框的“常规”选项卡上,输入任务的名称,例如“删除日志文件”。 设置安全属性,选择具有足够权限的用户帐户来运行脚本。
-
单击“ 触发器 ”选项卡,然后单击“ 新建”。 在“ 新建触发器 ”对话框中,将“ 开始任务” 设置为 “按预定计划”。 选择周期,例如 “每日”。 输入 “开始日期” ,选择更高级的设置,并确保在准备好启动计划时选择“ 已启用 ”。 单击 “确定” 。
-
单击“操作”选项卡,然后单击“新建”。 在“ 新建操作 ”对话框中,选择 “操作”的值,在本例中为 “启动程序”。 在 “程序/脚本”中,输入 cscript,在 “添加参数 (可选) ”中,输入脚本文件的路径和名称,例如:
C:\scripts\retentionscript.vbs
-
单击 “确定” 。
-
验证是否已将任务添加到“ 活动任务” 窗格。
-
右键单击新任务,然后选择“ 运行”。
-
导航到运行脚本的文件夹,并验证是否删除了相应的日志文件。
-
导航回任务计划程序,右键单击任务,然后单击“ 结束 ”,使状态返回“ 就绪” ,并且任务已准备好进行计划运行。