Scenario di Automazione di Azure: risolvere gli avvisi delle macchine virtuali di AzureAzure Automation scenario - remediate Azure VM alerts

In Automazione di Azure e Macchine virtuali di Azure è stata rilasciata una nuova funzionalità che consente di configurare avvisi delle macchine virtuali (VM) per l'esecuzione di runbook di automazione.Azure Automation and Azure Virtual Machines have released a new feature allowing you to configure Virtual Machine (VM) alerts to run Automation runbooks. Questa nuova funzionalità consente di eseguire automaticamente correzioni standard in risposta ad avvisi della VM, ad esempio per riavviarla o arrestarla.This new capability allows you to automatically perform standard remediation in response to VM alerts, like restarting or stopping the VM.

In precedenza, durante la creazione della regola di avviso della macchina virtuale era possibile specificare un webhook di automazione a un runbook per l'esecuzione di quest'ultimo a ogni attivazione dell'avviso.Previously, during VM alert rule creation you were able to specify an Automation webhook to a runbook in order to run the runbook whenever the alert triggered. Era tuttavia necessario creare il runbook e il webhook per il runbook e quindi copiare e incollare il webhook durante la creazione della regola di avviso.However, this required you to do the work of creating the runbook, creating the webhook for the runbook, and then copying and pasting the webhook during alert rule creation. Con questa nuova versione il processo è molto più semplice, perché è possibile scegliere un runbook direttamente da un elenco durante la creazione della regola di avviso e scegliere un account di automazione che esegue il runbook o creare facilmente un account.With this new release, the process is much easier because you can directly choose a runbook from a list during alert rule creation, and you can choose an Automation account which runs the runbook or easily create an account.

Questo articolo illustra come è possibile configurare facilmente un avviso delle VM di Azure e configurare un runbook di automazione da eseguire ogni volta che viene attivato l'avviso.In this article, we show you how easy it is to set up an Azure VM alert and configure an Automation runbook to run whenever the alert triggers. Gli scenari di esempio includono il riavvio di una VM quando l'utilizzo della memoria supera una soglia a causa di un'applicazione nella VM con una perdita di memoria o l'arresto di una VM quando il tempo di CPU dell'utente è sceso sotto l'1% nell'ora precedente e non è in uso.Example scenarios include restarting a VM when the memory usage exceeds some threshold due to an application on the VM with a memory leak, or stopping a VM when the CPU user time has been below 1% for past hour and is not in use. Verrà anche illustrato come la creazione automatica di un'entità servizio nell'account di automazione semplifichi l'uso di runbook nel processo di correzione degli avvisi di Azure.We’ll also explain how the automated creation of a service principal in your Automation account simplifies the use of runbooks in Azure alert remediation.

Creare un avviso in una VMCreate an alert on a VM

Per configurare un avviso per l'avvio di un runbook quando la soglia corrispondente viene raggiunta, eseguire questa procedura.Perform the following steps to configure an alert to launch a runbook when its threshold has been met.

Nota

Con questa versione sono supportate solo le macchine virtuali V2, mentre il supporto per le VM classiche verrà aggiunto a breve.With this release, we only support V2 virtual machines and support for classic VMs will be added soon.

  1. Accedere al portale di Azure e fare clic su Macchine virtuali.Log in to the Azure portal and click Virtual Machines.
  2. Selezionare una macchina virtuale.Select one of your virtual machines.
  3. Nella schermata della macchina virtuale in Monitoraggio fare clic su Regole di avviso.On the VM screen, in the Monitoring section, click Alert rules.
  4. Nel riquadro Regole di avviso fare clic su Aggiungi avviso.On the Alert rules pane, click Add alert.

Verrà visualizzata la pagina Aggiungi una regola di avviso dove è possibile configurare le condizioni per l'avviso e scegliere una o tutte queste opzioni: inviare un messaggio di posta elettronica a un utente, usare un webhook per inoltrare l'avviso a un altro sistema, e/o eseguire un runbook di automazione nel tentativo di risolvere il problema.This opens up the Add an alert rule page, where you can configure the conditions for the alert and choose among one or all of these options: send email to someone, use a webhook to forward the alert to another system, and/or run an Automation runbook in response attempt to remediate the issue.

Configurare un runbookConfigure a runbook

Per configurare un runbook da eseguire quando viene raggiunta la soglia di avviso della VM, selezionare Runbook di automazione.To configure a runbook to run when the VM alert threshold is met, select Automation Runbook. Nel pannello Configura runbook è possibile selezionare il runbook da eseguire e l'account di automazione in cui eseguire il runbook.In the Configure runbook pane, you can select the runbook to run and the Automation account to run the runbook in.

Configurare un runbook di automazione e creare un nuovo account di automazione

Nota

Per questa versione è possibile scegliere fra tre runbook forniti dal servizio: Restart VM, Stop VM o Remove VM (elimina).For this release you can choose from three runbooks that the service provides – Restart VM, Stop VM, or Remove VM (delete it). In una versione futura sarà possibile selezionare altri runbook o uno dei runbook personalizzati.The ability to select other runbooks or one of your own runbooks will be available in a future release.

