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

说明

本文适用于 Azure Azure 云服务(扩展支持)。 云服务(经典版)自 2024 年 8 月 31 日起停用。 有关详细信息,请参阅 云服务(经典)部署模型将于 2024 年 8 月 31 日停用。 对于新开发,我们建议使用专为特定目的设计的较新服务类型,例如 Azure 应用服务Azure FunctionsAzure 容器应用。 有关可用服务的最新列表,请参阅 Azure 产品目录

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

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

可以使用以下选项之一来设置 Azure 诊断:

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

  • 使用 Visual Studio 2019 或更早版本中的 Cloud Explorer 或服务器资源管理器更改正在运行的云服务或虚拟机的诊断设置。

若要设置 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 将使用在发布向导中指定的存储帐户自动更新诊断连接字符串。 但是,如果将实际存储帐户指定为诊断连接字符串,则改用该帐户。

在 Azure 虚拟机上启用诊断

在 Visual Studio 中,可以收集 Azure 虚拟机的诊断数据。

在 Azure 虚拟机上启用诊断

  1. 在服务器资源管理器中,选择 Azure 节点,然后连接到 Azure 订阅(如果尚未连接)。

  2. 展开“虚拟机”节点。 可以创建新的虚拟机,也可以选择现有节点。

  3. 在所需虚拟机的快捷菜单上,选择 配置。 此时会显示“虚拟机配置”对话框。

    配置 Azure 虚拟机

  4. 如果尚未安装,请添加 Log Analytics 代理诊断扩展。 使用此扩展,可以收集 Azure 虚拟机的诊断数据。 在“已安装的扩展”下的“选择可用扩展”下拉列表框中,选择“Microsoft Monitoring Agent 诊断”。

    安装 Azure 虚拟机扩展

    说明

    其他诊断扩展适用于虚拟机。 有关详细信息,请参阅适用于 Windows 虚拟机扩展和功能。

  5. 若要添加扩展并查看其 诊断配置 对话框,请选择 添加

  6. 若要指定存储帐户,请选择 配置,然后选择 确定

    每个选项卡(常规日志目录除外)表示可以收集的诊断数据源。

    启用 Azure 诊断和配置

    默认选项卡 常规提供以下诊断数据收集选项:错误仅所有信息,以及 自定义计划。 默认选项(错误仅)占用最少的存储量,因为它不会传输警告或跟踪消息。 所有信息 选项传输的信息最多,因此,在存储方面是最昂贵的选项。

  7. 对于此示例,请选择 自定义计划 选项,以便可以自定义收集的数据。

  8. MB 框中的磁盘配额指定要在存储帐户中为诊断数据分配多少空间。 如果需要,可以更改默认值。

  9. 在要收集的诊断数据的每个选项卡上,选中其“启用 <日志类型> 的传输”复选框。

    例如,如果要收集应用程序日志,请选择 应用程序日志”选项卡上的“启用应用程序日志传输”复选框。此外,请指定每个诊断数据类型所需的任何其他信息。 有关每个选项卡的配置信息,请参阅本文后面部分 设置诊断数据源 部分。

  10. 允许收集所有需要的诊断数据后,请选择“确定”。

  11. 保存更新的项目。

    Microsoft Azure 活动日志 窗口中的消息指示虚拟机已更新。

设置诊断数据源

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

应用程序日志

应用程序日志包含由 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 中控制日志记录与跟踪

查看诊断数据

收集云服务或虚拟机的诊断数据后,可以查看它。

