Azure Automation-runbook aktiválása riasztással

Az Azure Monitor használatával monitorozhat alapszintű metrikákat és naplókat az Azure legtöbb szolgáltatásához. Az Azure Automation-runbookokat műveletcsoportok használatával hívhatja meg a feladatok riasztások alapján történő automatizálásához. Ez a cikk bemutatja, hogyan konfigurálhat és futtathat runbookokat riasztások használatával.

Előfeltételek

Riasztástípusok

Az automation runbookokat három riasztástípussal használhatja:

  • Gyakori riasztások
  • Tevékenységnapló-alapú riasztások
  • Közel valós idejű metrikariasztások

Megjegyzés:

A gyakori riasztási séma szabványosítja a riasztási értesítések használati élményét az Azure-ban. Az Azure három riasztástípusa (metrika, napló és tevékenységnapló) korábban saját e-mail sablonokkal, webhooksémákkal stb. rendelkezik. További információ: Gyakori riasztási séma.

Amikor egy riasztás meghív egy runbookot, a tényleges hívás egy HTTP POST-kérés a webhook felé. A POST-kérelem törzse egy JSON formátumú objektumot tartalmaz, amely a riasztáshoz kapcsolódó hasznos tulajdonságokkal rendelkezik. Az alábbi táblázat az egyes riasztástípusok hasznos adatséma hivatkozásait sorolja fel:

Alert Leírás Hasznos adatséma
Gyakori riasztás A riasztási séma, amely szabványosítja a riasztásértesítések használati élményét az Azure-ban. Gyakori riasztási hasznos adatséma.
Tevékenységnapló-riasztás Értesítést küld, ha az Azure-tevékenységnaplóban szereplő új események adott feltételeknek összhangban vannak. Például amikor egy Delete VM művelet a myProductionResourceGroup-ban történik, vagy amikor megjelenik egy új, aktív állapotú Azure Service Health-esemény. Tevékenységnapló-riasztás hasznos adatséma
Közel valós idejű metrikariasztás Gyorsabban küld értesítést, mint a metrikariasztások, ha egy vagy több platformszintű metrikák megfelelnek a megadott feltételeknek. Ha például egy virtuális gépen a PROCESSZOR %-ának értéke nagyobb, mint 90, és a Network In értéke 500 MB-nál nagyobb az elmúlt 5 percben. Közel valós idejű metrikariasztás hasznos adatséma

Mivel az egyes riasztástípusok által biztosított adatok eltérőek, a rendszer minden riasztástípust másként kezel. A következő szakaszban megtudhatja, hogyan hozhat létre runbookot a különböző típusú riasztások kezeléséhez.

Engedélyek hozzárendelése felügyelt identitásokhoz

Rendeljen engedélyeket a megfelelő felügyelt identitáshoz , hogy lehetővé tegye a virtuális gép leállítását. A runbook használhatja az Automation-fiók rendszer által hozzárendelt felügyelt identitását vagy egy felhasználó által hozzárendelt felügyelt identitást. A lépések meg vannak adva az egyes identitásokhoz való engedélyek hozzárendeléséhez. Az alábbi lépések a PowerShellt használják. Ha inkább a portált szeretné használni, olvassa el az Azure-szerepkörök hozzárendelése az Azure Portal használatával című témakört.

  1. Jelentkezzen be interaktívan az Azure-ba az Csatlakozás-AzAccount parancsmaggal, és kövesse az utasításokat.

    # 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. Adjon meg egy megfelelő értéket az alábbi változókhoz, majd hajtsa végre a szkriptet.

    $resourceGroup = "resourceGroup"
    $automationAccount = "AutomationAccount"
    $userAssignedManagedIdentity = "userAssignedManagedIdentity"
    
  3. A New-AzRoleAssignment PowerShell-parancsmaggal szerepkört rendelhet a rendszer által hozzárendelt felügyelt identitáshoz.

    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  4. Szerepkör hozzárendelése felhasználó által hozzárendelt felügyelt identitáshoz.

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity)
    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  5. A rendszer által hozzárendelt felügyelt identitás esetében jelenítse meg ClientId és rögzítse a későbbi használat értékét.

    $UAMI.ClientId
    

Runbook létrehozása a riasztások kezeléséhez

Az Automation riasztásokkal való használatához olyan runbookra van szükség, amely kezeli a runbooknak átadott JSON-hasznos adatokat. Az alábbi példa runbookot azure-riasztásból kell meghívni.

Az előző szakaszban leírtak szerint minden riasztástípus más sémával rendelkezik. A szkript egy riasztásból veszi át a webhook adatait a WebhookData runbook bemeneti paraméterében. Ezután a szkript kiértékeli a JSON hasznos adatait annak meghatározásához, hogy melyik riasztástípust használja.