Runbook da scegliere

Dopo aver selezionato uno dei tre runbook disponibili, viene visualizzato l'elenco a discesa Account di automazione dove è possibile selezionare un account di automazione per l'esecuzione del runbook.After you select one of the three available runbooks, the Automation account drop-down list appears and you can select an automation account the runbook will run as. I runbook devono essere eseguiti nel contesto di un account di automazione presente nella sottoscrizione di Azure.Runbooks need to run in the context of an Automation account that is in your Azure subscription. È possibile selezionare un account di automazione già creato o crearne automaticamente uno nuovo.You can select an Automation account that you already created, or you can have a new Automation account created for you.

I runbook forniti si autenticano in Azure con un'entità servizio.The runbooks that are provided authenticate to Azure using a service principal. Se si sceglie di eseguire il runbook in uno degli account di automazione esistenti, l'entità servizio viene creata automaticamente.If you choose to run the runbook in one of your existing Automation accounts, we automatically create the service principal for you. Se si sceglie di creare un nuovo account di automazione, vengono creati automaticamente l'account e l'entità servizio.If you choose to create a new Automation account, then we automatically create the account and the service principal. In entrambi i casi, nell'account di automazione vengono creati anche due asset, ovvero un asset del certificato denominato AzureRunAsCertificate e un asset della connessione denominato AzureRunAsConnection.In both cases, two assets are also created in the Automation account – a certificate asset named AzureRunAsCertificate and a connection asset named AzureRunAsConnection. I runbook usano AzureRunAsConnection per l'autenticazione in Azure per eseguire l'azione di gestione nella VM.The runbooks use AzureRunAsConnection to authenticate with Azure in order to perform the management action against the VM.

Nota

All'entità servizio creata nell'ambito della sottoscrizione viene assegnato il ruolo Collaboratore.The service principal is created in the subscription scope and is assigned the Contributor role. Questo ruolo è necessario per concedere all'account l'autorizzazione di esecuzione dei runbook di automazione per gestire le VM di Azure.This role is required in order for the account to have permission to run Automation runbooks to manage Azure VMs. La creazione di un account di automazione e/o di un'entità servizio è un evento singolo.The creation of an Automaton account and/or service principal is a one-time event. Una volta creati, si potrà usare l'account per eseguire i runbook per altri avvisi delle VM di Azure.Once they are created, you can use that account to run runbooks for other Azure VM alerts.

Quando fa clic su OK , l'avviso viene configurato e se è stata selezionata l'opzione per creare un nuovo account di automazione, questo verrà creato insieme all'entità servizio.When you click OK the alert is configured and if you selected the option to create a new Automation account, it is created along with the service principal. Il completamento di questa operazione può richiedere alcuni secondi.This can take a few seconds to complete.

Runbook in corso di configurazione

Una volta completata la configurazione, il nome del runbook viene visualizzato nella pagina Aggiungi una regola di avviso.After the configuration is completed, you see the name of the runbook in the Add an alert rule page.

Runbook configurati

Fare clic suOK nella pagina Aggiungi una regola di avviso.Click OK in the Add an alert rule page. La regola di avviso viene creata e attivata se la macchina virtuale è in stato di esecuzione.The alert rule is created and activate if the virtual machine is in a running state.

Abilitare o disabilitare un runbookEnable or disable a runbook

Se è stato configurato un runbook per un avviso, è possibile disabilitarlo senza rimuovere la configurazione del runbook.If you have a runbook configured for an alert, you can disable it without removing the runbook configuration. In questo modo si può mantenere l'avviso di esecuzione, testare eventualmente alcune regole di avviso e successivamente riabilitare il runbook.This allows you to keep the alert running and perhaps test some of the alert rules and then later re-enable the runbook.

Creare un runbook che funzioni con un avviso di AzureCreate a runbook that works with an Azure alert

Quando si sceglie un runbook nell'ambito di una regola di avviso di Azure, il runbook deve contenere la logica per gestire i dati di avviso che gli vengono passati.When you choose a runbook as part of an Azure alert rule, the runbook needs to have logic in it to manage the alert data that is passed to it. Quando un runbook viene configurato in una regola di avviso, viene creato un webhook per il runbook. Il webhook viene usato per avviare il runbook ogni volta che viene attivato l'avviso.When a runbook is configured in an alert rule, a webhook is created for the runbook; that webhook is then used to start the runbook each time the alert triggers. La chiamata effettiva per avviare il runbook è una richiesta HTTP POST all'URL del webhook.The actual call to start the runbook is an HTTP POST request to the webhook URL. Il corpo della richiesta POST contiene un oggetto in formato JSON con proprietà utili relative all'avviso.The body of the POST request contains a JSON-formated object that contains useful properties related to the alert. Come mostrato di seguito, i dati dell'avviso contengono dettagli come subscriptionID resourceGroupName, resourceName e resourceType.As you can see below, the alert data contains details like subscriptionID, resourceGroupName, resourceName, and resourceType.

