Partilhar via


Habilitar diagnósticos nos Serviços de Nuvem do Azure (clássico) usando o PowerShell

Importante

Os Serviços de Nuvem (clássicos) agora foram preteridos para novos clientes e serão desativados em 31 de agosto de 2024 para todos os clientes. Novas implantações devem usar o novo modelo de implantação baseado no Azure Resource Manager Serviços de Nuvem do Azure (suporte estendido).

Você pode coletar dados de diagnóstico, como logs de aplicativos, contadores de desempenho, etc., de um Serviço de Nuvem usando a extensão de Diagnóstico do Azure. Este artigo descreve como habilitar a extensão de Diagnóstico do Azure para um Serviço de Nuvem usando o PowerShell. Consulte Como instalar e configurar o Azure PowerShell para obter os pré-requisitos necessários para este artigo.

Ativar a extensão de diagnóstico como parte da implementação de um Serviço Cloud

Essa abordagem é aplicável a cenários do tipo de integração contínua, onde a extensão de diagnóstico pode ser habilitada como parte da implantação do serviço de nuvem. Ao criar uma nova implantação do Serviço de Nuvem, você pode habilitar a extensão de diagnóstico passando o parâmetro ExtensionConfiguration para o cmdlet New-AzureDeployment . O parâmetro ExtensionConfiguration usa uma matriz de configurações de diagnóstico que podem ser criadas usando o cmdlet New-AzureServiceDiagnosticsExtensionConfig .

O exemplo a seguir mostra como você pode habilitar diagnósticos para um serviço de nuvem com um WebRole e um WorkerRole, cada um com uma configuração de diagnóstico diferente.

$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)

Se o arquivo de configuração de diagnóstico especificar um StorageAccount elemento com um nome de conta de armazenamento, o New-AzureServiceDiagnosticsExtensionConfig cmdlet usará automaticamente essa conta de armazenamento. Para que essa configuração funcione, a conta de armazenamento precisa estar na mesma assinatura do Serviço de Nuvem que está sendo implantado.

Do SDK do Azure 2.6 em diante, os arquivos de configuração de extensão gerados pela saída de destino de publicação do MSBuild incluem o nome da conta de armazenamento com base na cadeia de configuração de diagnóstico especificada no arquivo de configuração de serviço (.cscfg). O script a seguir mostra como analisar os arquivos de configuração de extensão da saída de destino de publicação e configurar a extensão de diagnóstico para cada função ao implantar o serviço de nuvem.

$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

O Visual Studio Codespace usa uma abordagem semelhante para implantações automatizadas de Serviços de Nuvem com a extensão de diagnóstico. Consulte Publish-AzureCloudDeployment.ps1 para obter um exemplo completo.

Se não StorageAccount tiver sido especificado na configuração de diagnóstico, você precisará passar o parâmetro StorageAccountName para o cmdlet. Se você especificar o parâmetro StorageAccountName , o cmdlet usará a conta de armazenamento especificada no parâmetro e não a especificada no arquivo de configuração de diagnóstico.

Se a conta de armazenamento de diagnóstico estiver em uma assinatura diferente do Serviço de Nuvem, você precisará passar explicitamente os parâmetros StorageAccountName e StorageAccountKey para o cmdlet. O parâmetro StorageAccountKey não é necessário quando a conta de armazenamento de diagnóstico está na mesma assinatura, pois o cmdlet pode consultar e definir automaticamente o valor da chave ao habilitar a extensão de diagnóstico. No entanto, se a conta de armazenamento de diagnóstico estiver em uma assinatura diferente, o cmdlet pode não conseguir obter a chave automaticamente e você precisará especificar explicitamente a chave por meio do parâmetro 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

Ativar a extensão de diagnóstico num Serviço Cloud existente

Você pode usar o cmdlet Set-AzureServiceDiagnosticsExtension para habilitar ou atualizar a configuração de diagnóstico em um Serviço de Nuvem que já esteja em execução.

Aviso

Quando você habilita o diagnóstico para uma função existente, todas as extensões que você já definiu são desabilitadas quando o pacote é implantado. Estes são, entre outros:

  • Diagnóstico do Microsoft Monitoring Agent
  • Monitoramento de Segurança do Microsoft Azure
  • Microsoft Antimalware
  • Microsoft Monitoring Agent
  • Agente do Microsoft Service Profiler
  • Extensão de domínio do Windows Azure
  • Extensão de diagnóstico do Windows Azure
  • Extensão de Área de Trabalho Remota do Windows Azure
  • Coletor de Log do Windows Azure

Você pode redefinir suas extensões por meio do portal do Azure ou do PowerShell depois de implantar a função atualizada.

$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

Obter a configuração atual da extensão de diagnóstico

Use o cmdlet Get-AzureServiceDiagnosticsExtension para obter a configuração de diagnóstico atual para um serviço de nuvem.

Get-AzureServiceDiagnosticsExtension -ServiceName "MyService"

Remover a extensão de diagnóstico

Para desativar o diagnóstico em um serviço de nuvem, você pode usar o cmdlet Remove-AzureServiceDiagnosticsExtension .

Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService"

Se você habilitou a extensão de diagnóstico usando Set-AzureServiceDiagnosticsExtension ou New-AzureServiceDiagnosticsExtensionConfig sem o parâmetro Role, poderá remover a extensão usando Remove-AzureServiceDiagnosticsExtension sem o parâmetro Role. Se o parâmetro Role foi usado ao habilitar a extensão, ele também deve ser usado ao remover a extensão.

Para remover a extensão de diagnóstico de cada função individual:

Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService" -Role "WebRole"

Passos Seguintes