Použití upozornění k aktivaci runbooku Azure Automation

Azure Monitor můžete použít k monitorování metrik a protokolů základní úrovně pro většinu služeb v Azure. Runbooky Azure Automation můžete volat pomocí skupin akcí k automatizaci úloh na základě upozornění. V tomto článku se dozvíte, jak nakonfigurovat a spustit runbook pomocí upozornění.

Předpoklady

Typy výstrah

Runbooky automation můžete používat se třemi typy upozornění:

  • Běžná upozornění
  • Upozornění protokolu aktivit
  • Upozornění metrik téměř v reálném čase

Poznámka:

Běžné schéma upozornění standardizuje prostředí spotřeby pro oznámení výstrah v Azure. V minulosti měly tři typy upozornění v Azure (metrika, protokol a protokol aktivit) vlastní e-mailové šablony, schémata webhooků atd. Další informace najdete v tématu Běžné schéma upozornění.

Když výstraha volá runbook, skutečné volání je požadavek HTTP POST na webhook. Text požadavku POST obsahuje objekt ve formátu JSON, který má užitečné vlastnosti související s výstrahou. Následující tabulka uvádí odkazy na schéma datové části pro každý typ výstrahy:

Výstrahy Popis Schéma datové části
Běžná výstraha Běžné schéma upozornění, které standardizuje prostředí spotřeby pro oznámení výstrah v Azure dnes. Schéma běžné datové části upozornění
Upozornění protokolu aktivit Odešle oznámení, když jakákoli nová událost v protokolu aktivit Azure odpovídá konkrétním podmínkám. Například když Delete VM dojde k operaci v myProductionResourceGroup nebo když se zobrazí nová událost služby Azure Service Health s aktivním stavem. Schéma datové části upozornění protokolu aktivit
Upozornění metrik téměř v reálném čase Odešle oznámení rychleji než upozornění na metriky, když jedna nebo více metrik na úrovni platformy splňuje zadané podmínky. Pokud je například hodnota pro využití procesoru na virtuálním počítači větší než 90 a hodnota sítě In je za posledních 5 minut větší než 500 MB. Schéma datové části upozornění na metriku téměř v reálném čase

Vzhledem k tomu, že data poskytovaná jednotlivými typy výstrah se liší, každý typ výstrahy se zpracovává jinak. V další části se dozvíte, jak vytvořit runbook pro zpracování různých typů upozornění.

Přiřazení oprávnění spravovaným identitám

Přiřaďte oprávnění příslušné spravované identitě , aby mohla zastavit virtuální počítač. Runbook může používat spravovanou identitu přiřazenou systémem účtu Automation nebo spravovanou identitu přiřazenou uživatelem. Kroky jsou k dispozici pro přiřazení oprávnění ke každé identitě. Následující postup použijte PowerShell. Pokud dáváte přednost používání portálu, přečtěte si téma Přiřazení rolí Azure pomocí webu Azure Portal.

  1. Přihlaste se k Azure interaktivně pomocí rutiny Připojení-AzAccount a postupujte podle pokynů.

    # 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. Zadejte odpovídající hodnotu pro níže uvedené proměnné a spusťte skript.

    $resourceGroup = "resourceGroup"
    $automationAccount = "AutomationAccount"
    $userAssignedManagedIdentity = "userAssignedManagedIdentity"
    
  3. Pomocí rutiny PowerShellu New-AzRoleAssignment přiřaďte roli spravované identitě přiřazené systémem.

    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  4. Přiřaďte roli spravované identitě přiřazené uživatelem.

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity)
    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  5. U spravované identity přiřazené systémem zobrazte ClientId a poznamenejte si hodnotu pro pozdější použití.

    $UAMI.ClientId
    

Vytvoření runbooku pro zpracování výstrah

Pokud chcete službu Automation používat s upozorněními, potřebujete runbook, který spravuje datovou část JSON upozornění, která se předá runbooku. Následující příklad runbooku musí být volána z upozornění Azure.

Jak je popsáno v předchozí části, každý typ výstrahy má jiné schéma. Skript vezme data webhooku z výstrahy ve vstupním parametru runbooku WebhookData . Pak skript vyhodnotí datovou část JSON a určí, jaký typ výstrahy se používá.

