Azure诊断 - 运行时def与wadcfg

时间:2012-03-20 09:31:35

标签: azure azure-diagnostics

我正在尝试了解在Windows Azure中配置诊断程序的各种方法。 到目前为止,我已经设置了Azure正确使用的diagnostics.wadcfg,因为我在wad-control-container中的Diagnostics存储的xml blob中检索其内容(并且表以正确的刷新率更新)。 p>

现在我想覆盖cscfg中的一些字段,以便例如增加所有实例的日志传输周期(无需更新每个wad-control-container文件,如果是实例,将会删除它们回收btw)。 所以在我的WebRole.Run()中,我从RoleEnvironment.GetConfigurationSettingValue()中获取一个参数,并尝试将其应用于当前配置;但我的问题是我从DiagnosticMonitor.GetDefaultInitialConfiguration()读取的值与我的diagnostics.wadcfg的内容不对应,并且在那里设置新值似乎没有任何影响。

有人能解释一下从diagnostics.wadcfg获取的内容与您在运行时可以设置的值之间的关系吗?

由于

3 个答案:

答案 0 :(得分:3)

GetDefaultInitialConfiguration()不会返回您当前的设置,因为它的名称表明它需要默认配置。如果需要采用适当的配置,则必须使用GetCurrentConfiguration方法。

但是,如果您只需要加强转移,则可以使用Cerebrata's Azure Diagnostics Manager来快速启动角色的按需转移。

您还可以将Windows Azure诊断管理cmdlet用于powershell。查看this article

希望这有帮助!

答案 1 :(得分:2)

为了利用wadcfg文件中的值,可以使用以下代码代码来访问当前的DiagnosticsMonitorConfiguration:

var cloudStorageAccount = CloudStorageAccount.Parse(
            RoleEnvironment.GetConfigurationSettingValue(WADStorageConnectionString));
var roleInstanceDiagnosticManager = cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
            RoleEnvironment.DeploymentId,
            RoleEnvironment.CurrentRoleInstance.Role.Name,
            RoleEnvironment.CurrentRoleInstance.Id);
var dmc = roleInstanceDiagnosticManager.GetCurrentConfiguration();
// Set different logging settings
dmc.Logs....
dmc.PerformanceCounters....
// don't forget to update
roleInstanceDiagnosticManager.SetCurrentConfiguration(dmc);

答案 2 :(得分:0)

Boris Lipshitz的代码现在不起作用(Breaking Changes in Windows Azure Diagnostics (SDK 2.0)):“DeploymentDiagnosticManager构造函数现在接受存储帐户的连接字符串而不是CloudStorageAccount对象”。

更新了SDK 2.0 +的代码:

    var roleInstanceDiagnosticManager = new RoleInstanceDiagnosticManager(
// Add StorageConnectionString to your role settings for this to work
                CloudConfigurationManager.GetSetting("StorageConnectionString"), 
                RoleEnvironment.DeploymentId,
                RoleEnvironment.CurrentRoleInstance.Role.Name,
                RoleEnvironment.CurrentRoleInstance.Id);
    var dmc = roleInstanceDiagnosticManager.GetCurrentConfiguration();
    // Set different logging settings
    dmc.Logs....
    dmc.PerformanceCounters....
    // don't forget to update
    roleInstanceDiagnosticManager.SetCurrentConfiguration(dmc)