Een waarschuwing gebruiken om een Azure Automation runbook te activeren

U kunt Azure Monitor gebruiken om metrische gegevens en logboeken op basisniveau te bewaken voor de meeste services in Azure. U kunt Azure Automation-runbooks aanroepen met behulp van actiegroepen om taken te automatiseren op basis van waarschuwingen. In dit artikel leest u hoe u een runbook configureert en uitvoert met behulp van waarschuwingen.

Vereisten

Waarschuwingstypen

U kunt automation-runbooks gebruiken met drie waarschuwingstypen:

  • Algemene waarschuwingen
  • Waarschuwingen voor activiteitenlogboeken
  • Waarschuwingen voor metrische gegevens in bijna realtime

Notitie

Het algemene waarschuwingsschema standaardiseert de verbruikservaring voor waarschuwingsmeldingen in Azure. In het verleden hebben de drie waarschuwingstypen in Azure (metrische gegevens, logboeken en activiteitenlogboeken) hun eigen e-mailsjablonen, webhookschema's, enzovoort. Zie Algemeen waarschuwingsschema voor meer informatie.

Wanneer een waarschuwing een runbook aanroept, is de werkelijke aanroep een HTTP POST-aanvraag naar de webhook. De hoofdtekst van de POST-aanvraag bevat een object in JSON-indeling met nuttige eigenschappen die betrekking hebben op de waarschuwing. De volgende tabel bevat koppelingen naar het nettoladingschema voor elk waarschuwingstype:

Waarschuwing Omschrijving Payloadschema
Algemene waarschuwing Het algemene waarschuwingsschema dat de verbruikservaring voor waarschuwingsmeldingen in Azure standaardiseert. Algemeen schema voor nettolading van waarschuwingen.
Waarschuwing voor activiteitenlogboek Hiermee wordt een melding verzonden wanneer een nieuwe gebeurtenis in het Azure-activiteitenlogboek overeenkomt met specifieke voorwaarden. Bijvoorbeeld wanneer een Delete VM bewerking plaatsvindt in myProductionResourceGroup of wanneer een nieuwe Azure Service Health-gebeurtenis met een actieve status wordt weergegeven. Nettoladingschema voor waarschuwingen voor activiteitenlogboek
Bijna realtime waarschuwing voor metrische gegevens Hiermee wordt een melding sneller verzonden dan metrische waarschuwingen wanneer een of meer metrische gegevens op platformniveau voldoen aan de opgegeven voorwaarden. Als de waarde voor CPU-percentage op een VIRTUELE machine bijvoorbeeld groter is dan 90 en de waarde voor Netwerk in de afgelopen 5 minuten groter is dan 500 MB. Schema voor nettolading van metrische waarschuwingen in bijna realtime

Omdat de gegevens die door elk type waarschuwing worden verstrekt, verschillend zijn, wordt elk waarschuwingstype anders verwerkt. In de volgende sectie leert u hoe u een runbook maakt voor het afhandelen van verschillende typen waarschuwingen.

Machtigingen toewijzen aan beheerde identiteiten

Wijs machtigingen toe aan de juiste beheerde identiteit , zodat deze een virtuele machine kan stoppen. Het runbook kan de door het systeem toegewezen beheerde identiteit van het Automation-account of een door de gebruiker toegewezen beheerde identiteit gebruiken. Er worden stappen gegeven om machtigingen toe te wijzen aan elke identiteit. In de onderstaande stappen wordt PowerShell gebruikt. Als u liever de portal gebruikt, raadpleegt u Azure-rollen toewijzen met behulp van Azure Portal.

  1. Meld u interactief aan bij Azure met behulp van de cmdlet Verbinding maken-AzAccount en volg de instructies.

    # 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>
    
  2. Geef een geschikte waarde op voor de onderstaande variabelen en voer vervolgens het script uit.

    $resourceGroup = "resourceGroup"
    $automationAccount = "AutomationAccount"
    $userAssignedManagedIdentity = "userAssignedManagedIdentity"
    
  3. Gebruik de PowerShell-cmdlet New-AzRoleAssignment om een rol toe te wijzen aan de door het systeem toegewezen beheerde identiteit.

    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  4. Wijs een rol toe aan een door de gebruiker toegewezen beheerde identiteit.

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity)
    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  5. Geef voor de door het systeem toegewezen beheerde identiteit ClientId de waarde weer en noteer deze voor later gebruik.

    $UAMI.ClientId
    

Een runbook maken voor het afhandelen van waarschuwingen

Als u Automation wilt gebruiken met waarschuwingen, hebt u een runbook nodig waarmee de JSON-nettolading van de waarschuwing wordt beheerd die wordt doorgegeven aan het runbook. Het volgende voorbeeldrunbook moet worden aangeroepen vanuit een Azure-waarschuwing.

Zoals beschreven in de vorige sectie, heeft elk type waarschuwing een ander schema. Het script gebruikt de webhookgegevens uit een waarschuwing in de invoerparameter van het WebhookData runbook. Vervolgens evalueert het script de JSON-nettolading om te bepalen welk waarschuwingstype wordt gebruikt.

