为 Azure 云服务(扩展支持)和虚拟机设置诊断

注意

本文适用于 Azure Azure 云服务(扩展支持)。 2027 年 3 月 31 日,云服务(扩展支持)部署模型将停用。 因此,支持云服务工具在此日期之后的最新 Visual Studio 中不可用。 云服务(扩展支持)工具将继续在 Visual Studio 2022 中工作,常规维护将持续到 2027 年 3 月 31 日。 建议立即开始迁移规划,以确保平稳过渡。 有关详细信息,请参阅 官方公告 ,包括有关将应用迁移到新式 Azure 服务的详细指南。

在某些情况下,Azure 云服务依赖于连接字符串进行身份验证,例如存储帐户。 由于意外暴露或被泄露的风险,连接字符串和密码本质上是不安全的。 Microsoft建议使用托管标识进行身份验证,以及 Service Fabric 托管群集等服务。

当需要对 Azure 云服务(扩展支持)服务或虚拟机进行故障排除时,可以使用 Visual Studio 更轻松地设置 Azure 诊断。 诊断捕获运行云服务的虚拟机和虚拟机实例上的系统数据和日志记录数据。 诊断数据将传输到你选择的存储帐户。 有关 Azure 中的诊断日志记录的详细信息,请参阅 在 Azure 应用服务中为 Web 应用启用诊断日志记录

本文介绍如何使用 Visual Studio 打开和设置 Azure 诊断。 了解如何在 Azure 虚拟机上设置诊断,如何选择要收集的诊断信息类型,以及如何在收集后查看信息。

若要设置 Azure 诊断,请在 Visual Studio 中的 诊断配置 对话框中更改诊断设置。 这些设置保存在名为 diagnostics.wadcfgx的文件中。 还可以直接修改配置文件。 如果手动更新文件,配置更改将在下次将云服务部署到 Azure 或运行模拟器中的服务时生效。

警告

在 Visual Studio 2022 中,调试云服务项目时,弃用的 Azure 存储模拟器替换为 Azurite 模拟器。 此 Azurite 模拟器不适用于 Azure 诊断插件,该插件在本地运行和测试时为 Azure 诊断提供支持。 如果需要本地运行和测试方案的插件,可以将本地服务配置(.cscfg)中的连接字符串更新到 Azure 存储帐户(请参阅 管理存储帐户的连接字符串),或下载以前的 Azure 存储模拟器。 在 Visual Studio 17.10 版本中,本地 Azure 诊断插件被弃用并默认禁用,但在该版本中仍可选择启用。 该插件在 Visual Studio 17.11 中删除。 此插件仅用于本地 Azure 计算模拟器,禁用不会影响在 Azure 中使用 Azure 诊断扩展的已部署云服务。 若要在 Visual Studio 17.10 中启用诊断插件,请将以下属性设置添加到项目文件中的任何 PropertyGroup<EnableEmulatorDiagnosticsPlugin>True</EnableEmulatorDiagnosticsPlugin>

Visual Studio 如何确定诊断存储帐户

  • 如果在 .cscfg 文件中指定了诊断连接字符串,Visual Studio 会在发布期间以及打包期间生成公共配置 XML 文件时使用它来设置诊断扩展。
  • 如果未在 .cscfg 文件中指定诊断连接字符串,Visual Studio 将退回到使用 .wadcfgx 文件中指定的存储帐户,以设置用于发布的诊断扩展,并在打包过程中生成公共配置 XML 文件。
  • .cscfg 文件中的诊断连接字符串优先于 .wadcfgx 文件中的存储帐户。 如果在 .cscfg 文件中指定了诊断连接字符串,Visual Studio 将使用该连接字符串并忽略 .wadcfgx中的存储帐户。

“更新开发存储连接字符串...”复选框的功能是什么?

有了在发布到 Microsoft Azure 时使用 Microsoft Azure 存储帐户凭据更新诊断和缓存的开发存储连接字符串复选框,就可以方便地使用发布过程中指定的 Azure 存储帐户更新任何开发存储帐户连接字符串。 将项目发布到 Azure 时,Visual Studio 将使用在发布向导中指定的存储帐户自动更新诊断连接字符串。 但是,如果将实际存储帐户指定为诊断连接字符串,则改用该帐户。