查看云服务诊断数据

  1. 照常部署云服务,然后运行它。

  2. 可以在 Visual Studio 生成的报表或存储帐户中的表中查看诊断数据。 若要查看报表中的数据,请打开 Cloud Explorer 或服务器资源管理器,打开所需角色的节点快捷菜单,然后选择“查看诊断数据”

    查看诊断数据

    将显示显示可用数据的报表。

    Visual StudioAzure 诊断报表

    如果未显示最新数据,可能需要等待传输期过。

    若要立即更新数据,请选择 刷新 链接。 若要自动更新数据,请在 自动刷新 下拉列表框中选择一个间隔。 若要导出错误数据,请选择 “导出到 CSV”按钮,创建可在 Excel 工作表中打开的逗号分隔值文件。

    在 Cloud Explorer 或服务器资源管理器中,打开与部署关联的存储帐户。

  3. 打开表查看器中的诊断表,然后查看收集的数据。 对于 IIS 日志和自定义日志,可以打开 Blob 容器。 下表列出了包含不同日志文件数据的表或 Blob 容器。 除了该日志文件的数据外,表项还包含 EventTickCountDeploymentIdRoleRoleInstance,以帮助确定哪些虚拟机和角色生成了数据,以及何时生成数据。

    诊断数据 描述 位置
    应用程序日志 代码通过调用 System.Diagnostics.Trace 类的方法生成的日志。 WADLogsTable
    事件日志 虚拟机上 Windows 事件日志中的数据。 Windows 将这些日志中的信息存储在这些日志中,但应用程序和服务也使用日志来报告错误或日志信息。 WADWindowsEventLogsTable
    性能计数器 可以在虚拟机上提供的任何性能计数器上收集数据。 操作系统提供性能计数器,其中包括许多统计信息,例如内存使用情况和处理器时间。 WADPerformanceCountersTable
    基础设施日志 从诊断基础结构本身生成的日志。 WADDiagnosticInfrastructureLogsTable
    IIS 日志 记录 Web 请求的日志。 如果云服务获得大量流量,则这些日志可能很长。 最好仅在需要时才收集和存储此数据。 在 Blob 容器中,相应部署、角色和实例路径的 wad-IIS-failedreqlogs 下,可以找到失败请求的日志。 可以在 wad-IIS-logfiles 下找到完整的日志。 每个文件的条目都会被记录在 WADDirectories 表中。
    故障转储 提供云服务进程(通常为辅助角色)的二进制映像。 wad-crush-dumps Blob 容器
    自定义日志文件 预定义的数据日志。 可以在代码中指定存储帐户中自定义日志文件的位置。 例如,可以指定自定义 Blob 容器。
  4. 如果截断了任何类型的数据,可以尝试增加该数据类型的缓冲区,或者缩短将数据从虚拟机传输到存储帐户之间的间隔。

  5. (可选)偶尔从存储帐户中清除数据,以减少总体存储成本。

  6. 当您进行完整部署时,Azure 中的 diagnostics.cscfg 文件会被更新,云服务会检测到诊断配置的任何更改。 如果改为更新现有部署,则 .cscfg 文件不会在 Azure 中更新。 不过,仍可以按照下一部分中的步骤更改诊断设置。 有关执行完整部署和更新现有部署的详细信息,请参阅 发布 Azure 应用程序向导

查看虚拟机诊断数据

  1. 在虚拟机的快捷菜单上,选择 查看诊断数据

    查看 Azure 虚拟机 中的诊断数据

    此时会显示 诊断摘要 对话框。

    Azure 虚拟机诊断摘要

    如果未显示最新数据,可能需要等待传输期过。

    若要立即更新数据,请选择 刷新 链接。 若要自动更新数据,请在 自动刷新 下拉列表框中选择一个间隔。 若要导出错误数据,请选择 “导出到 CSV”按钮,创建可在 Excel 工作表中打开的逗号分隔值文件。

部署后设置云服务诊断

如果要调查的问题涉及已在运行的云服务,则可能要收集在最初部署此角色之前未指定的数据。 在这种情况下,可以通过更改服务器资源管理器中的设置来开始收集数据。 可以为单个实例或角色中的所有实例设置诊断,具体取决于是从实例的快捷菜单还是为角色打开 诊断配置 对话框。 如果配置角色节点,则所做的任何更改都适用于所有实例。 如果配置实例节点,则所做的任何更改仅适用于该实例。

为正在运行的云服务设置诊断功能

  1. 在服务器资源管理器中,展开 云服务 节点,然后展开节点列表以查找要调查的角色或实例(或两者)。

    配置诊断

  2. 在实例节点或角色节点的快捷菜单上,选择 更新诊断设置,然后选择要收集的诊断设置。

    有关配置设置的信息,请参阅本文 设置诊断数据源 部分。 有关如何查看诊断数据的信息,请参阅本文 查看诊断数据 部分。

    如果在服务器资源管理器中更改数据收集,更改将一直有效,直到完全重新部署云服务。 如果使用默认的发布设置,则不会覆盖这些更改。 默认的发布设置是更新现有部署,而不是执行完全重新部署。 若要确保设置在部署时清除,请转到发布向导中的“高级设置” 选项卡,然后清除 部署更新 复选框。 清除复选框后重新部署时,设置将恢复到 .wadcfgx 文件中的配置,即通过角色的 属性 编辑器设定的那些设置。 如果更新部署,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 应用的诊断日志记录。