In dit voorbeeld wordt een waarschuwing van een virtuele Azure-machine (VM) gebruikt. Hiermee worden de VM-gegevens opgehaald uit de nettolading en worden deze gegevens vervolgens gebruikt om de VIRTUELE machine te stoppen. De verbinding moet worden ingesteld in het Automation-account waarop het runbook wordt uitgevoerd. Wanneer u waarschuwingen gebruikt om runbooks te activeren, is het belangrijk om de waarschuwingsstatus in het runbook te controleren dat wordt geactiveerd. Het runbook wordt telkens geactiveerd wanneer de status van de waarschuwing verandert. Waarschuwingen hebben meerdere statussen, waarbij de twee meest voorkomende worden geactiveerd en opgelost. Controleer op de status in uw runbooklogica om ervoor te zorgen dat het runbook niet meer dan één keer wordt uitgevoerd. In het voorbeeld in dit artikel ziet u hoe u alleen waarschuwingen kunt zoeken met de status Geactiveerd.

Het runbook maakt gebruik van de door het Automation-accountsysteem toegewezen beheerde identiteit om te verifiëren met Azure om de beheeractie uit te voeren op de VIRTUELE machine. Het runbook kan eenvoudig worden gewijzigd om een door de gebruiker toegewezen beheerde identiteit te gebruiken.

Notitie

U wordt aangeraden openbare netwerktoegang te gebruiken, omdat het niet mogelijk is om een Azure-waarschuwing (metrische gegevens, logboek en activiteitenlogboek) te gebruiken om een Automation-webhook te activeren wanneer het Automation-account privékoppelingen gebruikt en is geconfigureerd met Openbare toegang ingesteld op Uitschakelen.

Gebruik dit voorbeeld om een runbook met de naam Stop-AzureVmInResponsetoVMAlert te maken. U kunt het PowerShell-script wijzigen en gebruiken met veel verschillende resources.

  1. Meld u aan bij Azure Portal en navigeer naar uw Automation-account.

  2. Selecteer onder Procesautomatisering de optie Runbooks.

  3. Selecteer + Een runbook maken.

    1. Geef het runbook Stop-AzureVmInResponsetoVMAlerteen naam.
    2. Selecteer PowerShell in de vervolgkeuzelijst Runbooktype.
    3. Selecteer Maken.
  4. Plak de volgende code in de runbookeditor:

    [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."
    }
    
  5. Als u wilt dat het runbook wordt uitgevoerd met de door het systeem toegewezen beheerde identiteit, laat u de code staan. Als u liever een door de gebruiker toegewezen beheerde identiteit gebruikt, gaat u als volgende te werk:

    1. Uit regel 78, verwijder $AzureContext = (Connect-AzAccount -Identity).context,
    2. Vervang het door $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context, en
    3. Voer de client-id in die u eerder hebt verkregen.
  6. Selecteer Opslaan, Publiceren en vervolgens Ja wanneer hierom wordt gevraagd.

  7. Sluit de runbookpagina om terug te keren naar de pagina Automation-account .

De waarschuwing maken

Waarschuwingen maken gebruik van actiegroepen. Dit zijn verzamelingen acties die worden geactiveerd door de waarschuwing. Runbooks zijn slechts een van de vele acties die u kunt gebruiken met actiegroepen.

  1. Selecteer waarschuwingen in uw Automation-account onder Bewaking.

  2. Selecteer + Nieuwe waarschuwingsregel om de pagina Waarschuwingsregel maken te openen.

    The create alert rule page and subsections.

  3. Selecteer onder Bereik de optie Resource bewerken.

  4. Selecteer op de pagina Een resource selecteren in de vervolgkeuzelijst Filteren op resourcetype virtuele machines.

  5. Schakel het selectievakje in naast de virtuele machine(s) die u wilt bewaken. Selecteer Vervolgens Gereed om terug te keren naar de pagina Waarschuwingsregel maken.

  6. Selecteer Voorwaarde toevoegen onder Voorwaarde.

  7. Voer op de pagina Een signaal selecteren Percentage CPU het zoektekstvak in en selecteer vervolgens Percentage CPU in de resultaten.

  8. Voer op de pagina Signaallogica configureren onder Drempelwaarde een initiële lage waarde in voor testdoeleinden, zoals 5. U kunt deze waarde teruggaan en bijwerken zodra u hebt bevestigd dat de waarschuwing werkt zoals verwacht. Selecteer Vervolgens Gereed om terug te keren naar de pagina Waarschuwingsregel maken.

    Entering CPU percentage threshold value.

  9. Selecteer onder Acties actiegroepen toevoegen en vervolgens +Actiegroep maken.

    The create action group page with Basics tab open.

  10. Op de pagina Actiegroep maken:

    1. Voer op het tabblad Basisinformatie een actiegroepnaam en weergavenaam in.

    2. Voer op het tabblad Acties in het tekstvak Naam een naam in. Selecteer vervolgens in de vervolgkeuzelijst Actietype Automation Runbook om de pagina Runbook configureren te openen.

      1. Selecteer Gebruiker voor het bronitem Runbook.

      2. Selecteer uw abonnement in de vervolgkeuzelijst Abonnement .

      3. Selecteer uw Automation-account in de vervolgkeuzelijst van het Automation-account .

      4. Selecteer Stop-AzureVmInResponsetoVMAlert in de vervolgkeuzelijst Runbook.

      5. Selecteer Ja voor het algemene waarschuwingsschema-item inschakelen.

      6. Selecteer OK om terug te keren naar de pagina Actiegroep maken.

        Configure runbook page with values.

    3. Selecteer Controleren en maken en vervolgens Maken om terug te keren naar de pagina Waarschuwingsregel maken.

  11. Onder Details van waarschuwingsregel voor het tekstvak Naam van waarschuwingsregel.

  12. Selecteer Waarschuwingsregel maken. U kunt de actiegroep gebruiken in de waarschuwingen voor activiteitenlogboeken en bijna realtime waarschuwingen die u maakt.