Tento příklad používá upozornění z virtuálního počítače Azure. Načte data virtuálního počítače z datové části a pak pomocí této informace zastaví virtuální počítač. Připojení musí být nastavené v účtu Automation, ve kterém je runbook spuštěný. Při použití upozornění k aktivaci runbooků je důležité zkontrolovat stav upozornění v runbooku, který se aktivuje. Runbook se aktivuje při každé změně stavu výstrahy. Výstrahy mají více stavů, přičemž dva nejběžnější jsou Aktivované a Vyřešené. Zkontrolujte stav v logice runbooku, abyste měli jistotu, že runbook neběží více než jednou. Příklad v tomto článku ukazuje, jak vyhledat výstrahy s aktivovaným stavem.

Runbook používá spravovanou identitu přiřazenou systémem účtu Automation k ověření v Azure k provedení akce správy na virtuálním počítači. Runbook je možné snadno upravit tak, aby používal spravovanou identitu přiřazenou uživatelem.

Poznámka:

Doporučujeme používat přístup k veřejné síti, protože není možné použít upozornění Azure (metrika, protokol a protokol aktivit) k aktivaci webhooku Automation, když účet Automation používá privátní propojení a je nakonfigurovaný s veřejnou možností přístupu nastavenou na Zakázat.

Tento příklad použijte k vytvoření runbooku s názvem Stop-AzureVmInResponsetoVMAlert. Skript PowerShellu můžete upravit a použít ho s mnoha různými prostředky.

  1. Přihlaste se k webu Azure Portal a přejděte ke svému účtu Automation.

  2. V části Automatizace procesů vyberte Runbooky.

  3. Vyberte + Vytvořit runbook.

    1. Pojmenujte runbook Stop-AzureVmInResponsetoVMAlert.
    2. V rozevíracím seznamu typu runbooku vyberte PowerShell.
    3. Vyberte Vytvořit.
  4. V editoru runbooku vložte následující kód:

    [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. Pokud chcete, aby runbook běžel se spravovanou identitou přiřazenou systémem, nechejte kód tak, jak je. Pokud chcete použít spravovanou identitu přiřazenou uživatelem, pak:

    1. Z řádku 78 odeberte $AzureContext = (Connect-AzAccount -Identity).context,
    2. Nahraďte ho a $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
    3. Zadejte ID klienta, které jste získali dříve.
  6. Po zobrazení výzvy vyberte Uložit, Publikovat a pak Ano .

  7. Zavřete stránku runbooku a vraťte se na stránku účtu Automation.

Vytvoření výstrahy

Výstrahy používají skupiny akcí, což jsou kolekce akcí aktivovaných výstrahou. Runbooky jsou jen jednou z mnoha akcí, které můžete použít se skupinami akcí.

  1. V účtu Automation v části Monitorování vyberte Výstrahy.

  2. Výběrem + Nové pravidlo upozornění otevřete stránku Vytvořit pravidlo upozornění.

    The create alert rule page and subsections.

  3. V části Obor vyberte Upravit prostředek.

  4. Na stránce Vybrat prostředek v rozevíracím seznamu Filtrovat podle typu prostředku vyberte Virtuální počítače.

  5. Zaškrtněte políčko vedle virtuálních počítačů, které chcete monitorovat. Potom se výběrem možnosti Hotovo vraťte na stránku Vytvořit pravidlo upozornění.

  6. V části Podmínka vyberte Přidat podmínku.

  7. Na stránce Vybrat signál zadejte Percentage CPU do vyhledávacího textového pole a z výsledků vyberte Procento procesoru.

  8. Na stránce Konfigurovat logiku signálu zadejte v části Prahová hodnota počáteční nízkou hodnotu pro účely testování, například 5. Jakmile potvrdíte, že upozornění funguje podle očekávání, můžete se vrátit a tuto hodnotu aktualizovat. Potom se výběrem možnosti Hotovo vraťte na stránku Vytvořit pravidlo upozornění.

    Entering CPU percentage threshold value.

  9. V části Akce vyberte Přidat skupiny akcí a pak +Vytvořit skupinu akcí.

    The create action group page with Basics tab open.

  10. Na stránce Vytvořit skupinu akcí:

    1. Na kartě Základy zadejte název skupiny akcí a zobrazovaný název.

    2. Na kartě Akce zadejte do textového pole Název název název. Potom v rozevíracím seznamu Typ akce vyberte Automation Runbook a otevřete stránku Konfigurovat runbook.

      1. Jako zdrojová položka runbooku vyberte Uživatel.

      2. V rozevíracím seznamu Předplatné vyberte své předplatné.

      3. V rozevíracím seznamu účtu Automation vyberte svůj účet Automation.

      4. V rozevíracím seznamu Runbook vyberte Stop-AzureVmInResponsetoVMAlert.

      5. U položky Povolit společné schéma upozornění vyberte Ano.

      6. Kliknutím na tlačítko OK se vrátíte na stránku Vytvořit skupinu akcí.

        Configure runbook page with values.

    3. Vyberte Zkontrolovat a vytvořit a pak se vraťte na stránku Vytvořit pravidlo upozornění.

  11. V části Podrobnosti o pravidle upozornění zadejte textové pole Název pravidla upozornění.

  12. Vyberte Vytvořit pravidlo upozornění. Skupinu akcí můžete použít v upozorněních protokolu aktivit a téměř v reálném čase, která vytvoříte.

Ověření

Ujistěte se, že je váš virtuální počítač spuštěný. Přejděte do runbooku Stop-AzureVmInResponsetoVMAlert a sledujte seznam posledních úloh , který se má naplnit. Po zobrazení dokončené úlohy vyberte úlohu a zkontrolujte výstup. Zkontrolujte také, jestli se virtuální počítač zastavil.

Showing output from job.

Běžné operace správy virtuálních počítačů Azure

Azure Automation poskytuje skripty pro běžné operace správy virtuálních počítačů Azure, jako je restartování virtuálního počítače, zastavení virtuálního počítače, odstranění virtuálního počítače, vertikální navýšení nebo snížení kapacity v galerii runbooků. Skripty najdete také v úložišti Azure Automation na GitHubu . Tyto skripty můžete také použít, jak je uvedeno v předchozích krocích.

Operace správy virtuálních počítačů Azure Podrobnosti
Zastavení upozornění Azure-VM-On-Alert Tento runbook zastaví virtuální počítač Azure Resource Manageru v reakci na trigger upozornění Azure.

Vstup je data výstrah s informacemi potřebnými k identifikaci virtuálního počítače, který se má zastavit.

Runbook se musí volat z upozornění Azure prostřednictvím webhooku.

Do účtu Automation by se měla přidat nejnovější verze modulu Az.

Spravovaná identita by měla být povolená a přístup přispěvatele k účtu Automation by měl být udělený.
Restartování azure-VM-on-Alert Tento runbook zastaví virtuální počítač Azure Resource Manageru v reakci na trigger upozornění Azure.

Vstup je data výstrah s informacemi potřebnými k identifikaci virtuálního počítače, který se má zastavit.

Runbook se musí volat z upozornění Azure prostřednictvím webhooku.

Do účtu Automation by se měla přidat nejnovější verze modulu Az.

Spravovaná identita by měla být povolená a přístup přispěvatele k účtu Automation by měl být udělený.
Odstranění upozornění azure-VM-On-Alert Tento runbook zastaví virtuální počítač Azure Resource Manageru v reakci na trigger upozornění Azure.

Vstup je data výstrah s informacemi potřebnými k identifikaci virtuálního počítače, který se má zastavit.

Runbook se musí volat z upozornění Azure prostřednictvím webhooku.

Do účtu Automation by se měla přidat nejnovější verze modulu Az.

Spravovaná identita by měla být povolená a přístup přispěvatele k účtu Automation by měl být udělený.
ScaleDown-Azure-VM-On-Alert Tento runbook zastaví virtuální počítač Azure Resource Manageru v reakci na trigger upozornění Azure.

Vstup je data výstrah s informacemi potřebnými k identifikaci virtuálního počítače, který se má zastavit.

Runbook se musí volat z upozornění Azure prostřednictvím webhooku.

Do účtu Automation by se měla přidat nejnovější verze modulu Az.

Spravovaná identita by měla být povolená a přístup přispěvatele k účtu Automation by měl být udělený.
Upozornění na škálování na virtuální počítač Azure Tento runbook zastaví virtuální počítač Azure Resource Manageru v reakci na trigger upozornění Azure.

Vstup je data výstrah s informacemi potřebnými k identifikaci virtuálního počítače, který se má zastavit.

Runbook se musí volat z upozornění Azure prostřednictvím webhooku.

Do účtu Automation by se měla přidat nejnovější verze modulu Az.

Spravovaná identita by měla být povolená a přístup přispěvatele k účtu Automation by měl být udělený.

Další kroky