Abilitare la diagnostica nei servizi cloud di Azure con PowerShellEnable diagnostics in Azure Cloud Services using PowerShell

È possibile raccogliere dati di diagnostica come log applicazioni, contatori delle prestazioni e così via da un servizio cloud mediante l'estensione Diagnostica di Azure.You can collect diagnostic data like application logs, performance counters etc. from a Cloud Service using the Azure Diagnostics extension. Questo articolo descrive come abilitare l'estensione Diagnostica di Azure per un servizio Cloud tramite PowerShell.This article describes how to enable the Azure Diagnostics extension for a Cloud Service using PowerShell. Per i prerequisiti necessari per questo articolo, vedere Come installare e configurare Azure PowerShell .See How to install and configure Azure PowerShell for the prerequisites needed for this article.

Abilitare l'estensione delle funzionalità di diagnostica come parte della distribuzione di un servizio CloudEnable diagnostics extension as part of deploying a Cloud Service

Questo approccio è applicabile al tipo di scenari di integrazione continua, in cui l'estensione Diagnostica può essere abilitata come parte della distribuzione del servizio cloud.This approach is applicable to continuous integration type of scenarios, where the diagnostics extension can be enabled as part of deploying the cloud service. Quando si crea una nuova distribuzione del servizio cloud, è possibile abilitare l'estensione Diagnostica passando il parametro ExtensionConfiguration al cmdlet New-AzureDeployment .When creating a new Cloud Service deployment you can enable the diagnostics extension by passing in the ExtensionConfiguration parameter to the New-AzureDeployment cmdlet. Il parametro ExtensionConfiguration accetta una matrice di configurazioni di diagnostica che può essere creata utilizzando il cmdlet New AzureServiceDiagnosticsExtensionConfig .The ExtensionConfiguration parameter takes an array of diagnostics configurations that can be created using the New-AzureServiceDiagnosticsExtensionConfig cmdlet.

L'esempio seguente mostra come abilitare la diagnostica per un servizio cloud con un WebRole e un WorkerRole, ognuno dei quali ha una configurazione di diagnostica diversa.The following example shows how you can enable diagnostics for a cloud service with a WebRole and WorkerRole, each having a different diagnostics configuration.

$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 il file di configurazione della diagnostica specifica un elemento StorageAccount con il nome di un account di archiviazione, il cmdlet New-AzureServiceDiagnosticsExtensionConfig userà automaticamente tale account di archiviazione.If the diagnostics configuration file specifies a StorageAccount element with a storage account name, then the New-AzureServiceDiagnosticsExtensionConfig cmdlet will automatically use that storage account. A questo scopo, l'account di archiviazione deve trovarsi nella stessa sottoscrizione del servizio cloud da distribuire.For this to work, the storage account needs to be in the same subscription as the Cloud Service being deployed.

Da Azure SDK 2.6 in poi, i file di configurazione dell'estensione generati dall'output della destinazione di pubblicazione di MSBuild includeranno il nome dell'account di archiviazione basato sulla stringa di configurazione della diagnostica specificata nel file di configurazione del servizio (cscfg).From Azure SDK 2.6 onward the extension configuration files generated by the MSBuild publish target output will include the storage account name based on the diagnostics configuration string specified in the service configuration file (.cscfg). Lo script seguente mostra come analizzare i file di configurazione dell'estensione dall'output della destinazione di pubblicazione e configurare l'estensione Diagnostica per ogni ruolo quando si distribuisce il servizio cloud.The script below shows you how to parse the Extension configuration files from the publish target output and configure diagnostics extension for each role when deploying the cloud service.

$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 Online usa un approccio simile per le distribuzioni automatiche di Servizi cloud con l'estensione Diagnostica.Visual Studio Online uses a similar approach for automated deployments of Cloud Services with the diagnostics extension. Per un esempio completo, vedere Publish-AzureCloudDeployment.ps1 .See Publish-AzureCloudDeployment.ps1 for a complete example.

Se nella configurazione di diagnostica non è specificato alcun elemento StorageAccount, è necessario passare il parametro StorageAccountName al cmdlet.If no StorageAccount was specified in the diagnostics configuration, then you need to pass in the StorageAccountName parameter to the cmdlet. Se il parametro StorageAccountName è specificato, il cmdlet userà sempre l'account di archiviazione specificato nel parametro e non quello specificato nel file di configurazione della diagnostica.If the StorageAccountName parameter is specified, then the cmdlet will always use the storage account that is specified in the parameter and not the one that is specified in the diagnostics configuration file.