Verificatie

Zorg ervoor dat uw VIRTUELE machine wordt uitgevoerd. Navigeer naar het runbook Stop-AzureVmInResponsetoVMAlert en kijk of de lijst Recente taken moet worden ingevuld. Zodra een voltooide taak wordt weergegeven, selecteert u de taak en controleert u de uitvoer. Controleer ook of de VM is gestopt.

Showing output from job.

Algemene beheerbewerkingen voor Azure-VM's

Azure Automation biedt scripts voor algemene beheerbewerkingen van Azure-VM's, zoals vm opnieuw opstarten, VM stoppen, VM verwijderen, scenario's voor omhoog en omlaag schalen in de runbookgalerie. De scripts vindt u ook in de GitHub-opslagplaats van Azure Automation. U kunt deze scripts ook gebruiken, zoals vermeld in de bovenstaande stappen.

Azure VM-beheerbewerkingen Details
Stop-Azure-VM-On-Alert Met dit runbook wordt een Azure Resource Manager-VM gestopt als reactie op een Azure-waarschuwingstrigger.

Invoer is waarschuwingsgegevens met informatie die nodig is om te bepalen welke VM moet worden gestopt.

Het runbook moet worden aangeroepen vanuit een Azure-waarschuwing via een webhook.

De nieuwste versie van de Az-module moet worden toegevoegd aan het Automation-account.

Beheerde identiteit moet zijn ingeschakeld en inzendertoegang tot het Automation-account moet worden gegeven.
Restart-Azure-VM-On-Alert Met dit runbook wordt een Azure Resource Manager-VM gestopt als reactie op een Azure-waarschuwingstrigger.

Invoer is waarschuwingsgegevens met informatie die nodig is om te bepalen welke VM moet worden gestopt.

Het runbook moet worden aangeroepen vanuit een Azure-waarschuwing via een webhook.

De nieuwste versie van de Az-module moet worden toegevoegd aan het Automation-account.

Beheerde identiteit moet zijn ingeschakeld en inzendertoegang tot het Automation-account moet worden gegeven.
Delete-Azure-VM-On-Alert Met dit runbook wordt een Azure Resource Manager-VM gestopt als reactie op een Azure-waarschuwingstrigger.

Invoer is waarschuwingsgegevens met informatie die nodig is om te bepalen welke VM moet worden gestopt.

Het runbook moet worden aangeroepen vanuit een Azure-waarschuwing via een webhook.

De nieuwste versie van de Az-module moet worden toegevoegd aan het Automation-account.

Beheerde identiteit moet zijn ingeschakeld en inzendertoegang tot het Automation-account moet worden gegeven.
ScaleDown-Azure-VM-on-alert Met dit runbook wordt een Azure Resource Manager-VM gestopt als reactie op een Azure-waarschuwingstrigger.

Invoer is waarschuwingsgegevens met informatie die nodig is om te bepalen welke VM moet worden gestopt.

Het runbook moet worden aangeroepen vanuit een Azure-waarschuwing via een webhook.

De nieuwste versie van de Az-module moet worden toegevoegd aan het Automation-account.

Beheerde identiteit moet zijn ingeschakeld en inzendertoegang tot het Automation-account moet worden gegeven.
ScaleUp-Azure-VM-On-Alert Met dit runbook wordt een Azure Resource Manager-VM gestopt als reactie op een Azure-waarschuwingstrigger.

Invoer is waarschuwingsgegevens met informatie die nodig is om te bepalen welke VM moet worden gestopt.

Het runbook moet worden aangeroepen vanuit een Azure-waarschuwing via een webhook.

De nieuwste versie van de Az-module moet worden toegevoegd aan het Automation-account.

Beheerde identiteit moet zijn ingeschakeld en inzendertoegang tot het Automation-account moet worden gegeven.

Volgende stappen