Ez a példa egy Azure-beli virtuális gép (VM) riasztását használja. Lekéri a virtuálisgép-adatokat a hasznos adatokból, majd ezeket az információkat felhasználva állítja le a virtuális gépet. A kapcsolatot abban az Automation-fiókban kell beállítani, ahol a runbook fut. Ha riasztásokat használ a runbookok aktiválásához, fontos ellenőrizni az aktivált runbook riasztási állapotát. A runbook minden alkalommal aktiválódik, amikor a riasztás állapota megváltozik. A riasztások több állapottal rendelkeznek, amelyek közül a két leggyakoribb az aktiválás és a feloldás. Ellenőrizze, hogy van-e állapot a runbook logikájában, hogy a runbook ne fusson többször. A cikkben szereplő példa bemutatja, hogyan kereshet csak aktivált állapotú riasztásokat.

A runbook az Automation-fiók rendszer által hozzárendelt felügyelt identitásával hitelesíti az Azure-t a virtuális gép felügyeleti műveletének végrehajtásához. A runbook könnyen módosítható úgy, hogy felhasználó által hozzárendelt felügyelt identitást használjon.

Megjegyzés:

Javasoljuk, hogy nyilvános hálózati hozzáférést használjon, mivel nem használható Azure-riasztás (metrikák, naplók és tevékenységnaplók) az Automation-webhookok aktiválásához, ha az Automation-fiók privát hivatkozásokat használ, és a nyilvános hozzáférés beállítása letiltásra van konfigurálva.

