2012-10-19 30 views
1

我花了整整一天的時間嘗試設置Windows Azure診斷模塊。 我爲worker和web角色使用diagnostics.wadcfg設置了WAD。這wadcfg文件正確複製到bin文件夾。這是我的wadcfg文件,用於WorkerRoleWebRole(更清晰的問題鏈接)。對於診斷初始化配置,我用非常簡單和通用的呼叫:只需基於xml的配置的Azure診斷問題

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

(這兩類 - RoleEntryPoint的後代)的OnStart()

連接字符串設置不當,在服務這兩個作用的部分配置包含LocalResource部分

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

Unfortunatey,因爲我期待這不是工作:沒有IIS日誌運,運到斑點,性能比較計數器和WindowsEventLogs沒有自定義目錄中的內容一旦運正確,但後來停止(自從沒有更多的行添加,因爲沒有更多的行)

也wad控制容器有奇怪的xml配置爲這兩個角色:WorkerRoleWebRole

我錯過了什麼以及通過diagnostics.wadcfg初始化診斷的正確方法是什麼?

爲什麼存儲的配置與diagnostics.wadcfg格式有很大不同?

在監視器初始化後,我應該運行DiagnosticMonitor.SetCurrentConfiguration()將當前配置存儲在Blob中嗎?

回答

4

如果您想使用diagnostics.wadcfg(我首選的角色實例默認方法),那麼您應該從OnStart()中去除所有代碼。如果您只是傳遞默認值,實際上沒有理由再調用Start。即使您沒有做任何事情(假設您包含插件),代理也會自動啓動默認設置。

另外,除非您明確需要超過4GB的磁盤配額空間,否則沒有理由再設置LocalResource。在這種情況下,您可以設置一個更大的值。默認情況下,診斷代理將自行分配4GB的本地資源。

要使用diagnostics.wadcfg,只需將其標記爲內容或複製本地(確保它已打包)。它需要位於worker角色的根目錄(Worker.cs旁)或Web目錄的bin目錄中。假設你已經正確配置了它,如果它沒有在blob存儲中找到一組配置的值,它將使用這些值作爲默認值。

三題:

  1. 這裏不能使用自定義的性能計數器(除非它們已經在機器上安裝)。代理程序在大多數將安裝自定義計數器的啓動腳本之前運行,因此,如果您在diagnostics.wadcfg中配置自定義計數器,則爲時過早,並且會失敗。
  2. 小心你的配額數字。如果您不小心將超過4GB的數據分配給您的數據源(除非您更改了配額限制),則這些數據將會失敗。
  3. Diagnostics.wadcfg用作最後一個默認值。如果你設置了一個值(你正在編程),它會首先使用它。如果它在BLOB存儲中找到一個值(想想重啓),它將使用它。它只在沒有設置任何設置時才起作用 - 沒有默認設置。
+0

非常感謝!看起來像雙重初始化(默認代理和我通過OnStart)弄亂了所有的東西。 我是否聲稱 - 如果我更改diagnostics.wadcfg並將其重新部署到當前插槽(升級實例,而不是VIPSwaping,因此不會更改DeploymentID) - 刷新的配置將不會由代理選取,直到我手動刪除當前的DeploymentID-從WAD控制容器綁定配置? –

+3

很確定,除非您使用新的部署或從wad-control-container刪除該部署ID的文件,否則不會被拾取。 – dunnry

+0

好吧,那是我最後的點;) –