使用 IIS 7 中的跟踪排查失败的请求
基于请求的跟踪在独立 IIS 服务器和 Azure Web 应用中都可用,并提供一种方法来确定请求的确切发生情况以及原因,前提是可以重现所遇到的问题。 某些请求的性能不佳、其他请求上与身份验证相关的故障、ASP 或 ASP.NET 的服务器 500 错误等问题通常很难进行故障排除,除非你捕获了问题发生时的跟踪。 以下文章讨论 IIS 服务器上的失败请求跟踪。 有关使用 Azure Web 应用执行此操作的信息,请参阅使用 Visual Studio 排查Azure 应用服务中的应用问题。
失败请求跟踪旨在缓冲请求的跟踪事件,并且仅在请求“失败”时将其刷新到磁盘,在该请求中提供“失败”的定义。 如果想知道为什么收到 404.2 错误消息或请求开始挂起,请使用失败的请求跟踪。
本文中演示的任务包括:
- 启用失败的请求跟踪模块
- 配置失败请求跟踪日志文件语义
- 定义要保留失败请求跟踪的 URL,包括失败定义和要跟踪的区域
- 生成失败条件并查看生成的跟踪
先决条件
安装 IIS
必须先安装 IIS 7 或更高版本,然后才能执行本文中的任务。 浏览以查看 http://localhost/
IIS 是否已安装。 如果未安装 IIS,请参阅 在 Windows Server 2008 上安装 IIS 以获取安装说明。 安装 IIS 时,请确保还安装以下内容:
- 万维网服务下的 ASP.NET (- 应用程序开发功能 - ASP.NET)
- 在万维网服务下跟踪 (- 运行状况和诊断 - 跟踪)
以管理员身份登录
确保用于登录的帐户是管理员帐户,或位于管理员组中。
注意
默认情况下,在“管理员”组中不会授予你完成管理员用户权限。 必须以管理员身份运行应用程序,可以通过右键单击应用程序图标并选择 “以管理员身份运行”来执行。
创建备份
在执行以下任务之前,必须备份配置。
对配置进行备份
单击“启动”>“所有程序”>“附件”。
右键单击“命令提示符”,然后单击“以管理员身份运行”。
在命令提示符下运行以下命令:
%windir%\system32\inetsrv\appcmd add backup cleanInstall
创建示例内容
导航到
%systemdrive%\inetpub\wwwroot
。如果要还原现有内容) 或删除内容,请将内容移动到安全位置 (。
创建一个空白文件并将其命名为 test.asp。
在命令提示符中,导航到 \inetpub\wwwroot 中的 test.asp 文件。
在 test.asp 文件中,粘贴以下内容:
<h2>Failed Request Tracing Lab</h2><br> <br>Today's date is <% response.write(Date()) %>
禁用 ASP
必须为此任务禁用 ASP。 ASP 仅作为示例禁用,用于本文中的任务。
禁用 ASP
打开 IIS 管理器。
双击 ISAPI 和 CGI 限制。
选择 “活动服务器页”。 在“ 操作 ”窗格中,单击“ 拒绝 ”以禁用 ASP。
启用Failed-Request跟踪
启用失败请求跟踪后,需要配置日志文件所在的位置。 在此任务中,将为默认网站启用失败请求跟踪,并指定将日志文件放在何处。 然后,将配置要为其生成失败日志的失败。
步骤 1:为站点启用Failed-Request跟踪并配置日志文件目录
使用管理员用户权限打开命令提示符。
启动 inetmgr。
在“ 连接 ”窗格中,展开计算机名称,展开 “站点”,然后单击“ 默认网站”。
在“ 操作 ”窗格中的 “配置”下,单击“ 失败的请求跟踪”。
在 “编辑网站失败的请求跟踪设置 ”对话框中,配置以下内容:
选中“ 启用 ”复选框。
保留其他设置的默认值。
单击 “确定” 。
现已为默认网站启用失败请求跟踪日志记录。 检查 %windir%\system32\inetsrv\config\applicationHost.config文件以确认配置如下所示:
<system.applicationHost>
<sites>
<!-- site & app defaults -->
<site name="Default Web Site" id="1">
<!-- other site configuration -->
<traceFailedRequestsLogging enabled="true" />
</site>
</sites>
</system.applicationHost>
步骤 2:配置失败定义
在此步骤中,将为 URL 配置失败定义,包括要跟踪的区域。 对于尚未启用的扩展的任何请求,IIS 将排查 IIS 返回的 404.2 问题。 这有助于确定需要启用的特定扩展。
使用管理员用户权限打开命令提示符。
启动 inetmgr。
在“ 连接 ”窗格中,展开计算机名称,展开 “站点”,然后单击“ 默认网站”。
双击 “失败的请求跟踪规则”。
单击“完成”。
在“操作”窗格中,单击“添加”。
在 “添加失败的请求跟踪规则 ”向导的“ 指定内容到跟踪 ”页上,选择“ 所有内容” (*) 。 单击“下一步”。
在“ 定义跟踪条件 ”页上,选中状态 代码 () 复选框,并输入 404.2 作为要跟踪的状态代码。
单击“下一步”。
在“ 选择跟踪提供程序 ”页上的“ 提供程序”下,选中 “WWW 服务器 ”复选框。 在 “区域”下,选中“ 安全 ”复选框并清除所有其他复选框。 生成的问题会导致引发安全错误跟踪事件。 一般情况下,身份验证和授权 (包括 ISAPI 限制列表问题) 问题可以使用 WWW 服务器 – 安全区域配置进行诊断以跟踪。 但是,由于 FREB.xsl 样式表有助于突出显示错误和警告,因此仍可使用默认配置记录所有区域和提供程序中的所有事件。 在 详细级别下,选择 “详细”。
单击“完成”。 应会看到默认 网站的以下定义:
IIS 管理器使用<location>
标记将配置%windir%\system32\inetsrv\config\applicationHost.config
写入文件。 配置应如下所示:
<location path="Default Web Site">
<system.webServer>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Security" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="404.2" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</location>
测试和查看失败请求日志文件
在此任务中,将生成失败的请求并查看生成的跟踪日志。 你已将 IIS 配置为捕获使用 HTTP 响应代码 404.2 失败的请求的跟踪日志 http://localhost/\*.asp
。 现在,请验证它是否正常工作。
步骤 1:生成错误和失败请求日志文件
打开新的 Internet Explorer 窗口。
键入以下地址:
http://localhost/test.asp
应该看到以下内容:
步骤 2:查看失败请求日志文件
生成失败的请求后,请打开具有管理员用户权限的命令提示符并导航到
%systemdrive%\inetpub\logs\FailedReqLogFiles\W3SVC1
。运行 开始 以从目录启动 Internet Explorer 窗口。
请注意以下几点:当 IIS 写入失败的请求日志文件时,它会 为每个失败的请求写入一个文件。 还编写了 freb.xsl 样式表,每个目录一个。 当查看生成的失败请求日志文件时,这有助于查看 (,例如上述 fr000001.xml) 。
右键单击 404.2 错误的日志文件,然后单击“ 使用 > Internet Explorer 打开”。 如果这是你第一次打开失败的请求跟踪文件,则必须将 about:internet 添加到受信任的站点列表中,因为默认情况下已启用 Internet Explorer 增强的安全配置。 如果是这种情况,你将看到以下内容:
在 Internet Explorer 对话框中,单击“ 添加...” ,将 about:internet 添加到受信任的站点列表中。 这允许 XSL 正常工作。 将 about:Internet 添加到受信任的站点列表后,你将看到以下内容:
失败请求的摘要记录在顶部,错误&警告表标识严重性为 WARNING、ERROR 或 CRITICAL ERROR 的任何事件。 在此示例中,WARNING 严重级别是由于 ISAPI 限制造成的。 您尝试加载的图像为
%windir%\system32\inetsrv\asp.dll
。使用文本编辑器直接打开原始 XML 文件,并查看每个事件的内容。
总结
已完成两个任务:如果 IIS 返回 404.2 状态代码,则配置失败的请求跟踪以捕获 * 的跟踪;并验证 IIS 是否捕获了请求的跟踪。 你还验证了 freb*.xml 日志文件不包含对所发出的请求的任何其他请求,因为请求没有 404.2 返回代码。 在查阅失败日志文件时,你确定失败的原因是该请求禁用了扩展。 可以尝试其他非 HTML 页面 ((如 gifs 或 jpgs)) ,并请注意日志文件不会添加这些跟踪。 还可以通过在 failureDefinitions 中设置 timeTaken 字段来轻松将其更改为 404,或者捕获失败。如果请求花费的时间超过 30 秒。
还原备份
完成本文中的任务后,可以还原配置的备份。 使用管理员用户权限运行以下命令:
%windir%\system32\inetsrv\appcmd restore backup cleanInstall