使用 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)
  • 在万维网服务下跟踪 (- 运行状况和诊断 - 跟踪)

以管理员身份登录

确保用于登录的帐户是管理员帐户,或位于管理员组中。

注意

默认情况下,在“管理员”组中不会授予你完成管理员用户权限。 必须以管理员身份运行应用程序,可以通过右键单击应用程序图标并选择 “以管理员身份运行”来执行

创建备份

在执行以下任务之前,必须备份配置。

对配置进行备份

  1. 单击“启动”>“所有程序”>“附件”。

  2. 右键单击“命令提示符”,然后单击“以管理员身份运行”

    显示命令提示符的上下文菜单的屏幕截图,其中选择了“以管理员身份运行”。

  3. 在命令提示符下运行以下命令:

    %windir%\system32\inetsrv\appcmd add backup cleanInstall
    

创建示例内容

  1. 导航到 %systemdrive%\inetpub\wwwroot

  2. 如果要还原现有内容) 或删除内容,请将内容移动到安全位置 (。

  3. 创建一个空白文件并将其命名为 test.asp。

  4. 在命令提示符中,导航到 \inetpub\wwwroot 中的 test.asp 文件。

  5. 在 test.asp 文件中,粘贴以下内容:

    <h2>Failed Request Tracing Lab</h2><br>
    <br>Today's date is <% response.write(Date()) %>
    

禁用 ASP

必须为此任务禁用 ASP。 ASP 仅作为示例禁用,用于本文中的任务。

禁用 ASP

  1. 打开 IIS 管理器。

  2. 双击 ISAPI 和 CGI 限制

    显示选择了“I S A P I 和 C G I 限制的 I S 管理器”的屏幕截图。

  3. 选择 “活动服务器页”。 在“ 操作 ”窗格中,单击“ 拒绝 ”以禁用 ASP。

    显示打开的“I S A P I 和 C G I 限制和操作”窗格的屏幕截图。

启用Failed-Request跟踪

启用失败请求跟踪后,需要配置日志文件所在的位置。 在此任务中,将为默认网站启用失败请求跟踪,并指定将日志文件放在何处。 然后,将配置要为其生成失败日志的失败。

步骤 1:为站点启用Failed-Request跟踪并配置日志文件目录

  1. 使用管理员用户权限打开命令提示符。

  2. 启动 inetmgr

  3. 在“ 连接 ”窗格中,展开计算机名称,展开 “站点”,然后单击“ 默认网站”。

  4. 在“ 操作 ”窗格中的 “配置”下,单击“ 失败的请求跟踪”。

    显示“配置”下的“失败请求跟踪”的屏幕截图。

  5. “编辑网站失败的请求跟踪设置 ”对话框中,配置以下内容:

    • 选中“ 启用 ”复选框。

    • 保留其他设置的默认值。

      显示“编辑网站失败请求跟踪设置”对话框的屏幕截图,其中已选中“启用”。

  6. 单击 “确定”

现已为默认网站启用失败请求跟踪日志记录。 检查 %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 问题。 这有助于确定需要启用的特定扩展。

  1. 使用管理员用户权限打开命令提示符。

  2. 启动 inetmgr

  3. 在“ 连接 ”窗格中,展开计算机名称,展开 “站点”,然后单击“ 默认网站”。

  4. 双击 “失败的请求跟踪规则”。

    显示“默认网站主页”窗格和“失败请求跟踪规则”的屏幕截图。

  5. 单击“完成”。

  6. 在“操作”窗格中,单击“添加”

  7. “添加失败的请求跟踪规则 ”向导的“ 指定内容到跟踪 ”页上,选择“ 所有内容” (*) 。 单击“下一步”。

    显示“添加失败的请求跟踪规则”向导的屏幕截图,其中选择了“所有内容”。

  8. 在“ 定义跟踪条件 ”页上,选中状态 代码 () 复选框,并输入 404.2 作为要跟踪的状态代码。

    显示“定义跟踪条件”页的屏幕截图。状态代码在“状态代码”字段中选择了 404 点 2。

  9. 单击“下一步”。

  10. 在“ 选择跟踪提供程序 ”页上的“ 提供程序”下,选中 “WWW 服务器 ”复选框。 在 “区域”下,选中“ 安全 ”复选框并清除所有其他复选框。 生成的问题会导致引发安全错误跟踪事件。 一般情况下,身份验证和授权 (包括 ISAPI 限制列表问题) 问题可以使用 WWW 服务器 – 安全区域配置进行诊断以跟踪。 但是,由于 FREB.xsl 样式表有助于突出显示错误和警告,因此仍可使用默认配置记录所有区域和提供程序中的所有事件。 在 详细级别下,选择 “详细”。

    显示“选择跟踪提供程序”页的屏幕截图。W W Server 在“提供程序”下选择,在“详细”下选择“安全性”。

  11. 单击“完成”。 应会看到默认 网站的以下定义:

    显示“失败的请求跟踪规则”窗格的屏幕截图。W W Server 在“关联提供程序”下列出。

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:生成错误和失败请求日志文件

  1. 打开新的 Internet Explorer 窗口。

  2. 键入以下地址: http://localhost/test.asp

  3. 应该看到以下内容:

    显示应用程序默认网站中标题为“服务器错误”的网页的屏幕截图。在错误摘要下,它表示找不到 H T T P 错误 404 点 2。

步骤 2:查看失败请求日志文件

  1. 生成失败的请求后,请打开具有管理员用户权限的命令提示符并导航到 %systemdrive%\inetpub\logs\FailedReqLogFiles\W3SVC1

  2. 运行 开始 以从目录启动 Internet Explorer 窗口。

    显示 Internet Explorer 导航到 W 3 S V C 1 路径的屏幕截图。列出了两个文件:freb 和 f r 0 0 0 0 0 0 1。

  3. 请注意以下几点:当 IIS 写入失败的请求日志文件时,它会 为每个失败的请求写入一个文件。 还编写了 freb.xsl 样式表,每个目录一个。 当查看生成的失败请求日志文件时,这有助于查看 (,例如上述 fr000001.xml) 。

  4. 右键单击 404.2 错误的日志文件,然后单击“ 使用 > Internet Explorer 打开”。 如果这是你第一次打开失败的请求跟踪文件,则必须将 about:internet 添加到受信任的站点列表中,因为默认情况下已启用 Internet Explorer 增强的安全配置。 如果是这种情况,你将看到以下内容:

    显示 Internet Explorer 增强型安全配置的对话框的屏幕截图。关于冒号 Internet 被阻止。

  5. Internet Explorer 对话框中,单击“ 添加...” ,将 about:internet 添加到受信任的站点列表中。 这允许 XSL 正常工作。 将 about:Internet 添加到受信任的站点列表后,你将看到以下内容:

    显示 Internet Explorer 的屏幕截图。选中了“请求摘要”选项卡,并列出了两个警告。

    失败请求的摘要记录在顶部,错误&警告表标识严重性为 WARNING、ERROR 或 CRITICAL ERROR 的任何事件。 在此示例中,WARNING 严重级别是由于 ISAPI 限制造成的。 您尝试加载的图像为 %windir%\system32\inetsrv\asp.dll

  6. 使用文本编辑器直接打开原始 XML 文件,并查看每个事件的内容。

总结

已完成两个任务:如果 IIS 返回 404.2 状态代码,则配置失败的请求跟踪以捕获 * 的跟踪;并验证 IIS 是否捕获了请求的跟踪。 你还验证了 freb*.xml 日志文件不包含对所发出的请求的任何其他请求,因为请求没有 404.2 返回代码。 在查阅失败日志文件时,你确定失败的原因是该请求禁用了扩展。 可以尝试其他非 HTML 页面 ((如 gifs 或 jpgs)) ,并请注意日志文件不会添加这些跟踪。 还可以通过在 failureDefinitions 中设置 timeTaken 字段来轻松将其更改为 404,或者捕获失败。如果请求花费的时间超过 30 秒。

还原备份

完成本文中的任务后,可以还原配置的备份。 使用管理员用户权限运行以下命令:

%windir%\system32\inetsrv\appcmd restore backup cleanInstall