問題描述
在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)。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5ADN1EDN3MTOx0CO2AjMwYzM4EDOwQDMyIDMy0iMwgzNyEjMvwFNwIjMwIzLcJDM4cjMxIzLcd2bsJ2Lc12bj5ycn9Gbi52YuIjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
但是在配置的Storage Account中,卻遲遲收集到不資料。
問題分析
為了分析這個問題,需要開啟應用遠端桌面擴充(RDP)檢視 WAD插件的日志。相應日志的路徑為:
C:\Resources\Directory\<guid>.<webroelx>.DiagnosticStore\WAD0107\Tables
但日志檔案為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格式後 ,即可檢視日志内容:
在日志内容中發現:
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}"
}
]
}
}
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!