基于xml的配置的Azure诊断问题

时间:2012-10-19 12:46:03

标签: logging azure azure-diagnostics

我花了一整天时间尝试设置Windows Azure诊断模块。 我使用diagnostics.wadcfg为worker和web角色设置了WAD。此wadcfg文件正确复制到bin文件夹。这是WorkerRoleWebRole的wadcfg文件(链接更明确的问题)。对于诊断配置初始化,我使用非常简单和通用的调用:只需

DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
在WorkerRole和WebRole中的

(两个类 - RoleEntryPoint的后代)OnStart()

正确设置连接字符串,服务配置中的两个角色部分都包含LocalResource部分

<LocalResources>
    <LocalStorage name="DiagnosticStore" sizeInMB="5000" cleanOnRoleRecycle="false"/>
</LocalResources>

不幸的是,这不符合我的预期:没有发送IIS日志,没有自定义目录内容发送到blob,性能计数器和WindowsEventLogs一旦正确发货,但随后暂停(由于初始发送很少,不再添加行)

另外wad-control-container对两个角色都有非常奇怪的xml配置:WorkerRoleWebRole

我缺少什么以及通过diagnostics.wadcfg初始化诊断的正确方法是什么?

为什么存储配置与diagnostics.wadcfg格式不同?

我应该在监视器初始化之后运行DiagnosticMonitor.SetCurrentConfiguration()以将当前配置存储在Blob中吗?

1 个答案:

答案 0 :(得分:4)

如果要使用diagnostics.wadcfg(我的首选角色实例默认方法),那么您应该从OnStart()中删除所有代码。如果你只是传递默认值,实际上没有理由再调用Start。即使您没有做任何事情,代理也会自动以默认值启动(假设您包含插件)。

此外,除非您特别需要超过4GB的磁盘配额空间,否则没有理由再设置LocalResource。在这种情况下,您可以设置更大的值。默认情况下,诊断代理将为自己分配4GB的本地资源。

要使用diagnostics.wadcfg,只需将其标记为内容或复制本地(确保将其打包)。它需要位于辅助角色的根(Worker.cs旁边)或Web角色的bin目录中。假设您已正确配置它,如果它尚未在blob存储中找到一组已配置的值,它将使用这些值作为默认值。

三个注释:

  1. 您不能在此处使用自定义性能计数器(除非它们已安装在计算机上)。代理程序在大多数将安装自定义计数器的启动脚本之前运行,因此如果在diagnostics.wadcfg中配置自定义计数器,则为时过早,它将失败。
  2. 请注意您的配额号码。如果您不小心为数据源分配了超过4GB的内容(除非您更改配额限制),则会失败。
  3. Diagnostics.wadcfg用作最后一个默认值。如果您设置了一个值(您正在以编程方式执行),它将首先使用该值。如果它在blob存储中找到了一个值(想想重启),它就会使用它。它仅在未设置任何内容时有效 - 没有默认值。