初始化或更改 Azure 诊断配置

更新时间: 2015年11月

可以通过以下方法收集诊断数据:将 Windows Azure 诊断模块导入到服务模型中,然后配置从中收集诊断数据的数据源。诊断监视器在 Windows Azure 和 Azure 计算模拟器中运行以收集角色实例的诊断数据。如果诊断模块已导入到角色的服务模型中,在角色实例启动时,将自动启动诊断监视器。必须在诊断监视器配置中添加数据源才能收集诊断数据。如果未明确配置诊断监视器,在角色启���时,将使用默认配置。默认情况下,仅将某些可用的数据源添加到诊断监视器中,你必须使用 diagnostics.wadcfg 文件配置其他数据源的集合。将在角色实例中收集并存储诊断数据,但不会永久保存到存储中,除非在 ServiceConfiguration.cscfg 文件中指定了存储帐户。在将应用程序部署到 Windows Azure 后,你还可以从在 Windows Azure 外部运行的应用程序中远程更改诊断监视器配置。有关在你的应用程序中启用诊断的详细步骤,请参阅如何在云服务中启用诊断

要收集诊断数据,你必须在服务模型中为要从中收集诊断数据的每个角色导入诊断模块。可通过在 ServiceDefinition.csdef 文件中添加 Import 元素来导入该模块。下面的示例说明了为 Web 角色定义的 Import 元素:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyHostedService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
  <WebRole name="WebRole1">
    <!--<Sites> ... </Sites> -->
    <!-- <Endpoints> ... </Endpoints> -->
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WebRole>
</ServiceDefinition>

有关定义服务定义文件和服务配置文件的详细信息,请参阅 Windows Azure 架构参考。有关为托管服务定义服务模型的详细信息,请参阅Set Up a Hosted Service for Windows Azure

默认情况下,不会将诊断数据永久保存到存储中。要将诊断数据传输到存储,必须在 ServiceConfiguration.cscfg 文件中定义一个连接字符串。下面的示例说明了如何定义连接字符串以将数据传输到 Microsoft Azure 存储模拟器:

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="MyHostedService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
  <Role name="WebRole1">
    <Instances count="1" />
    <ConfigurationSettings>
    <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

如果要在 Windows Azure 中使用存储帐户,必须更改连接字符串以包括帐户名和帐户密钥:


<ConfigurationSettings>
   <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=<AccountName>;AccountKey=<AccountKey>"/>
</ConfigurationSettings>

AccountNameAccountKey 值位于 Windows Azure 管理门户的存储帐户仪表板上的“管理访问密钥”下面。连接字符串的协议必须为 https

默认情况下,仅将某些可用的数据源添加到诊断监视器中,你必须添加其他数据源以收集特定类型的诊断数据。有关可以配置应用程序以收集的诊断数据类型的信息,请参阅诊断数据源

可以通过以下方法收集诊断数据:将诊断模块导入到服务模型中,然后配置从中收集诊断数据的数据源。必须在诊断监视器配置中添加数据源才能收集诊断数据。可以通过几种方法配置诊断;在部署时使用 diagnostics.wadcfg 配置文件是管理角色范围内的配置的首选方法。有关详细信息,请参阅诊断配置机制和优先顺序

在部署云服务后,你还可以从在 Windows Azure 外部运行的其他应用程序中远程更改你的应用程序中的诊断监视器配置。

在版本 1.2 中,可以通过编程方式配置诊断监视器。1.3 和更高版本中已弃用此功能。在版本 1.2、1.3 和更高版本中,你可以改用 XML 配置文件 (diagnostics.wadcfg),通过 Microsoft Azure SDK 配置 Diagnostics。与在 OnStart 方法中编写代码相比,这种方法具有很多优点:

  1. 在运行 OnStart 方法之前启动诊断,以便捕获和记录启动任务中的错误。

  2. 在重新启动后,将保留在运行时对配置进行的任何更改。

  3. 诊断配置更改不需要重新生成代码。

  4. 你可以使用特定配置自动启动诊断监视器,而无需编写额外的代码(这可能引发异常而导致角色无法启动)。

对于 Web 角色,diagnostics.wadcfg 配置文件位于角色的根目录下面的 bin 目录中。对于辅助角色,diagnostics.wadcfg 配置文件位于角色的根目录中。在导入诊断模块时,如果这两个位置之一中包含配置文件,诊断监视器将使用配置文件配置设置,而不是使用默认设置。在部署 Web 或辅助角色时,diagnostics.wadcfg 文件中的配置信息将写入到存储帐户的 wad-control-container 容器中。有关使用诊断配置文件的详细信息,请参阅使用 Azure 诊断配置文件

可以将 Start 方法与 DiagnosticMonitorConfiguration 一起使用,以便在角色的 OnStart 方法中设置诊断配置。这种方法对新部署非常有效,但对更新部署无效,因此最好避免使用。

note备注
这适用于 Azure SDK 2.4 和更低版本。

在部署云服务后,你可以通过在 Windows Azure 外部的应用程序中运行的代码使用 DeploymentDiagnosticManager 类远程更改诊断监视器配置。从该类中,你可以修改一个或多个角色实例的诊断监视器。也可以使用 RoleInstanceDiagnosticManager 类仅更改一个角色实例的诊断监视器配置。有关详细信息,请参阅远程更改诊断监视器配置

note备注
这适用于 Azure SDK 2.4 和更低版本。

另请参阅

显示: