Aktivace sady Runbook Azure Automation pomocí výstrahy

Pomocí Azure monitor můžete monitorovat metriky a protokoly základní úrovně pro většinu služeb v Azure. Můžete volat Azure Automation Runbooky pomocí skupin akcí pro automatizaci úloh na základě výstrah. V tomto článku se dozvíte, jak nakonfigurovat a spustit Runbook pomocí výstrah.

Požadavky

Typy výstrah

Runbooky Automation můžete používat se třemi typy výstrah:

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

Poznámka

Běžné schéma výstrah standardizace prostředí spotřeby pro oznamování výstrah v Azure. V minulosti měly tři typy výstrah 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 výstrah.

Když výstraha zavolá Runbook, samotné volání je požadavek HTTP POST Webhooku. Tělo žádosti POST obsahuje objekt ve formátu JSON, který obsahuje užitečné vlastnosti, které se vztahují k výstraze. V následující tabulce jsou uvedeny odkazy na schéma datové části pro každý typ výstrahy:

Výstrahy Description Schéma datové části
Běžná výstraha Běžné schéma výstrah, které spojuje prostředí spotřeby pro oznamování výstrah v Azure ještě dnes. Běžné schéma datové části výstrahy.
Upozornění protokolu aktivit Pošle oznámení, pokud jakákoli nová událost v protokolu aktivit Azure odpovídá specifickým podmínkám. Například při Delete VM výskytu operace v myProductionResourceGroup nebo při zobrazení nové události Azure Service Health s aktivním stavem. Schéma datové části upozornění protokolu aktivit
Výstraha metriky téměř v reálném čase Pokud jedna nebo více metrik na úrovni platformy splňuje zadané podmínky, pošle oznámení rychleji než výstrahy metriky. Například pokud je hodnota pro procesor% na virtuálním počítači větší než 90 a hodnota pro síť v je větší než 500 MB za posledních 5 minut. Schéma datové části výstrah téměř v reálném čase

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

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

Přiřaďte oprávnění ke správné spravované identitě , aby mohl virtuální počítač zastavit. Sada Runbook může použít spravovanou identitu přiřazenou systémem účtu Automation nebo uživatelem přiřazenou identitu. Jsou k dispozici kroky 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í 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ásledující proměnné a potom spusťte skript.

    $resourceGroup = "resourceGroup"
    $automationAccount = "AutomationAccount"
    $userAssignedManagedIdentity = "userAssignedManagedIdentity"
    
  3. Pomocí rutiny prostředí PowerShell 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řazení role k spravované identitě přiřazené uživateli

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity)
    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  5. Pro spravovanou identitu přiřazenou systémem zobrazte ClientId a zaznamenejte hodnotu pro pozdější použití.

    $UAMI.ClientId
    

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

Chcete-li použít automatizaci s výstrahami, potřebujete sadu Runbook, která spravuje datovou část JSON výstrahy, která je předána do sady Runbook. Následující příklad Runbooku musí být volán z výstrahy Azure.

Jak je popsáno v předchozí části, každý typ výstrahy má jiné schéma. Skript převezme data Webhooku z výstrahy ve WebhookData vstupním parametru Runbooku. Potom skript vyhodnocuje datovou část JSON a určí, který typ výstrahy se používá.

V tomto příkladu se používá výstraha z virtuálního počítače Azure (VM). Načte data virtuálního počítače z datové části a pak tyto informace použije k zastavení virtuálního počítače. Připojení musí být nastaveno v účtu Automation, ve kterém je sada Runbook spuštěna. Pokud používáte výstrahy pro aktivaci runbooků, je důležité kontrolovat stav upozornění v aktivovaném Runbooku. Sada Runbook se spustí při každé změně stavu výstrahy. Výstrahy mají více stavů, přičemž tyto dva nejběžnější jsou aktivované a vyřešené. Zkontrolujte stav v logice Runbooku, abyste se ujistili, že se Runbook nespustí víckrát než jednou. V příkladu v tomto článku se dozvíte, jak vyhledat výstrahy se stavem aktivováno.

Sada Runbook používá spravovanou identitu přiřazenou systémem účtu Automation k ověřování pomocí Azure za účelem provedení akce správy s virtuálním počítačem. Sadu Runbook lze snadno upravit tak, aby používala uživatelsky přiřazenou spravovanou identitu.

Tento příklad slouží k vytvoření sady Runbook 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 Azure Portala přejděte k účtu Automation.

  2. V části Automatizace procesu vyberte Runbooky.

  3. Vyberte + vytvořit Runbook.

    1. Pojmenujte Runbook Stop-AzureVmInResponsetoVMAlert .
    2. V rozevíracím seznamu typ Runbooku vyberte PowerShell.
    3. Vyberte Vytvořit.
  4. V editoru runbooků 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 sada Runbook běžela se spravovanou identitou přiřazenou systémem, ponechte kód tak, jak je. Pokud dáváte přednost použití spravované identity přiřazené uživatelem, postupujte takto:

    1. Z řádku 78, odebrat $AzureContext = (Connect-AzAccount -Identity).context ,
    2. Nahraďte parametrem $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context a
    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í, které výstraha aktivovala. Sady Runbook jsou pouze jednou z mnoha akcí, které lze použít se skupinami akcí.

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

  2. Vyberte + nové pravidlo výstrahy a otevřete stránku vytvořit pravidlo upozornění .

    Na stránce Vytvořit pravidlo výstrahy a pododdíly.

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

  4. Na stránce Vyberte 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 vyberte Hotovo a vraťte se na stránku vytvořit pravidlo upozornění .

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

  7. Na stránce vyberte signál zadejte Percentage CPU do textového pole hledání a pak z výsledků vyberte procento CPU .

  8. Na stránce Konfigurovat logiku signálu v oblasti prahová hodnota zadejte počáteční nízkou hodnotu pro účely testování, například 5 . Jakmile ověříte, že výstraha funguje podle očekávání, můžete přejít zpět a aktualizovat tuto hodnotu. Potom vyberte Hotovo a vraťte se na stránku vytvořit pravidlo upozornění .

    Zadává se prahová hodnota procenta procesoru.

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

    Stránka vytvořit skupinu akcí s otevřenou kartou základy.

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

    1. Na kartě základy zadejte název skupiny akcí a zobrazované jméno.

    2. Na kartě Akce v textovém poli název zadejte název. Potom v rozevíracím seznamu typ akce vyberte Automation Runbook a otevřete stránku Konfigurovat sadu Runbook .

      1. Jako zdrojovou položku Runbooku vyberte uživatel.

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

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

      4. V rozevíracím seznamu Runbooku vyberte stop-AzureVmInResponsetoVMAlert.

      5. U položky Povolit schéma běžné výstrahy vyberte Ano.

      6. Kliknutím na tlačítko OK se vraťte na stránku vytvořit skupinu akcí .

        Stránka sady Runbook se konfiguruje s hodnotami.

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

  11. V části Podrobnosti pravidla výstrahy zadejte do textového pole název pravidla výstrahy .

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

Ověření

Ujistěte se, že je váš virtuální počítač spuštěný. Přejděte na Runbook stop-AzureVmInResponsetoVMAlert a sledujte poslední seznam úloh , které se naplní. Po zobrazení dokončené úlohy vyberte úlohu a zkontrolujte výstup. Zkontrolujte také, jestli je váš virtuální počítač zastavený.

Zobrazuje se výstup z úlohy.

Další kroky