设置诊断数据源

启用诊断数据收集后,可以准确选择要收集的数据源,以及收集哪些信息。 后续部分介绍 诊断配置 对话框中的选项卡以及每个配置选项的含义。

应用程序日志

应用程序日志包含由 Web 应用程序生成的诊断信息。 如果要捕获应用程序日志,请选中“启用应用程序日志传输 ”复选框。 若要增加或减少将应用程序日志传输到存储帐户之间的间隔,请更改 传输周期(最小值) 值。 还可以通过设置 日志级别 值来更改日志中捕获的信息量。 例如,选择“详细”以获取更多信息,或选择“关键”以仅捕获关键错误。 如果你有发出应用程序日志的特定诊断提供程序,则可以通过在 提供程序 GUID 框中添加提供程序的全局唯一标识符(GUID)来捕获日志。

应用程序日志

有关应用程序日志的详细信息,请参阅 在 Azure 应用服务中为 Web 应用启用诊断日志记录。

Windows 事件日志

若要捕获 Windows 事件日志,请选中 “启用 Windows 事件日志传输”复选框。 若要增加或减少将事件日志传输到存储帐户之间的间隔,请更改 传输周期(最小值) 值。 选中要跟踪的事件类型的复选框。

事件日志

如果要指定自定义数据源,请在 <数据源名称> 文本框中输入它,然后选择 添加。 数据源将添加到 diagnostics.cfcfg 文件。

性能计数器

性能计数器信息有助于查找系统瓶颈,并微调系统和应用程序性能。 有关详细信息,请参阅 在 Azure 应用程序中创建和使用性能计数器。 若要捕获性能计数器,请选中 “启用性能计数器传输” 复选框。 若要增加或减少将事件日志传输到存储帐户之间的间隔,请更改 传输周期(最小值) 值。 选中要跟踪的性能计数器的复选框。

性能计数器

若要跟踪未列出的性能计数器,请使用建议的语法输入性能计数器。 然后选择 添加。 虚拟机上的操作系统确定可以跟踪的性能计数器。有关语法的详细信息,请参阅 指定计数器路径

基础结构日志

基础结构日志包含有关 Azure 诊断基础结构、RemoteAccess 模块和 RemoteForwarder 模块的信息。 若要收集有关基础结构日志的信息,请选择“启用基础结构日志传输 ”复选框。 若要增加或减少将基础结构日志传输到存储帐户之间的间隔,请更改 传输周期(最小值) 值。

诊断基础结构日志

有关详细信息,请参阅使用 Azure 诊断收集日志记录数据

日志目录

日志目录包含从 Internet Information Services (IIS) 请求、失败请求,或您选择的文件夹中收集的数据。 若要捕获日志目录,请选中“启用日志目录传输 ”复选框。 若要增加或减少将日志传输到存储帐户之间的间隔,请更改 传输周期(最小值) 值。

请选中要收集的日志的复选框,例如 IIS 日志失败请求 日志。 提供默认存储容器名称,但可以更改名称。

可以从任何文件夹中捕获日志。 在“从绝对目录记录”部分指定路径,然后选择“添加目录”。 日志被记录在指定的容器中。

日志目录

ETW 日志

如果您使用 Windows 事件跟踪(ETW),并且想要捕获 ETW 日志,请选择“启用 ETW 日志传输”复选框。 若要增加或减少将日志传输到存储帐户之间的间隔,请更改 传输周期(最小值) 值。

事件是从指定的事件源和事件清单捕获的。 若要指定事件源,请在 事件源 部分中输入名称,然后选择 添加事件源。 同样,可以在 事件清单 部分中指定事件清单,然后选择 添加事件清单

ETW 日志

ASP.NET 通过 System.Diagnostics.aspx 命名空间中的类支持 ETW 框架。 继承自和扩展标准 System.Diagnostics.aspx 类的 Microsoft.WindowsAzure.Diagnostics 命名空间允许在 Azure 环境中使用 System.Diagnostics.aspx 作为日志记录框架。 有关详细信息,请参阅在 Microsoft Azure 中控制日志记录和跟踪以及在 Azure 云服务(外延支持)和虚拟机中启用诊断

故障转储

