天天看點

【Azure 雲服務】Azure Cloud Service (Extended Support) 雲服務開啟診斷日志插件 WAD Extension (Windows Azure Diagnostic) 無法正常工作的原因

問題描述

在Azure中國區上面建立一個雲服務(外延支援)後,根據官方文檔(在雲服務(外延支援)中應用 Azure 診斷擴充: https://docs.azure.cn/zh-cn/cloud-services-extended-support/enable-wad),啟用了WAD擴充來收集執行個體的Metrics資訊到Stroage Account。根據官方的執行個體,配置好了公共配置 XML 檔案(PublicWadConfig.xsd)和專用 XML 配置檔案(PrivateConfig.xml)後,在Storage Account中卻沒有受到名額資料。

相應的配置檔案為:

PublicWadConfig.xsd

<?xml version="1.0" encoding="utf-8"?>
<PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <WadCfg>
    <DiagnosticMonitorConfiguration overallQuotaInMB="25000">
      <PerformanceCounters scheduledTransferPeriod="PT1M">
        <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT1M" unit="percent" />
        <PerformanceCounterConfiguration counterSpecifier="\Memory\Committed Bytes" sampleRate="PT1M" unit="bytes"/>
      </PerformanceCounters>
      <EtwProviders>
        <EtwEventSourceProviderConfiguration provider="SampleEventSourceWriter" scheduledTransferPeriod="PT5M">
          <Event id="1" eventDestination="EnumsTable"/>
          <DefaultEvents eventDestination="DefaultTable" />
        </EtwEventSourceProviderConfiguration>
      </EtwProviders>
    </DiagnosticMonitorConfiguration>
  </WadCfg>
</PublicConfig>      

PrivateConfig.xml

<?xml version="1.0" encoding="utf-8"?>
<PrivateConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <StorageAccount name="stroage account name" key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
</PrivateConfig>      

執行的PowerShell指令為:

# 登入中國區Azure
Connect-AzAccount -Environment AzureChinaCloud
# 選擇訂閱号
Select-AzSubscription -Subscription 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

# 如果沒有安裝az cloud service子產品,用下面指令安裝
Install-Module -Name Az.CloudService  -Scope CurrentUser -Repository PSGallery -Force

# Create WAD extension object
$storageAccountKey = Get-AzStorageAccountKey -ResourceGroupName "resource group name" -Name "storage account name"
$configFilePath = "PublicWadConfig.xsd"
$wadExtension = New-AzCloudServiceDiagnosticsExtension -Name "WADExtension" -ResourceGroupName "resource group name" -CloudServiceName "cloud service name" -StorageAccountName "csstorageaccounttest01" -StorageAccountKey $storageAccountKey[0].Value -DiagnosticsConfigurationPath $configFilePath -TypeHandlerVersion "1.5" -AutoUpgradeMinorVersion $true 

# Add <privateConfig> settings
$wadExtension.ProtectedSetting = "<Insert WAD Private Configuration as raw string here>"

# Get existing Cloud Service
$cloudService = Get-AzCloudService -ResourceGroup "resource group name" -CloudServiceName "cloud service name"

# Add WAD extension to existing Cloud Service extension object
$cloudService.ExtensionProfile.Extension = $cloudService.ExtensionProfile.Extension + $wadExtension

# Update Cloud Service
$cloudService | Update-AzCloudService      

在Cloud Service的Extension頁面檢視到WADExtention 已經配置好(狀态為Success)。

【Azure 雲服務】Azure Cloud Service (Extended Support) 雲服務開啟診斷日志插件 WAD Extension (Windows Azure Diagnostic) 無法正常工作的原因
【Azure 雲服務】Azure Cloud Service (Extended Support) 雲服務開啟診斷日志插件 WAD Extension (Windows Azure Diagnostic) 無法正常工作的原因

但是在配置的Storage Account中,卻遲遲收集到不資料。

問題分析

為了分析這個問題,需要開啟應用遠端桌面擴充(RDP)檢視 WAD插件的日志。相應日志的路徑為:

C:\Resources\Directory\<guid>.<webroelx>.DiagnosticStore\WAD0107\Tables

【Azure 雲服務】Azure Cloud Service (Extended Support) 雲服務開啟診斷日志插件 WAD Extension (Windows Azure Diagnostic) 無法正常工作的原因

但日志檔案為tsf格式,可以通過table2csv.exe 進行轉換 (PS: table2csv.exe 檔案路徑位于 > D:\Packages\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\<latest extension version>\Monitor\x64\table2csv.exe),使用 <PATH>\table2scv.exe maeventtable.tsf 指令把檔案轉換為csv格式後 ,即可檢視日志内容:

【Azure 雲服務】Azure Cloud Service (Extended Support) 雲服務開啟診斷日志插件 WAD Extension (Windows Azure Diagnostic) 無法正常工作的原因

在日志内容中發現:

WinHttpSendRequest failed; URL=https://********************.table.core.windows.net
Failed to send bytes to XTable WADPerformanceCountersTable as Xstore rejected the request; Status=12007
Retry:#0; failed to send out data; XTable WADPerformanceCountersTable; PartitionKey 0637848351000000000      

因為中國區Storage Account的Endpoint與Global不一樣,消息中發現的Endpoint為 core.windows.net, 而中國區的endpoint為 core.chinacloudapi.cn。由于在添加的配置檔案中,并沒有為Storage Account特别指定Endpoint,導緻系統預設使用了Global位址。

是以解決問題的方案就是在PrivateConfig.xml檔案中添加Endpoint [ endpoint="https://core.chinacloudapi.cn" ]。

問題解決

修改PrivateConfig檔案,在StorageAccount 節點中添加 endpoint,修改後的檔案為:

PrivateConfig.xml

<?xml version="1.0" encoding="utf-8"?>
<PrivateConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
  <StorageAccount name="stroage account name" key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" endpoint="https://core.chinacloudapi.cn" />
</PrivateConfig>      

在Powershell的腳本中可以通過  Get-Content -Path privateConfig.xml 來擷取上文内容,并指派給 $wadExtension.ProtectedSetting。

完整的PowerShell腳本為:

Connect-AzAccount -Environment AzureChinaCloud
# 選擇訂閱号
Select-AzSubscription -Subscription 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

# 如果沒有安裝az cloud service子產品,用下面指令安裝
Install-Module -Name Az.CloudService  -Scope CurrentUser -Repository PSGallery -Force

# Create WAD extension object
$storageAccountKey = Get-AzStorageAccountKey -ResourceGroupName "resource group name" -Name "storage account name"
$configFilePath = "PublicWadConfig.xsd"
$wadExtension = New-AzCloudServiceDiagnosticsExtension -Name "WADExtension" -ResourceGroupName "resource group name" -CloudServiceName "cloud service name" -StorageAccountName "csstorageaccounttest01" -StorageAccountKey $storageAccountKey[0].Value -DiagnosticsConfigurationPath $configFilePath -TypeHandlerVersion "1.5" -AutoUpgradeMinorVersion $true 

# Add <privateConfig> settings
$wadExtension.ProtectedSetting = Get-Content -Path PrivateConfig.xml

# Get existing Cloud Service
$cloudService = Get-AzCloudService -ResourceGroup "resource group name" -CloudServiceName "cloud service name"

# Add WAD extension to existing Cloud Service extension object
$cloudService.ExtensionProfile.Extension = $cloudService.ExtensionProfile.Extension + $wadExtension

# Update Cloud Service
$cloudService | Update-AzCloudService      

最終,通過 Microsoft Azure Storage Explorer工具檢視Cloud Service的Metrics資料。

收集Metrics資料成功!

附件一:WAD Extension不允許使用重複的名稱,是以可以通過名稱過濾掉需要删除的Extension名稱後,執行以下的腳本

# Get existing Cloud Service
$cloudService = Get-AzCloudService -ResourceGroup "your resource group" -CloudServiceName "cloud service name"

$cloudService.ExtensionProfile.Extension = $cloudService.ExtensionProfile.Extension | Where-Object { $_.Name -ne "WADExtension" }

# Update Cloud Service
$cloudService | Update-AzCloudService      

參考資料

在雲服務(外延支援)中應用 Azure 診斷擴充:https://docs.azure.cn/zh-cn/cloud-services-extended-support/enable-wad

Private Config Schem: https://docs.microsoft.com/en-us/azure/azure-monitor/agents/diagnostics-extension-schema-windows#example-configuration

"PrivateConfig" {
    "storageAccountName": "diagstorageaccount",
    "storageAccountKey": "{base64 encoded key}",
    "storageAccountEndPoint": "https://core.windows.net",
    "storageAccountSasToken": "{sas token}",
    "EventHub": {
        "Url": "https://myeventhub-ns.servicebus.windows.net/diageventhub",
        "SharedAccessKeyName": "SendRule",
        "SharedAccessKey": "{base64 encoded key}"
    },
    "AzureMonitorAccount": {
        "ServicePrincipalMeta": {
            "PrincipalId": "{Insert service principal client Id}",
            "Secret": "{Insert service principal client secret}"
        }
    },
    "SecondaryStorageAccounts": {
        "StorageAccount": [
            {
                "name": "secondarydiagstorageaccount",
                "key": "{base64 encoded key}",
                "endpoint": "https://core.windows.net",
                "sasToken": "{sas token}"
            }
        ]
    },
    "SecondaryEventHubs": {
        "EventHub": [
            {
                "Url": "https://myeventhub-ns.servicebus.windows.net/secondarydiageventhub",
                "SharedAccessKeyName": "SendRule",
                "SharedAccessKey": "{base64 encoded key}"
            }
        ]
    }
}      

當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!

繼續閱讀