Usare un avviso per attivare un runbook di Automazione di Azure
È possibile usare Monitoraggio di Azure per monitorare metriche e log di livello base per la maggior parte dei servizi in Azure. È possibile chiamare Automazione di Azure runbook usando i gruppi di azioni per automatizzare le attività in base agli avvisi. Questo articolo illustra come configurare ed eseguire un runbook usando gli avvisi.
Prerequisiti
- Un account Automazione di Azure con almeno un'identità gestita assegnata all'utente. Per altre informazioni, vedere Uso di un'identità gestita assegnata dall'utente per un account Automazione di Azure.
- Moduli Az:
Az.Accounts
eAz.Compute
importati nell'account di Automazione. Per altre informazioni, vedere Importazione di moduli Az. - Una macchina virtuale di Azure.
- Il modulo Azure Az PowerShell installato nel computer. Per installare o aggiornare, vedere Come installare il modulo Azure Az PowerShell.
- Familiarità generale con i runbook di Automazione.
Tipi di avviso
È possibile usare i runbook di automazione con tre tipi di avviso:
- Avvisi comuni
- Avvisi dei log attività
- Avvisi di metriche quasi in tempo reale
Nota
Lo schema di avviso comune standardizza l'esperienza di utilizzo per le notifiche di avviso in Azure. Storicamente, i tre tipi di avviso in Azure (metrica, log e log attività) hanno avuto modelli di posta elettronica, schemi webhook e così via. Per altre informazioni, vedere Schema di avviso comune.
Quando un avviso chiama un runbook, la chiamata effettiva è una richiesta HTTP POST al webhook. Il corpo della richiesta POST contiene un oggetto in formato JSON con proprietà utili relative all'avviso. La tabella seguente elenca i collegamenti allo schema del payload per ogni tipo di avviso:
Avviso | Descrizione | Schema del payload |
---|---|---|
Avviso comune | Lo schema di avviso comune che standardizza attualmente l'esperienza di utilizzo per le notifiche di avviso in Azure. | Schema del payload di avviso comune. |
Avviso del log attività | Invia una notifica quando qualsiasi nuovo evento nel log attività di Azure soddisfa condizioni specifiche. Ad esempio, quando si verifica un'operazione Delete VM in myProductionResourceGroup o quando viene visualizzato un nuovo evento di integrità dei servizi di Azure con uno stato Attivo. |
Schema payload avviso log attività |
Avvisi delle metriche quasi in tempo reale | Invia una notifica più velocemente rispetto agli avvisi delle metriche quando una o più metriche a livello di piattaforma soddisfano le condizioni specificate. Ad esempio, quando il valore per % CPU in una macchina virtuale è maggiore di 90 e il valore per Rete in ingresso è maggiore di 500 MB per gli ultimi 5 minuti. | Schema payload avvisi metriche quasi in tempo reale |
Poiché i dati forniti da ogni tipo di avviso sono diversi, ogni tipo di avviso deve essere gestito in modo diverso. Nella sezione seguente viene illustrato come creare un runbook per gestire i diversi tipi di avvisi.
Assegnare le autorizzazioni alle identità gestite
Assegnare le autorizzazioni all'identità gestita appropriata per consentire l'arresto di una macchina virtuale. Il runbook può usare l'identità gestita assegnata dal sistema dell'account di Automazione o un'identità gestita assegnata dall'utente. Vengono forniti passaggi per assegnare le autorizzazioni a ogni identità. La procedura seguente usa PowerShell. Se si preferisce usare il portale, vedere Assegnare ruoli di Azure usando il portale di Azure.
Accedere ad Azure in modo interattivo usando il cmdlet Connessione-AzAccount e seguire le istruzioni.
# Sign in to your Azure subscription $sub = Get-AzSubscription -ErrorAction SilentlyContinue if(-not($sub)) { Connect-AzAccount } # If you have multiple subscriptions, set the one to use # Select-AzSubscription -SubscriptionId <SUBSCRIPTIONID>
Specificare un valore appropriato per le variabili seguenti e quindi eseguire lo script.
$resourceGroup = "resourceGroup" $automationAccount = "AutomationAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity"
Usare il cmdlet di PowerShell New-AzRoleAssignment per assegnare un ruolo all'identità gestita assegnata dal sistema.
$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
Assegnare un ruolo a un'identità gestita assegnata dall'utente.
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity) New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
Per l'identità gestita assegnata dal sistema, visualizzare
ClientId
e registrare il valore per un uso successivo.$UAMI.ClientId
Creare un runbook per gestire gli avvisi
Per usare Automazione con gli avvisi, è necessario un runbook che gestisce il payload JSON di avviso passato al runbook. Il seguente runbook di esempio deve essere chiamato da un avviso di Azure.
Come descritto nella sezione precedente, ogni tipo di avviso ha uno schema diverso. Lo script accetta i dati del webhook da un avviso nel parametro di input runbook WebhookData
. Lo script valuta quindi il payload JSON per determinare il tipo di avviso usato.
Questo esempio usa un avviso da una macchina virtuale (VM) di Azure. Recupera i dati della macchina virtuale dal payload e usa le informazioni per arrestare la macchina virtuale. La connessione deve essere configurata nell'account di Automazione in cui è eseguito il runbook. Quando si usano avvisi per attivare i runbook, è importante controllare lo stato dell'avviso nel runbook attivato. Il runbook viene attivato ogni volta che lo stato dell'avviso cambia. Gli avvisi hanno più stati; i due più comuni sono Attivato e Risolto. Verificare lo stato nella logica del runbook per assicurarsi che il runbook non venga eseguito più di una volta. L'esempio in questo articolo illustra come cercare solo gli avvisi con stato Attivato.
Il runbook usa l'identità gestita assegnata dal sistema dell'account di Automazione per eseguire l'autenticazione con Azure per eseguire l'azione di gestione sulla macchina virtuale. Il runbook può essere facilmente modificato per usare un'identità gestita assegnata dall'utente.
Nota
È consigliabile usare l'accesso alla rete pubblica perché non è possibile usare un avviso di Azure (metrica, log e log attività) per attivare un webhook di Automazione quando l'account di Automazione usa collegamenti privati e configurato con l'accesso pubblico impostato su Disabilita.
Usare questo esempio per creare un runbook denominato Stop AzureVmInResponsetoVMAlert. È possibile modificare lo script di PowerShell e usarlo con molte risorse diverse.
Accedere al portale di Azure e passare all'account di Automazione.
In Automazione processi selezionare Runbook.
Selezionare + Crea un runbook.
- Assegnare al runbook
Stop-AzureVmInResponsetoVMAlert
il nome . - Nell'elenco a discesa Tipo di runbook selezionare PowerShell.
- Seleziona Crea.
- Assegnare al runbook
Nell'editor dei runbook incollare il codice seguente:
[OutputType("PSAzureOperationResponse")] param ( [Parameter (Mandatory=$false)] [object] $WebhookData ) $ErrorActionPreference = "stop" if ($WebhookData) { # Get the data object from WebhookData $WebhookBody = (ConvertFrom-Json -InputObject $WebhookData.RequestBody) # Get the info needed to identify the VM (depends on the payload schema) $schemaId = $WebhookBody.schemaId Write-Verbose "schemaId: $schemaId" -Verbose if ($schemaId -eq "azureMonitorCommonAlertSchema") { # This is the common Metric Alert schema (released March 2019) $Essentials = [object] ($WebhookBody.data).essentials # Get the first target only as this script doesn't handle multiple $alertTargetIdArray = (($Essentials.alertTargetIds)[0]).Split("/") $SubId = ($alertTargetIdArray)[2] $ResourceGroupName = ($alertTargetIdArray)[4] $ResourceType = ($alertTargetIdArray)[6] + "/" + ($alertTargetIdArray)[7] $ResourceName = ($alertTargetIdArray)[-1] $status = $Essentials.monitorCondition } elseif ($schemaId -eq "AzureMonitorMetricAlert") { # This is the near-real-time Metric Alert schema $AlertContext = [object] ($WebhookBody.data).context $SubId = $AlertContext.subscriptionId $ResourceGroupName = $AlertContext.resourceGroupName $ResourceType = $AlertContext.resourceType $ResourceName = $AlertContext.resourceName $status = ($WebhookBody.data).status } elseif ($schemaId -eq "Microsoft.Insights/activityLogs") { # This is the Activity Log Alert schema $AlertContext = [object] (($WebhookBody.data).context).activityLog $SubId = $AlertContext.subscriptionId $ResourceGroupName = $AlertContext.resourceGroupName $ResourceType = $AlertContext.resourceType $ResourceName = (($AlertContext.resourceId).Split("/"))[-1] $status = ($WebhookBody.data).status } elseif ($schemaId -eq $null) { # This is the original Metric Alert schema $AlertContext = [object] $WebhookBody.context $SubId = $AlertContext.subscriptionId $ResourceGroupName = $AlertContext.resourceGroupName $ResourceType = $AlertContext.resourceType $ResourceName = $AlertContext.resourceName $status = $WebhookBody.status } else { # Schema not supported Write-Error "The alert data schema - $schemaId - is not supported." } Write-Verbose "status: $status" -Verbose if (($status -eq "Activated") -or ($status -eq "Fired")) { Write-Verbose "resourceType: $ResourceType" -Verbose Write-Verbose "resourceName: $ResourceName" -Verbose Write-Verbose "resourceGroupName: $ResourceGroupName" -Verbose Write-Verbose "subscriptionId: $SubId" -Verbose # Determine code path depending on the resourceType if ($ResourceType -eq "Microsoft.Compute/virtualMachines") { # This is an Resource Manager VM Write-Verbose "This is an Resource Manager VM." -Verbose # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process # Connect to Azure with system-assigned managed identity $AzureContext = (Connect-AzAccount -Identity).context # set and store context $AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext # Stop the Resource Manager VM Write-Verbose "Stopping the VM - $ResourceName - in resource group - $ResourceGroupName -" -Verbose Stop-AzVM -Name $ResourceName -ResourceGroupName $ResourceGroupName -DefaultProfile $AzureContext -Force # [OutputType(PSAzureOperationResponse")] } else { # ResourceType not supported Write-Error "$ResourceType is not a supported resource type for this runbook." } } else { # The alert status was not 'Activated' or 'Fired' so no action taken Write-Verbose ("No action taken. Alert status: " + $status) -Verbose } } else { # Error Write-Error "This runbook is meant to be started from an Azure alert webhook only." }
Se si vuole che il runbook venga eseguito con l'identità gestita assegnata dal sistema, lasciare invariato il codice. Se si preferisce usare un'identità gestita assegnata dall'utente, procedere come illustrato di seguito:
- Dalla riga 78 rimuovere
$AzureContext = (Connect-AzAccount -Identity).context
, - Sostituirlo con
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
e - Immettere l'ID client ottenuto in precedenza.
- Dalla riga 78 rimuovere
Selezionare Salva, Pubblica e quindi Sì quando richiesto.
Chiudere la pagina Runbook per tornare alla pagina Account di Automazione.
Creare l'avviso
Gli avvisi usano i gruppi di azioni, ovvero raccolte di azioni attivate dall'avviso. I runbook sono solo una delle molte azioni disponibili con i gruppi di azioni.
Nell'account di Automazione, in Monitoraggio selezionare Avvisi.
Selezionare + Nuova regola di avviso per aprire la pagina Crea regola di avviso.
In Ambito selezionare Modifica risorsa.
Nell'elenco a discesa Filtra per tipo di risorsa della pagina Selezionare una risorsa selezionare Macchine virtuali.
Selezionare la casella accanto alle macchine virtuali da monitorare. Selezionare quindi Fine per tornare alla pagina Crea regola di avviso.
In Condizione selezionare Aggiungi condizione.
Nella pagina Seleziona un segnale immettere
Percentage CPU
nella casella di testo di ricerca e quindi selezionare Percentuale CPU nei risultati.Nella pagina Configura logica del segnale, in Valore soglia immettere un valore minimo iniziale a scopo di test, ad esempio
5
. È possibile tornare indietro e aggiornare questo valore dopo aver confermato che l'avviso funziona come previsto. Selezionare quindi Fine per tornare alla pagina Crea regola di avviso.In Azioni selezionare Aggiungi gruppi di azioni e quindi +Crea gruppo di azioni.
Nella pagina Crea gruppo di azioni:
Nella scheda Informazioni di base immettere il nome di un gruppo di azioni e il nome visualizzato.
Nella scheda Azioni immettere un nome nella casella di testo Nome . Nell'elenco a discesa Tipo di azione selezionare Runbook di Automazione per aprire la pagina Configura runbook .
Per l'elemento di origine runbook selezionare Utente.
Nell'elenco a discesa Sottoscrizione selezionare la sottoscrizione.
Nell'elenco a discesa Account di Automazione selezionare l'account di Automazione.
Nell'elenco a discesa Runbook selezionare Stop-AzureVmInResponsetoVMAlert.
Per l'elemento Abilita lo schema di avviso comune selezionare Sì.
Selezionare OK per tornare alla pagina Crea gruppo di azioni.
Selezionare Rivedi e crea e quindi Crea per tornare alla pagina Crea regola di avviso.
In Dettagli regola di avviso per la casella di testo Nome regola di avviso.
Selezionare Crea regola di avviso. È possibile usare il gruppo di azioni negli avvisi del log attività e avvisi quasi in tempo reale creati.
Verifica
Verificare che la macchina virtuale sia in esecuzione. Passare al runbook Stop-AzureVmInResponsetoVMAlert e controllare l'elenco Processi recenti da popolare. Una volta visualizzato un processo completato, selezionare il processo ed esaminare l'output. Controllare anche se la macchina virtuale è stata arrestata.
Operazioni comuni di gestione delle macchine virtuali di Azure
Automazione di Azure fornisce script per operazioni comuni di gestione delle macchine virtuali di Azure, ad esempio il riavvio della macchina virtuale, l'arresto della macchina virtuale, l'eliminazione di macchine virtuali, l'aumento e la riduzione degli scenari nella raccolta di runbook. Gli script sono disponibili anche nel repository GitHub Automazione di Azure. È anche possibile usare questi script come indicato nei passaggi precedenti.
Operazioni di gestione delle macchine virtuali di Azure | Dettagli |
---|---|
Stop-Azure-VM-On-Alert | Questo runbook arresterà una macchina virtuale di Azure Resource Manager in risposta a un trigger di avviso di Azure. L'input è costituito da dati di avviso con informazioni necessarie per identificare la macchina virtuale da arrestare. Il runbook deve essere chiamato da un avviso di Azure tramite un webhook. L'ultima versione del modulo Az deve essere aggiunta all'account di automazione. È necessario abilitare l'identità gestita e fornire l'accesso collaboratore all'account di automazione. |
Restart-Azure-VM-On-Alert | Questo runbook arresterà una macchina virtuale di Azure Resource Manager in risposta a un trigger di avviso di Azure. L'input è costituito da dati di avviso con informazioni necessarie per identificare la macchina virtuale da arrestare. Il runbook deve essere chiamato da un avviso di Azure tramite un webhook. L'ultima versione del modulo Az deve essere aggiunta all'account di automazione. È necessario abilitare l'identità gestita e fornire l'accesso collaboratore all'account di automazione. |
Delete-Azure-VM-On-Alert | Questo runbook arresterà una macchina virtuale di Azure Resource Manager in risposta a un trigger di avviso di Azure. L'input è costituito da dati di avviso con informazioni necessarie per identificare la macchina virtuale da arrestare. Il runbook deve essere chiamato da un avviso di Azure tramite un webhook. L'ultima versione del modulo Az deve essere aggiunta all'account di automazione. È necessario abilitare l'identità gestita e fornire l'accesso collaboratore all'account di automazione. |
ScaleDown-Azure-VM-On-Alert | Questo runbook arresterà una macchina virtuale di Azure Resource Manager in risposta a un trigger di avviso di Azure. L'input è costituito da dati di avviso con informazioni necessarie per identificare la macchina virtuale da arrestare. Il runbook deve essere chiamato da un avviso di Azure tramite un webhook. L'ultima versione del modulo Az deve essere aggiunta all'account di automazione. È necessario abilitare l'identità gestita e fornire l'accesso collaboratore all'account di automazione. |
ScaleUp-Azure-VM-On-Alert | Questo runbook arresterà una macchina virtuale di Azure Resource Manager in risposta a un trigger di avviso di Azure. L'input è costituito da dati di avviso con informazioni necessarie per identificare la macchina virtuale da arrestare. Il runbook deve essere chiamato da un avviso di Azure tramite un webhook. L'ultima versione del modulo Az deve essere aggiunta all'account di automazione. È necessario abilitare l'identità gestita e fornire l'accesso collaboratore all'account di automazione. |
Passaggi successivi
- Informazioni su diversi modi per avviare un runbook, vedere Avviare un runbook.
- Creare un avviso del log attività, vedere Creare avvisi del log attività.
- Informazioni su come creare un avviso quasi in tempo reale, vedere Creare una regola di avviso nella portale di Azure.