Esempio di dati di avvisoExample of Alert data

{
    "WebhookName": "AzureAlertTest",
    "RequestBody": "{
    \"status\":\"Activated\",
    \"context\": {
        \"id\":\"/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/microsoft.insights/alertrules/AlertTest\",
        \"name\":\"AlertTest\",
        \"description\":\"\",
        \"condition\": {
            \"metricName\":\"CPU percentage guest OS\",
            \"metricUnit\":\"Percent\",
            \"metricValue\":\"4.26337916666667\",
            \"threshold\":\"1\",
            \"windowSize\":\"60\",
            \"timeAggregation\":\"Average\",
            \"operator\":\"GreaterThan\"},
        \"subscriptionId\":\<subscriptionID> \",
        \"resourceGroupName\":\"TestResourceGroup\",
        \"timestamp\":\"2016-04-24T23:19:50.1440170Z\",
        \"resourceName\":\"TestVM\",
        \"resourceType\":\"microsoft.compute/virtualmachines\",
        \"resourceRegion\":\"westus\",
        \"resourceId\":\"/subscriptions/<subscriptionId>/resourceGroups/TestResourceGroup/providers/Microsoft.Compute/virtualMachines/TestVM\",
        \"portalLink\":\"https://portal.azure.com/#resource/subscriptions/<subscriptionId>/resourceGroups/TestResourceGroup/providers/Microsoft.Compute/virtualMachines/TestVM\"
        },
    \"properties\":{}
    }",
    "RequestHeader": {
        "Connection": "Keep-Alive",
        "Host": "<webhookURL>"
    }
}

Quando il servizio di webhook di Automazione riceve la richiesta HTTP POST, estrae i dati di avviso e li passa al runbook nel parametro di input runbook WebhookData.When the Automation webhook service receives the HTTP POST it extracts the alert data and passes it to the runbook in the WebhookData runbook input parameter. Di seguito viene riportato un runbook di esempio che illustra come usare il parametro WebhookData, estrarre i dati di avviso e usarli per gestire le risorse di Azure che hanno attivato l'avviso.Below is a sample runbook that shows how to use the WebhookData parameter and extract the alert data and use it to manage the Azure resource that triggered the alert.

Runbook di esempioExample runbook

#  This runbook restarts an ARM (V2) VM in response to an Azure VM alert.

[OutputType("PSAzureOperationResponse")]

param ( [object] $WebhookData )

if ($WebhookData)
{
    # Get the data object from WebhookData
    $WebhookBody = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)

    # Assure that the alert status is 'Activated' (alert condition went from false to true)
    # and not 'Resolved' (alert condition went from true to false)
    if ($WebhookBody.status -eq "Activated")
    {
        # Get the info needed to identify the VM
        $AlertContext = [object] $WebhookBody.context
        $ResourceName = $AlertContext.resourceName
        $ResourceType = $AlertContext.resourceType
        $ResourceGroupName = $AlertContext.resourceGroupName
        $SubId = $AlertContext.subscriptionId

        # Assure that this is the expected resource type
        Write-Verbose "ResourceType: $ResourceType"
        if ($ResourceType -eq "microsoft.compute/virtualmachines")
        {
            # This is an ARM (V2) VM

            # Authenticate to Azure with service principal and certificate
            $ConnectionAssetName = "AzureRunAsConnection"
            $Conn = Get-AutomationConnection -Name $ConnectionAssetName
            if ($Conn -eq $null) {
                throw "Could not retrieve connection asset: $ConnectionAssetName. Check that this asset exists in the Automation account."
            }
            Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint | Write-Verbose
            Set-AzureRmContext -SubscriptionId $SubId -ErrorAction Stop | Write-Verbose

            # Restart the VM
            Restart-AzureRmVM -Name $ResourceName -ResourceGroupName $ResourceGroupName
        } else {
            Write-Error "$ResourceType is not a supported resource type for this runbook."
        }
    } else {
        # The alert status was not 'Activated' so no action taken
        Write-Verbose ("No action taken. Alert status: " + $WebhookBody.status)
    }
} else {
    Write-Error "This runbook is meant to be started from an Azure alert only."
}

RiepilogoSummary

Quando si configura un avviso in una VM di Azure, è possibile configurare facilmente un runbook di automazione per eseguire automaticamente un'azione di correzione quando viene attivato l'avviso.When you configure an alert on an Azure VM, you now have the ability to easily configure an Automation runbook to automatically perform remediation action when the alert triggers. Per questa versione è possibile scegliere un runbook per riavviare, arrestare o eliminare una macchina virtuale, a seconda dello scenario avviso.For this release, you can choose from runbooks to restart, stop, or delete a VM depending on your alert scenario. Questo è solo l'inizio dell'abilitazione di scenari in cui si controllano le azioni, come notifica, risoluzione dei problemi e correzione, che vengono eseguite automaticamente quando viene attivato un avviso.This is just the beginning of enabling scenarios where you control the actions (notification, troubleshooting, remediation) that are performed automatically when an alert triggers.

Passaggi successiviNext Steps