Включение диагностики в Облачных службах Azure (классических) с помощью PowerShell
Внимание
Облачные службы (классическая версия) теперь устарела для всех клиентов с 1 сентября 2024 года. Все существующие запущенные развертывания будут остановлены и завершены корпорацией Майкрософт, и данные будут постоянно потеряны начиная с октября 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой. Это новая модель развертывания на основе Azure Resource Manager.
Для сбора диагностических данных, таких как журналы приложений, счетчики производительности и т. д., из облачной службы можно использовать расширение системы диагностики Azure. В этой статье описывается включение расширения диагностики Azure для облачной службы с помощью PowerShell. Сведения о компонентах, которые потребуются для выполнения инструкций в этой статье, см. в статье Установка и настройка Azure PowerShell.
Включение расширения диагностики как части развертывания облачной службы
Этот подход подходит для сценариев непрерывной интеграции, в которых в ходе развертывания облачной службы можно включить расширение системы диагностики. При создании развертывания Облачной службы вы можете включить расширение системы диагностики, передав параметр ExtensionConfiguration командлету New-AzureDeployment. Параметр ExtensionConfiguration принимает массив конфигураций диагностики, которые могут быть созданы с помощью командлета New-AzureServiceDiagnosticsExtensionConfig .
В следующем примере показано включение диагностики для облачной службы с веб-ролью и рабочей ролью, каждая из которых имеет свою конфигурацию диагностики.
$service_name = "MyService"
$service_package = "CloudService.cspkg"
$service_config = "ServiceConfiguration.Cloud.cscfg"
$webrole_diagconfigpath = "MyService.WebRole.PubConfig.xml"
$workerrole_diagconfigpath = "MyService.WorkerRole.PubConfig.xml"
$webrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WebRole" -DiagnosticsConfigurationPath $webrole_diagconfigpath
$workerrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WorkerRole" -DiagnosticsConfigurationPath $workerrole_diagconfigpath
New-AzureDeployment -ServiceName $service_name -Slot Production -Package $service_package -Configuration $service_config -ExtensionConfiguration @($webrole_diagconfig,$workerrole_diagconfig)
Если файл конфигурации диагностика указывает StorageAccount
элемент с именем учетной записи хранения, New-AzureServiceDiagnosticsExtensionConfig
командлет автоматически использует эту учетную запись хранения. Для работы этой конфигурации учетная запись хранения должна находиться в той же подписке, что и развернутая облачная служба.
Начиная с пакета AZURE SDK 2.6 файлы конфигурации расширения, созданные целевыми выходными данными публикации MSBuild, включают имя учетной записи хранения на основе строки конфигурации диагностика, указанной в файле конфигурации службы (CSCFG). В следующем сценарии показано, как проанализировать файлы конфигурации расширения из выходных данных публикации и настроить расширение диагностика для каждой роли при развертывании облачной службы.
$service_name = "MyService"
$service_package = "C:\build\output\CloudService.cspkg"
$service_config = "C:\build\output\ServiceConfiguration.Cloud.cscfg"
#Find the Extensions path based on service configuration file
$extensionsSearchPath = Join-Path -Path (Split-Path -Parent $service_config) -ChildPath "Extensions"
$diagnosticsExtensions = Get-ChildItem -Path $extensionsSearchPath -Filter "PaaSDiagnostics.*.PubConfig.xml"
$diagnosticsConfigurations = @()
foreach ($extPath in $diagnosticsExtensions)
{
#Find the RoleName based on file naming convention PaaSDiagnostics.<RoleName>.PubConfig.xml
$roleName = ""
$roles = $extPath -split ".",0,"simplematch"
if ($roles -is [system.array] -and $roles.Length -gt 1)
{
$roleName = $roles[1]
$x = 2
while ($x -le $roles.Length)
{
if ($roles[$x] -ne "PubConfig")
{
$roleName = $roleName + "." + $roles[$x]
}
else
{
break
}
$x++
}
$fullExtPath = Join-Path -path $extensionsSearchPath -ChildPath $extPath
$diagnosticsconfig = New-AzureServiceDiagnosticsExtensionConfig -Role $roleName -DiagnosticsConfigurationPath $fullExtPath
$diagnosticsConfigurations += $diagnosticsconfig
}
}
New-AzureDeployment -ServiceName $service_name -Slot Production -Package $service_package -Configuration $service_config -ExtensionConfiguration $diagnosticsConfigurations
Visual Studio Codespace использует аналогичный подход для автоматизированных развертываний Облачные службы с расширением диагностика. Полный пример см. в файле Publish-AzureCloudDeployment.ps1.
Если в конфигурации диагностики нет элемента StorageAccount
, то в командлет необходимо передать параметр StorageAccountName. Если указать параметр StorageAccountName, командлет использует учетную запись хранения, указанную в параметре, а не указанную в файле конфигурации диагностика.
Если учетная запись хранения для диагностики и облачная служба относятся к разным подпискам, то в командлет необходимо явным образом передать параметры StorageAccountName и StorageAccountKey. Параметр StorageAccountKey не требуется, если учетная запись хранения диагностика находится в той же подписке, что командлет может автоматически запрашивать и задавать значение ключа при включении расширения диагностика. Если же учетная запись хранения диагностики входит в другую подписку, командлет не сможет получить ключ автоматически, а значит, его необходимо явно указать с помощью параметра StorageAccountKey.
$webrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WebRole" -DiagnosticsConfigurationPath $webrole_diagconfigpath -StorageAccountName $diagnosticsstorage_name -StorageAccountKey $diagnosticsstorage_key
$workerrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WorkerRole" -DiagnosticsConfigurationPath $workerrole_diagconfigpath -StorageAccountName $diagnosticsstorage_name -StorageAccountKey $diagnosticsstorage_key
Включение расширения диагностики в существующей облачной службе
Для включения или обновления конфигурации диагностики в уже работающей облачной службе можно использовать командлет Set-AzureServiceDiagnosticsExtension .
Предупреждение
Когда вы включаете диагностику в существующей роли, при развертывании пакета все настроенные расширения будут отключены. Например:
- диагностика агента мониторинга Microsoft;
- мониторинг системы безопасности Microsoft Azure;
- Microsoft Antimalware
- Microsoft Monitoring Agent
- агент профилировщика службы Microsoft;
- расширение домена Microsoft Azure;
- расширение Диагностики Azure для Windows;
- расширение удаленного рабочего стола Microsoft Azure;
- сборщик журналов Microsoft Azure.
Развернув обновленную роль, вы сможете сбросить расширения с использованием портала Azure или PowerShell.
$service_name = "MyService"
$webrole_diagconfigpath = "MyService.WebRole.PubConfig.xml"
$workerrole_diagconfigpath = "MyService.WorkerRole.PubConfig.xml"
$webrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WebRole" -DiagnosticsConfigurationPath $webrole_diagconfigpath
$workerrole_diagconfig = New-AzureServiceDiagnosticsExtensionConfig -Role "WorkerRole" -DiagnosticsConfigurationPath $workerrole_diagconfigpath
Set-AzureServiceDiagnosticsExtension -DiagnosticsConfiguration @($webrole_diagconfig,$workerrole_diagconfig) -ServiceName $service_name
Получение текущей конфигурации расширения диагностики
Получите текущую конфигурацию диагностики для облачной службы с помощью командлета Get-AzureServiceDiagnosticsExtension .
Get-AzureServiceDiagnosticsExtension -ServiceName "MyService"
Удаление расширения диагностики
Чтобы отключить диагностику в облачной службе, используйте командлет Remove-AzureServiceDiagnosticsExtension.
Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService"
Если расширение диагностики было включено с помощью командлета Set-AzureServiceDiagnosticsExtension или New-AzureServiceDiagnosticsExtensionConfig без параметра Role, его можно удалить с помощью командлета Remove-AzureServiceDiagnosticsExtension без параметра Role. Если параметр Role использовался при включении расширения, он также должен быть указан при удалении расширения.
Удаление расширения диагностики из каждой отдельной роли
Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService" -Role "WebRole"
Next Steps
- Дополнительные сведения об использовании Azure диагностика и других методах устранения неполадок см. в статье "Включение диагностики в Azure Облачные службы и Виртуальные машины".
- В статье Схема конфигурации диагностики поясняются различные параметры XML-конфигураций для расширения диагностики.
- Сведения о включении расширения диагностики для виртуальных машин см. в статье Создание виртуальной машины Windows с мониторингом и диагностикой с использованием шаблона Azure Resource Manager.