Een waarschuwing gebruiken om een Azure Automation runbook te activeren

U kunt deze Azure Monitor voor het bewaken van metrische gegevens en logboeken op basisniveau voor de meeste services in Azure. U kunt runbooks Azure Automation met behulp van actiegroepen om taken te automatiseren op basis van waarschuwingen. In dit artikel wordt beschreven hoe u een runbook kunt configureren en uitvoeren met behulp van waarschuwingen.

Vereisten

Waarschuwingstypen

U kunt Automation-runbooks gebruiken met drie waarschuwingstypen:

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

Notitie

Het algemene waarschuwingsschema standaardiseer de verbruikservaring voor waarschuwingsmeldingen in Azure. In het verleden hadden de drie waarschuwingstypen in Azure (metrische gegevens, logboeken en activiteitenlogboek) hun eigen e-mailsjablonen, webhookschema's, enzovoort. Zie Common alert schema (Algemeen waarschuwingsschema) voor meer informatie.

Wanneer een waarschuwing een runbook aanroept, is de werkelijke aanroep een HTTP POST-aanvraag voor de webhook. De body van de POST-aanvraag bevat een JSON-geformatteerd object met nuttige eigenschappen die zijn gerelateerd aan de waarschuwing. De volgende tabel bevat koppelingen naar het payloadschema voor elk waarschuwingstype:

Waarschuwing Beschrijving Nettoladingschema
Algemene waarschuwing Het algemene waarschuwingsschema dat de verbruikservaring voor waarschuwingsmeldingen in Azure standaardiseren. Algemeen payloadschema voor waarschuwingen.
Waarschuwing voor activiteitenlogboek Hiermee wordt een melding verzendt wanneer een nieuwe gebeurtenis in het Azure-activiteitenlogboek overeenkomt met specifieke voorwaarden. Bijvoorbeeld wanneer een Delete VM bewerking plaatsvindt in myProductionResourceGroup of wanneer er een nieuwe Azure Service Health gebeurtenis met de status Actief wordt weergegeven. Payloadschema voor waarschuwingen voor activiteitenlogboek
Waarschuwing voor bijna realtime metrische gegevens Verzendt een melding sneller dan waarschuwingen voor metrische gegevens wanneer een of meer metrische gegevens op platformniveau voldoen aan opgegeven voorwaarden. Bijvoorbeeld wanneer de waarde voor CPU%op een VM groter is dan 90 en de waarde voor Netwerk in groter is dan 500 MB voor de afgelopen 5 minuten. Nettoladingschema voor waarschuwingen voor bijna realtime metrische gegevens

Omdat de gegevens die door elk type waarschuwing worden verstrekt anders zijn, wordt elk waarschuwingstype anders verwerkt. In de volgende sectie leert u hoe u een runbook maakt voor het afhandelen van verschillende soorten 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 voor het toewijzen van machtigingen aan elke identiteit. In de onderstaande stappen wordt PowerShell gebruikt. Als u liever de portal gebruikt, zie Azure-rollen toewijzen met behulp van de Azure Portal.

  1. Meld u interactief aan bij Azure met 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. Voor de door het systeem toegewezen beheerde identiteit moet u de waarde voor ClientId later gebruik tonen en registreren.

    $UAMI.ClientId
    

Een runbook maken voor het afhandelen van waarschuwingen

Als u Automation wilt gebruiken met waarschuwingen, hebt u een runbook nodig dat de JSON-nettolading van de waarschuwing beheert die aan het runbook wordt doorgegeven. 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 neemt de webhookgegevens van een waarschuwing in de WebhookData invoerparameter van het 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. De VM-gegevens worden opgehaald uit de nettolading en vervolgens wordt die informatie gebruikt om de VM te stoppen. De verbinding moet worden ingesteld in het Automation-account waar het runbook wordt uitgevoerd. Wanneer u waarschuwingen gebruikt om runbooks te activeren, is het belangrijk om de status van de waarschuwing te controleren in het runbook dat wordt geactiveerd. Het runbook wordt telkens wanneer de status van de waarschuwing verandert, triggers. Waarschuwingen hebben meerdere -staten. De twee meest voorkomende zijn Geactiveerd en Opgelost. Controleer de status van 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 kunt zoeken naar waarschuwingen met de status Alleen geactiveerd.

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

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

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

  2. Selecteer onder Procesautomatisering de optie Runbooks.

  3. Selecteer + Een runbook maken.

    1. Noem het runbook Stop-AzureVmInResponsetoVMAlert .
    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 zoals deze is. Als u liever een door de gebruiker toegewezen beheerde identiteit gebruikt, gaat u als volgende te werk:

    1. Verwijder vanaf regel 78, $AzureContext = (Connect-AzAccount -Identity).context ,
    2. Vervang deze 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 u hier om wordt gevraagd.

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

De waarschuwing maken

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

  1. Selecteer in uw Automation-account onder Bewaking de optie Waarschuwingen.

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

    De pagina waarschuwingsregel en subsecties maken.

  3. Selecteer onder Bereik de optie Resource bewerken.

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

  5. Vink het selectievakje aan naast de virtuele machine(s) die u wilt bewaken. Selecteer vervolgens Done om terug te keren naar de pagina Waarschuwingsregel maken.

  6. Selecteer onder Voorwaarde de optie Voorwaarde toevoegen.

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

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

    Drempelwaarde cpu-percentage invoeren.

  9. Selecteer onder Acties de optie Actiegroepen toevoegen en vervolgens +Actiegroep maken.

    De pagina Actiegroep maken met het tabblad Basisinformatie geopend.

  10. Op de pagina Actiegroep maken:

    1. Voer op het tabblad Basisinformatie de naam van een actiegroep en de Weergavenaam in.

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

      1. Selecteer voor het runbookbronitem De optie Gebruiker.

      2. Selecteer uw abonnement in de vervolgkeuzelijst Abonnement.

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

      4. Selecteer stop-AzureVmInResponsetoVMAlert in de vervolgkeuzelijst Runbook.

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

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

        Runbookpagina configureren met waarden.

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

  11. Onder Details waarschuwingsregel voor het tekstvak Naam waarschuwingsregel.

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

Verificatie

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

Uitvoer van taak weergegeven.

Volgende stappen

  • Zie Een runbook starten voor verschillende manieren om een runbook te starten.
  • Zie Waarschuwingen voor activiteitenlogboek maken voor informatie over het maken van een waarschuwing voor activiteitenlogboek.
  • Zie Een waarschuwingsregel maken in de Azure Portal voor meer informatie over het maken van eenAzure Portal.