![如何监控IIS上的文件下载?](https://linux22.com/image/571247/%E5%A6%82%E4%BD%95%E7%9B%91%E6%8E%A7IIS%E4%B8%8A%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%8B%E8%BD%BD%EF%BC%9F.png)
我们在 IIS 上托管 .exe 文件供用户下载。有没有直接的方法可以知道有多少文件下载请求以及其中有多少请求已完成(成功下载)?我是否必须为此解析所有日志?
谢谢
答案1
首先:是的,您需要解析所有 W3SVC 日志才能全面了解 *.exe 文件被请求的次数以及请求成功的次数。
IIS W3SVC 日志默认放置在:
%windir%\System32\Logfiles\W3SVC\[SiteID]\exYYMMDD.log
或者
%systemdrive%\Inetpub\logs\[SiteID]\exYYMMDD.log
取决于 IIS 版本。这可以在顶层(服务器)配置,也可以针对单个站点进行配置。W3SVC 日志包含许多字段(这些字段都可以在 IIS 管理器中打开或关闭)。
这里您需要确保(至少)以下字段已启用:
cs-uri-stem
sc-status
这cs-uri-词干是主机名之后但在任何查询数据之前的所有内容。
在此示例中https://some.domain.tld/give/me/files.exe?download=yes
:cs-uri-词干将会:/give/me/files.exe
因此,当您解析日志文件时,请使用类似 的命令进行查询cs-uri-stem LIKE '*.exe'
。对于每个结果,请检查存储在 字段中的 HTTP 状态代码sc-status
。正如 Tim 所写,HTTP 200表示成功。如果下载开始,并且服务器正确提供文件,但客户端取消/停止下载文件,则 sc-status 可能是206,表示部分内容;内容/文件已提供,但客户端仅接受其中一部分(或暂停下载)。
有关 IIS 7.0 和 IIS 7.5 中的 HTTP 状态代码列表,请查看:http://support.microsoft.com/kb/943891
有关 IIS 5.0 和 IIS 6.0 的类似列表,请查看:http://support.microsoft.com/kb/318380
答案2
假设以下是日志中的其中一行:
192.168.114.201, -, 03/20/01, 7:55:20, W3SVC2, SERVER, 172.21.13.45, 4502, 163, 3223, 200, 0, GET, /DeptLogo.gif, -,
GET = 客户端请求的文档/文件
/DeptLogo.gif = 请求的文件
200 = 响应代码(200 表示请求已完成)
我唯一不确定的是,响应代码 200 是否仅在文件完成发送到客户端时触发(这仍然不能 100% 保证它在客户端正确完成),或者它是否在服务器开始发送时触发。我会自己测试一下,下载一个文件并让它完成,检查日志,然后重复,这次取消下载并再次检查日志以查看差异。