2012-03-20 101 views
4

我想了解在Windows Azure中配置診斷程序的各種方法。 到目前爲止,我已經設置了一個由Azure正確使用的diagnostics.wadcfg,因爲我在由wad-control-container(以正確的刷新率更新表中)中的Diagnostics存儲的xml blob中檢索其內容。Azure診斷 - 運行時def與wadcfg

現在我想重寫cscfg中的一些字段,以便提高所有實例的日誌傳輸週期,例如(無需更新每個wad-control-container文件,這些文件將在實例回收btw)。 因此,在我的WebRole.Run()中,我從RoleEnvironment.GetConfigurationSettingValue()中獲取一個參數並嘗試將其應用於當前配置;但我的問題是,我從DiagnosticMonitor.GetDefaultInitialConfiguration()讀取的值與我的diagnostics.wadcfg的內容不符,並且在那裏設置新值似乎沒有任何作用。

任何人都可以解釋從diagnostics.wadcfg中獲取的內容和您可以在運行時設置的值之間的關係嗎?

感謝

回答

3

GetDefaultInitialConfiguration()將不會返回您的當前設置,becasue如同它的名字指出它需要一個默認配置。如果需要採取適當的配置,則必須使用GetCurrentConfiguration方法。

但是,如果您只需要增加轉帳,則可以使用例如Cerebrata's Azure Diagnostics Manager快速啓動按需轉移角色。

您還可以將Windows Azure診斷管理cmdlet用於powershell。檢查出this article

希望這會有所幫助!

+0

真該方法的名稱應該環狀鈴......感謝您的快速和全面的答覆! – ThomasWeiss 2012-03-20 10:08:51

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); 
0

鮑里斯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)