Ebben a példában létrehozhat egy Stop-AzureVmInResponsetoVMAlert nevű runbookot. Módosíthatja a PowerShell-szkriptet, és számos különböző erőforrással használhatja.

  1. Jelentkezzen be az Azure Portalra, és lépjen az Automation-fiókjához.

  2. A Folyamatautomatizálás területen válassza a Runbookok lehetőséget.

  3. Válassza a + Runbook létrehozása lehetőséget.

    1. Nevezze el a runbookot Stop-AzureVmInResponsetoVMAlert.
    2. A Runbook típus legördülő listájában válassza a PowerShellt.
    3. Select Create.
  4. A runbook-szerkesztőben illessze be a következő kódot:

    [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. Ha azt szeretné, hogy a runbook a rendszer által hozzárendelt felügyelt identitással fusson, hagyja meg a kódot. Ha inkább felhasználó által hozzárendelt felügyelt identitást szeretne használni, akkor:

    1. A 78. sorból távolítsa el $AzureContext = (Connect-AzAccount -Identity).contexta
    2. Cserélje le a $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
    3. Adja meg a korábban beszerzett ügyfél-azonosítót.
  6. Ha a rendszer kéri, válassza a Mentés, a Közzététel , majd az Igen lehetőséget.

  7. Zárja be a Runbook lapot az Automation-fiók lapjára való visszatéréshez.

A riasztás létrehozása

A riasztások műveletcsoportokat használnak, amelyek a riasztás által aktivált műveletek gyűjteményei. A runbookok csak egyike a műveletcsoportokkal használható műveleteknek.

  1. Az Automation-fiók Figyelés területén válassza a Riasztások lehetőséget.

  2. Válassza a + Új riasztási szabály lehetőséget a Riasztási szabály létrehozása lap megnyitásához.

    The create alert rule page and subsections.

  3. A Hatókör csoportban válassza az Erőforrás szerkesztése lehetőséget.

  4. Az Erőforrás kiválasztása lap Szűrő erőforrástípus szerinti legördülő listájában válassza a Virtuális gépek lehetőséget.

  5. Jelölje be a monitorozni kívánt virtuális gép(ek) melletti jelölőnégyzetet. Ezután válassza a Kész lehetőséget a riasztási szabály létrehozása lapra való visszatéréshez.

  6. A Feltétel csoportban válassza a Feltétel hozzáadása lehetőséget.

  7. A Jel kiválasztása lapon írja be Percentage CPU a keresőmezőbe, majd válassza ki a Százalékos PROCESSZOR elemet az eredmények közül.

  8. A Jellogika konfigurálása lapon a Küszöbérték érték alatt adjon meg egy kezdeti alacsony értéket tesztelési célokra, például5. Ha megerősítette, hogy a riasztás a várt módon működik, visszatérhet, és frissítheti ezt az értéket. Ezután válassza a Kész lehetőséget a riasztási szabály létrehozása lapra való visszatéréshez.

    Entering CPU percentage threshold value.

  9. A Műveletek csoportban válassza a Műveletcsoportok hozzáadása, majd a +Műveletcsoport létrehozása lehetőséget.

    The create action group page with Basics tab open.

  10. A Műveletcsoport létrehozása lapon:

    1. Az Alapszintű beállítások lapon adja meg a Műveletcsoport nevét és a Megjelenítendő nevet.

    2. A Műveletek lap Név szövegmezőjében adjon meg egy nevet. Ezután a Művelettípus legördülő listában válassza az Automation Runbook lehetőséget a Runbook konfigurálása lap megnyitásához.

      1. A Runbook forráseleméhez válassza a Felhasználó lehetőséget.

      2. Az Előfizetés legördülő listában válassza ki az előfizetést.

      3. Az Automation-fiók legördülő listájában válassza ki az Automation-fiókját.

      4. A Runbook legördülő listájában válassza a Stop-AzureVmInResponsetoVMAlert lehetőséget.

      5. A gyakori riasztási sémaelem engedélyezéséhez válassza az Igen lehetőséget.

      6. Kattintson az OK gombra a Műveletcsoport létrehozása lapra való visszatéréshez.

        Configure runbook page with values.

    3. Válassza a Véleményezés + létrehozás , majd a Létrehozás lehetőséget a Riasztási szabály létrehozása lapra való visszatéréshez.

  11. A Riasztási szabály részletei csoportban adja meg a Riasztási szabály neve szövegmezőt.

  12. Válassza a Riasztási szabály létrehozása lehetőséget. A műveletcsoportot a tevékenységnapló-riasztásokban és a közel valós idejű riasztásokban használhatja.

Ellenőrzés

Győződjön meg arról, hogy a virtuális gép fut. Lépjen a Stop-AzureVmInResponsetoVMAlert runbookra, és figyelje meg, hogy a Legutóbbi feladatok lista ki legyen töltve. Ha megjelenik egy befejezett feladat, jelölje ki a feladatot, és tekintse át a kimenetet. Ellenőrizze azt is, hogy leállt-e a virtuális gép.

Showing output from job.

Gyakori Azure-beli virtuálisgép-kezelési műveletek

Az Azure Automation olyan gyakori Azure-beli virtuálisgép-felügyeleti műveletekhez biztosít szkripteket, mint például a virtuális gép újraindítása, a virtuális gép leállítása, a virtuális gép törlése, a Runbook-katalógusban történő vertikális fel- és leskálázás. A szkriptek az Azure Automation GitHub-adattárban is megtalálhatók. Ezeket a szkripteket a fenti lépésekben leírtak szerint is használhatja.

Azure-beli virtuális gépek felügyeleti műveletei Részletek
Azure-beli virtuális gép riasztásának leállítása Ez a runbook leállítja az Azure Resource Manager-alapú virtuális gépet egy Azure-riasztási eseményindítóra válaszul.

A bemenet olyan riasztási adatok, amelyek a leállítani kívánt virtuális gép azonosításához szükségesek.

A runbookot egy Azure-riasztásból kell meghívni egy webhookon keresztül.

Az Az modul legújabb verzióját hozzá kell adni az automation-fiókhoz.

Engedélyezni kell a felügyelt identitást, és hozzá kell férni az automation-fiókhoz.
Restart-Azure-VM-On-Alert Ez a runbook leállítja az Azure Resource Manager-alapú virtuális gépet egy Azure-riasztási eseményindítóra válaszul.

A bemenet olyan riasztási adatok, amelyek a leállítani kívánt virtuális gép azonosításához szükségesek.

A runbookot egy Azure-riasztásból kell meghívni egy webhookon keresztül.

Az Az modul legújabb verzióját hozzá kell adni az automation-fiókhoz.

Engedélyezni kell a felügyelt identitást, és hozzá kell férni az automation-fiókhoz.
Delete-Azure-VM on-Alert Ez a runbook leállítja az Azure Resource Manager-alapú virtuális gépet egy Azure-riasztási eseményindítóra válaszul.

A bemenet olyan riasztási adatok, amelyek a leállítani kívánt virtuális gép azonosításához szükségesek.

A runbookot egy Azure-riasztásból kell meghívni egy webhookon keresztül.

Az Az modul legújabb verzióját hozzá kell adni az automation-fiókhoz.

Engedélyezni kell a felügyelt identitást, és hozzá kell férni az automation-fiókhoz.
ScaleDown-Azure-VM-on-Alert Ez a runbook leállítja az Azure Resource Manager-alapú virtuális gépet egy Azure-riasztási eseményindítóra válaszul.

A bemenet olyan riasztási adatok, amelyek a leállítani kívánt virtuális gép azonosításához szükségesek.

A runbookot egy Azure-riasztásból kell meghívni egy webhookon keresztül.

Az Az modul legújabb verzióját hozzá kell adni az automation-fiókhoz.

Engedélyezni kell a felügyelt identitást, és hozzá kell férni az automation-fiókhoz.
ScaleUp-Azure-VM on-Alert Ez a runbook leállítja az Azure Resource Manager-alapú virtuális gépet egy Azure-riasztási eseményindítóra válaszul.

A bemenet olyan riasztási adatok, amelyek a leállítani kívánt virtuális gép azonosításához szükségesek.

A runbookot egy Azure-riasztásból kell meghívni egy webhookon keresztül.

Az Az modul legújabb verzióját hozzá kell adni az automation-fiókhoz.

Engedélyezni kell a felügyelt identitást, és hozzá kell férni az automation-fiókhoz.

Következő lépések