我花了一整天时间尝试设置Windows Azure诊断模块 . 我使用diagnostics.wadcfg为worker和web角色设置了WAD . 此wadcfg文件正确复制到bin文件夹 . 这是我的WorkerRole和WebRole的wadcfg文件(更明确的问题链接) . 对于诊断配置初始化,我使用非常简单和通用的调用:just
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配置:WorkerRole和WebRole .
我缺少什么以及通过diagnostics.wadcfg初始化Diagnostic的正确方法是什么?
为什么存储配置与diagnostics.wadcfg格式不同?
我应该在监视器初始化后运行 DiagnosticMonitor.SetCurrentConfiguration()
以将当前配置存储在Blob中吗?
1 回答
如果要使用diagnostics.wadcfg(我的首选角色实例默认方法),那么您应该从OnStart()中删除所有代码 . 如果你只是传递默认值,实际上没有理由再调用Start . 即使您什么也不做(假设您包含插件),代理将自动以默认值启动 .
此外,除非您特别需要超过4GB的磁盘配额空间,否则没有理由再设置LocalResource . 在这种情况下,您可以设置更大的值 . 默认情况下,诊断代理将为自己分配4GB的本地资源 .
要使用diagnostics.wadcfg,只需将其标记为内容或复制本地(确保它已打包) . 它需要位于辅助角色的根(Worker.cs旁边)或Web角色的bin目录中 . 假设您已正确配置它,如果它尚未在blob存储中找到一组已配置的值,它将使用这些值作为默认值 .
三个音符:
您不能在此处使用自定义性能计数器(除非它们已安装在计算机上) . 代理程序在大多数将安装自定义计数器的启动脚本之前运行,因此如果在diagnostics.wadcfg中配置自定义计数器,则为时太晚而且会失败 .
小心您的配额号码 . 如果您不小心为数据源分配了超过4GB的内容(除非您更改配额限制),则内容将失败 .
Diagnostics.wadcfg用作最后一个默认值 . 如果您设置一个值(您正在以编程方式执行),它将首先使用该值 . 如果它在blob存储中找到了一个值(想想重启),它就会使用它 . 它仅在未设置任何内容时有效 - 没有默认值 .