Se l'account di archiviazione di diagnostica si trova in una sottoscrizione diversa da quella del servizio cloud, è necessario passare al cmdlet i parametri StorageAccountName e StorageAccountKey in modo esplicito.If the diagnostics storage account is in a different subscription from the Cloud Service, then you need to explicitly pass in the StorageAccountName and StorageAccountKey parameters to the cmdlet. Il parametro StorageAccountKey non è necessario quando l'account di archiviazione di diagnostica si trova nella stessa sottoscrizione perché il cmdlet può automaticamente eseguire una query e impostare il valore della chiave durante l'abilitazione dell'estensione di diagnostica.The StorageAccountKey parameter is not needed when the diagnostics storage account is in the same subscription, as the cmdlet can automatically query and set the key value when enabling the diagnostics extension. Tuttavia, se l'account di archiviazione di diagnostica si trova in una sottoscrizione diversa, il cmdlet potrebbe non essere in grado di ottenere automaticamente la chiave, quindi si deve specificare la chiave in modo esplicito tramite il parametro StorageAccountKey .However, if the diagnostics storage account is in a different subscription, then the cmdlet might not be able to get the key automatically and you need to explicitly specify the key through the StorageAccountKey parameter.

$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

Abilitare l'estensione della diagnostica in un servizio Cloud esistenteEnable diagnostics extension on an existing Cloud Service

È possibile usare il cmdlet Set AzureServiceDiagnosticsExtension per abilitare o aggiornare la configurazione della diagnostica in un servizio cloud già in esecuzione.You can use the Set-AzureServiceDiagnosticsExtension cmdlet to enable or update diagnostics configuration on a Cloud Service that is already running.

Avviso

Quando si abilita la diagnostica per un ruolo esistente, tutte le estensioni già impostate vengono disabilitate quando viene distribuito il pacchetto.When you enable diagnostics for an existing role, any extensions that you have already set are disabled when the package is deployed. incluse le seguenti:These include:

  • Diagnostica di Microsoft Monitoring AgentMicrosoft Monitoring Agent Diagnostics
  • Microsoft Azure Security MonitoringMicrosoft Azure Security Monitoring
  • Antimalware MicrosoftMicrosoft Antimalware
  • Microsoft Monitoring AgentMicrosoft Monitoring Agent
  • Microsoft Service Profiler AgentMicrosoft Service Profiler Agent
  • Windows Azure Domain ExtensionWindows Azure Domain Extension
  • Windows Azure Diagnostics ExtensionWindows Azure Diagnostics Extension
  • Windows Azure Remote Desktop ExtensionWindows Azure Remote Desktop Extension
  • Windows Azure Log CollectorWindows Azure Log Collector

Dopo avere distribuito il ruolo aggiornato, è possibile reimpostare le estensioni tramite il portale di Azure o PowerShell.You can reset your extensions via the Azure portal or PowerShell after you deploy the updated role.

$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

Ottenere la configurazione di estensione della diagnostica correnteGet current diagnostics extension configuration

Utilizzare il cmdlet Get AzureServiceDiagnosticsExtension per ottenere la configurazione di diagnostica corrente per un servizio cloud.Use the Get-AzureServiceDiagnosticsExtension cmdlet to get the current diagnostics configuration for a cloud service.

Get-AzureServiceDiagnosticsExtension -ServiceName "MyService"

Rimuovere l'estensione della diagnosticaRemove diagnostics extension

Per disattivare la diagnostica in un servizio cloud, è possibile utilizzare il cmdlet Remove AzureServiceDiagnosticsExtension .To turn off diagnostics on a cloud service you can use the Remove-AzureServiceDiagnosticsExtension cmdlet.

Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService"

Se è stata abilitata l'estensione di diagnostica con Set-AzureServiceDiagnosticsExtension o New AzureServiceDiagnosticsExtensionConfig senza il parametro Role, è possibile rimuovere l'estensione usando Remove AzureServiceDiagnosticsExtension senza il parametro Role.If you enabled the diagnostics extension using either Set-AzureServiceDiagnosticsExtension or the New-AzureServiceDiagnosticsExtensionConfig without the Role parameter then you can remove the extension using Remove-AzureServiceDiagnosticsExtension without the Role parameter. Se il parametro Ruolo è stato utilizzato al momento di abilitare l'estensione, allora deve essere utilizzato anche quando si rimuove l'estensione.If the Role parameter was used when enabling the extension then it must also be used when removing the extension.

Per rimuovere l'estensione della diagnostica da ogni singolo ruolo:To remove the diagnostics extension from each individual role:

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

Passaggi successiviNext Steps