Azure WorkRole Diagnostics 1.0 升級 1.5 的注意事項

Azure Diagnostics  1.0 是以前標準的 Log 機制並且內建於 Azure SDK 之中,自從 Azure SDK 2.4 / Diagnostics 1.3 之後就可以針對 Cloud Service / IaaS VM 外掛 EventSource。而且這兩種的佈署方式差異非常大,剛好系統同時有 Trace 和 EventSource ( by SLAB ) 的 Log 方式,因此打算一併統一成相同的機制並且使用未來主流支援的方式。

如同剛剛所提到的 1.0 直接內建於 Azure SDK ,因此有跟 Visual Studio 開發工具整合,直接在 Azure 專案中按右鍵就可以選擇啟用診斷。而 1.2 以後的版本則是要用 PowerShell 的方式套用規則和啟動,另外這兩個版本無法同時啟動。

希望花了很多天踢完的鐵板可以讓各位節省一些時間 :)

若您的系統是從無到有建立 Diagnostics 1.3 + 的版本的話,建議直接參考這篇文章 Azure 雲端服務和虛擬機器中啟用診斷 ,以下的做法大致上都接近。

○、程式碼的部分

基本上要注意 不可以用 Attribute ,另外,Method 的參數不可以用 Object[] 因為 Diagnostics 機制無法動態對應和轉換型別。

一、 取得 DiagnosticsExtension Config

透過 Get-AzureServiceAvailableExtension 取得WadConfig.xsd 的檔案,建議跟稍後建立的 XML 檔一併放在專案檔之中,以便日後要做自動化建置和佈署時可以用得到。

(Get-AzureServiceAvailableExtension -ExtensionName 'PaaSDiagnostics' -ProviderNamespace 'Microsoft.Azure.Diagnostics').PublicConfigurationSchema | Out-File -Encoding utf8 -FilePath 'WadConfig.xsd'

這個預設會放到 C:\WadConfig.xsd ,所以別忘記用 Admin 的權限執行 PowerShell

Get-AzureServiceAvailableExtension : Your Azure credentials have not been set up or have expired, please run Add-AzureAccount to set up your Azure credentials.

若執行指令發生認證錯誤的話,請先執行 Add-AzureAccount 輸入認證

二、建立 XML 檔

回到 WorkRole 的專案上,並在新增一個 XML 檔案

記得要在 XML 的編輯器中直接按下 F4 會出現「屬性視窗」,點選結構描述後便可以看到這個畫面,再加入剛剛下載的 WadConfig.XSD 檔案

這個檔案會做註冊的動作,請移到跟專案目錄 或是版本管控之中,以便其他人可以直接使用取得或是可以給自動化佈署使用。

從網站上將這一整段的 XML 直接 copy 過來,這裡註解掉的意思是我不要分不同的 Blob Table ,全部都放在 WorkRoleLogTable 之中。請依系統的需求來決定

三、指定 Diagnostics Extension

執行這個語法之前,有幾個部分要特別注意

  1. CloudService 或是 VM 的服務務必要是「作用中」
  2. CloudService 相關的名稱都不可以有 Dot 「.」
    圖片中的錯誤是 Role 的名稱有一個「.」
    Slot 要注意是 「Staging」 的還是 「Production」 的,另外, Service Name 就是 CloudService 的服務名稱,而 Role 就是要填入 WorkRole 的 NameSapce  ,若沒有問題則就會看到設定已經進去了。
     
  3. 這個設定只要佈署一次之後就會生效,除非服務整個刪除或是放在不同的 Slot 上
  4. Azure 專案上的「啟用診斷」必須不能勾選
  5. EventSource 上不可以用 Attribute ,Method 的參數也不可以用 Param Object[]

四、驗證 Diagnostics 是否正確運作

執行這個指令後就可以看到是否有在運作這裡要千萬注意,在 Cloud Service 和 Role 的命名規則中是不可以有「.」的存在,雖然用 PowerShell 不會出錯但它會自動幫你去掉,因此導致 Diagnostic 會無法正常對應。

五、Azure WebSites 的 SLAB

若您的系統有 WorkRole / WebSite 同時存在可能會考慮用到 SLAB 記錄 LOG ,那麼 EventSource 就勢必要用 Attribute 進行設定。因此這個設定的方式不可以跟 Diagnostics 1.2+ 的 EventSource 合併使用,去掉這個屬性的話會變成 SLAB 無法正常運作。所以必須要拆開不同的 Class

結果

若是設定都沒有出錯的話,在 Blob Table 上就會自動產生 WadWorkRoleLogTable 並且每 5 分鐘會批次寫入一次 Log 資料

 

參考資料