1

我花了一整天的时间尝试设置 Windows Azure 诊断模块。我使用 diagnostics.wadcfg 为工作人员和 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 中吗?

4

1 回答 1

4

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

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

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

三个注意事项:

  1. 您不能在此处使用自定义性能计数器(除非它们已经安装在机器上)。该代理在大多数将安装自定义计数器的启动脚本之前运行,因此如果您在 diagnostics.wadcfg 中配置自定义计数器,则为时过早,它将失败。
  2. 小心你的配额号码。如果您不小心为您的数据源分配了超过 4GB 的空间(除非您更改配额限制),则 Stuff 将会失败。
  3. Diagnostics.wadcfg is used as the last default. If you set a value (which you are doing programmatically), it will use that first. If it finds a value already in blob storage (think reboot), it will use that. It only works when nothing has been set - no defaults already exist.
于 2012-10-19T13:42:55.347 回答