若要捕获有关角色实例何时崩溃的信息,请选中启用崩溃转储的传输复选框。 (由于 ASP.NET 处理大多数异常,因此这通常仅适用于辅助角色。若要增加或减少专用于故障转储的存储空间百分比,请更改 目录配额(%) 值。 可以更改将故障转储存储到其中的存储容器,然后选择要捕获“完整”转储还是“微型”转储

当前正在跟踪的进程将列在下一个屏幕截图中。 请勾选您想要捕获的进程的复选框。 若要向列表中添加另一个进程,请输入进程名称,然后选择“添加进程

故障转储

有关详细信息,请参阅 在 Microsoft Azure 中控制日志记录与跟踪

排查 Azure 云服务(外延支持)问题

如果您的云服务项目出现问题,例如某个角色卡在“忙碌”状态、反复重启或引发内部服务器错误,可以使用工具和方法来诊断和解决这些问题。 有关常见问题和解决方案的特定示例,以及可用于诊断和修复这些错误的概念和工具的概述,请参阅 Azure 平台即服务(PaaS)计算诊断数据

问题解答

缓冲区大小是多少,应该有多大?

在每个虚拟机实例上,配额限制本地文件系统上可以存储多少诊断数据。 此外,还可以为可用的每种诊断数据类型指定缓冲区大小。 此缓冲区大小类似于该类型的数据的单个配额。 若要确定保留的总体配额和内存量,请参阅诊断数据类型对话框的底部。 如果指定更大的缓冲区或更多类型的数据,你将接近总体配额。 可以通过修改 diagnostics.wadcfgx 配置文件来更改总体配额。 诊断数据存储在应用程序数据所在的同一文件系统上。 如果应用程序使用大量的磁盘空间,则不应增加整体诊断配额。

什么是转移期,应该有多长?

传输期是数据捕获之间经过的时间量。 每次传输期间后,数据将从虚拟机上的本地文件系统移动到存储帐户中的表。 如果收集的数据量超过传输期结束前的配额,则会丢弃较旧的数据。 如果由于数据超出缓冲区大小或总体配额而丢失数据,则可能需要减少传输周期。

时间戳位于哪个时区?

时间戳位于托管云服务的数据中心的本地时区。 日志表中使用以下三个时间戳列:

  • PreciseTimeStamp: 事件的 ETW 时间戳。 即,从客户端记录事件的时间。
  • TIMESTAMP:已向下舍入到上传频率边界的 PreciseTimeStamp 的值。 例如,如果上传频率为 5 分钟,并且事件时间为 00:17:12,则 TIMESTAMP 为 00:15:00。
  • 时间戳: 在 Azure 表中创建实体的时间戳。

收集诊断信息时如何管理成本?

默认设置(日志级别 设置为 错误传输期 设置为 1 分钟)旨在将成本降到最低。 收集更多诊断数据或降低传输期时,计算成本会增加。 不要收集比所需更多的数据,也不要忘记在不再需要数据收集时禁用数据收集。 始终可以再次启用该功能,即使在运行时也是如此,如本文前面所述。

如何从 IIS 收集失败的请求日志?

默认情况下,IIS 不会收集失败的请求日志。 可以通过编辑 Web 角色的 web.config 文件来设置 IIS 以收集失败的请求日志。

我没有收到来自 RoleEntryPoint 方法(例如 OnStart)的跟踪信息。 怎么了?

RoleEntryPoint 的方法在 WAIISHost.exe的上下文中调用,而不是在 IIS 中调用。 web.config 中通常用于启用跟踪的配置信息无效。 若要解决此问题,请将 .config 文件添加到 Web 角色项目,并将该文件命名为与包含 RoleEntryPoint 代码的输出程序集匹配。 在默认 Web 角色项目中,.config 文件的名称应 WAIISHost.exe.config。将以下行添加到此文件:

<system.diagnostics>
  <trace>
      <listeners>
          <add name "AzureDiagnostics" type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener">
              <filter type="" />
          </add>
      </listeners>
  </trace>
</system.diagnostics>

在“属性”窗口中,将“复制到输出目录”属性设置为“始终复制”。

若要详细了解 Azure 中的诊断日志记录,请参阅 启用 Azure 云服务中的诊断(扩展支持)和虚拟机在 Azure 应用服务中启用 Web 应用的诊断日志记录。