Azure Otomasyonu runbook'u tetikleme uyarısı kullanma

Azure İzleyici'yi kullanarak Azure'daki çoğu hizmet için temel düzey ölçümleri ve günlükleri izleyebilirsiniz. Uyarıları temel alan görevleri otomatikleştirmek için eylem gruplarını kullanarak Azure Otomasyonu runbook'ları çağırabilirsiniz. Bu makalede, uyarıları kullanarak bir runbook'u yapılandırma ve çalıştırma işlemleri gösterilmektedir.

Ön koşullar

Uyarı türleri

Otomasyon runbook'larını üç uyarı türüyle kullanabilirsiniz:

  • Sık karşılaşılan uyarılar
  • Etkinlik günlüğü uyarıları
  • Neredeyse gerçek zamanlı ölçüm uyarıları

Dekont

Ortak uyarı şeması, Azure'daki uyarı bildirimleri için tüketim deneyimini standartlaştırır. Geçmişte Azure'daki üç uyarı türünün (ölçüm, günlük ve etkinlik günlüğü) kendi e-posta şablonları, web kancası şemaları vb. vardı. Daha fazla bilgi edinmek için bkz . Ortak uyarı şeması.

Bir uyarı runbook'u çağırdığında, asıl çağrı web kancasına yönelik bir HTTP POST isteğidir. POST isteğinin gövdesi, uyarıyla ilgili yararlı özelliklere sahip JSON biçimli bir nesne içerir. Aşağıdaki tabloda her uyarı türü için yük şemasının bağlantıları listelenmiştir:

Uyarı Tanım Yük şeması
Ortak uyarı Bugün Azure'da uyarı bildirimleri için tüketim deneyimini standartlaştıran ortak uyarı şeması. Yaygın uyarı yükü şeması.
Etkinlik günlüğü uyarısı Azure etkinlik günlüğündeki herhangi bir yeni olay belirli koşullarla eşleştiğinde bir bildirim gönderir. Örneğin, myProductionResourceGroup içinde bir Delete VM işlem gerçekleştiğinde veya Etkin durumda yeni bir Azure Hizmet Durumu olayı görüntülendiğinde. Etkinlik günlüğü uyarısı yük şeması
Neredeyse gerçek zamanlı ölçüm uyarısı Bir veya daha fazla platform düzeyinde ölçüm belirtilen koşulları karşıladığında ölçüm uyarılarından daha hızlı bir bildirim gönderir. Örneğin, bir VM'deki CPU % değeri 90'dan büyükse ve Ağ gelen değeri son 5 dakika için 500 MB'tan büyükse. Neredeyse gerçek zamanlı ölçüm uyarısı yük şeması

Her uyarı türü tarafından sağlanan veriler farklı olduğundan, her uyarı türü farklı işlenir. Sonraki bölümde, farklı uyarı türlerini işlemek için bir runbook oluşturmayı öğreneceksiniz.

Yönetilen kimliklere izin atama

Sanal makineyi durdurmasına izin vermek için uygun yönetilen kimliğe izinler atayın. Runbook, Otomasyon hesabının sistem tarafından atanan yönetilen kimliğini veya kullanıcı tarafından atanan yönetilen kimliği kullanabilir. Her kimliğe izin atamak için adımlar sağlanır. Aşağıdaki adımlarda PowerShell kullanılır. Portalı kullanmayı tercih ediyorsanız bkz . Azure portalını kullanarak Azure rolleri atama.

  1. Bağlan-AzAccount cmdlet'ini kullanarak Azure'da etkileşimli olarak oturum açın ve yönergeleri izleyin.

    # 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. Aşağıdaki değişkenler için uygun bir değer sağlayın ve betiği yürütür.

    $resourceGroup = "resourceGroup"
    $automationAccount = "AutomationAccount"
    $userAssignedManagedIdentity = "userAssignedManagedIdentity"
    
  3. Sistem tarafından atanan yönetilen kimliğe rol atamak için New-AzRoleAssignment PowerShell cmdlet'ini kullanın.

    $SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId
    New-AzRoleAssignment `
        -ObjectId $SAMI `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  4. Kullanıcı tarafından atanan yönetilen kimliğe rol atayın.

    $UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity)
    New-AzRoleAssignment `
        -ObjectId $UAMI.PrincipalId `
        -ResourceGroupName $resourceGroup `
        -RoleDefinitionName "DevTest Labs User"
    
  5. Sistem tarafından atanan yönetilen kimlik için değeri daha sonra kullanmak üzere gösterin ClientId ve kaydedin.

    $UAMI.ClientId
    

Uyarıları işlemek için runbook oluşturma

Otomasyon'u uyarılarla kullanmak için runbook'a geçirilen uyarı JSON yükünü yöneten bir runbook'a ihtiyacınız vardır. Aşağıdaki örnek runbook bir Azure uyarısından çağrılmalıdır.

Önceki bölümde açıklandığı gibi, her uyarı türünün farklı bir şeması vardır. Betik, runbook giriş parametresindeki bir uyarıdan web kancası WebhookData verilerini alır. Ardından betik, hangi uyarı türünün kullanıldığını belirlemek için JSON yükünü değerlendirir.

Bu örnekte Azure sanal makinesinden (VM) alınan bir uyarı kullanılmaktadır. Yükten VM verilerini alır ve vm'yi durdurmak için bu bilgileri kullanır. Bağlantı, runbook'un çalıştırıldığı Otomasyon hesabında ayarlanmalıdır. Runbook'ları tetikleme uyarılarını kullanırken tetiklenen runbook'ta uyarı durumunu denetlemek önemlidir. Uyarının durumu her değiştiğinde runbook tetikler. Uyarıların birden çok durumu vardır ve en yaygın iki durum Etkinleştirildi ve Çözüldü şeklindedir. Runbook'un birden çok kez çalışmadığından emin olmak için runbook mantığınızda durumu denetleyin. Bu makaledeki örnekte, yalnızca etkin durumundaki uyarıların nasıl aranacakları gösterilmektedir.

Runbook, VM'ye karşı yönetim eylemini gerçekleştirmek üzere Azure'da kimlik doğrulaması yapmak için Otomasyon hesabı sistem tarafından atanan yönetilen kimliği kullanır. Runbook, kullanıcı tarafından atanan yönetilen kimliği kullanacak şekilde kolayca değiştirilebilir.

Dekont

Otomasyon hesabı özel bağlantılar kullandığında ve Genel erişim devre dışı olarak ayarlandığında Otomasyon web kancasını tetikleyen bir Azure uyarısı (ölçüm, günlük ve etkinlik günlüğü) kullanmak mümkün olmadığından genel ağ erişimini kullanmanızı öneririz.

Stop-AzureVmInResponsetoVMAlert adlı bir runbook oluşturmak için bu örneği kullanın. PowerShell betiğini değiştirebilir ve birçok farklı kaynakla kullanabilirsiniz.

  1. Azure portalında oturum açın ve Otomasyon hesabınıza gidin.

  2. İşlem Otomasyonu altında Runbook'lar'ı seçin.

  3. + Runbook oluştur'u seçin.

    1. Runbook'u Stop-AzureVmInResponsetoVMAlertolarak adlandırın.
    2. Runbook türü açılan listesinden PowerShell'i seçin.
    3. Oluştur seçeneğini belirleyin.
  4. Runbook düzenleyicisine aşağıdaki kodu yapıştırın:

    [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. Runbook'un sistem tarafından atanan yönetilen kimlikle yürütülmesini istiyorsanız, kodu olduğu gibi bırakın. Kullanıcı tarafından atanan bir yönetilen kimlik kullanmayı tercih ediyorsanız:

    1. 78. satırdan öğesini kaldırın $AzureContext = (Connect-AzAccount -Identity).context.
    2. değerini ve ile $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).contextdeğiştirin
    3. Daha önce edindiğiniz İstemci Kimliğini girin.
  6. İstendiğinde Kaydet, Yayımla ve ardından Evet'i seçin.

  7. Otomasyon Hesabı sayfasına dönmek için Runbook sayfasını kapatın.

Uyarıyı oluşturma

Uyarılar, uyarı tarafından tetiklenen eylem koleksiyonları olan eylem gruplarını kullanır. Runbook'lar, eylem gruplarıyla kullanabileceğiniz birçok eylemden yalnızca biridir.

  1. Otomasyon hesabınızdaki İzleme'nin altında Uyarılar'ı seçin.

  2. Uyarı kuralı oluştur sayfasını açmak için + Yeni Uyarı Kuralı'nı seçin.

    The create alert rule page and subsections.

  3. Kapsam'ın altında Kaynağı düzenle'yi seçin.

  4. Kaynak seçin sayfasında, Kaynak türüne göre filtrele açılan listesinde Sanal makineler'i seçin.

  5. İzlemek istediğiniz sanal makinelerin yanındaki kutuyu işaretleyin. Ardından Bitti'yi seçerek Uyarı kuralı oluştur sayfasına dönün.

  6. Koşul'un altında Koşul ekle'yi seçin.

  7. Sinyal seçin sayfasında, arama metin kutusuna yazın Percentage CPU ve sonuçlardan CPU Yüzdesi'ni seçin.

  8. Sinyal mantığını yapılandır sayfasında Eşik değeri'nin altında, gibi 5test amacıyla ilk düşük değeri girin. Uyarının beklendiği gibi çalıştığını onayladıktan sonra geri dönüp bu değeri güncelleştirebilirsiniz. Ardından Bitti'yi seçerek Uyarı kuralı oluştur sayfasına dönün.

    Entering CPU percentage threshold value.

  9. Eylemler'in altında Eylem grupları ekle'yi ve ardından +Eylem grubu oluştur'u seçin.

    The create action group page with Basics tab open.

  10. Eylem grubu oluştur sayfasında:

    1. Temel Bilgiler sekmesinde bir Eylem grubu adı ve Görünen ad girin.

    2. Eylemler sekmesindeki Ad metin kutusuna bir ad girin. Ardından Eylem türü açılan listesinden Otomasyon Runbook'u seçerek Runbook'u Yapılandır sayfasını açın.

      1. Runbook kaynak öğesi için Kullanıcı'yı seçin.

      2. Abonelik açılan listesinden aboneliğinizi seçin.

      3. Otomasyon hesabı açılan listesinden Otomasyon hesabınızı seçin.

      4. Runbook açılan listesinde Stop-AzureVmInResponsetoVMAlert öğesini seçin.

      5. Ortak uyarı şemasını etkinleştir öğesi için Evet'i seçin.

      6. Eylem grubu oluştur sayfasına dönmek için Tamam'ı seçin.

        Configure runbook page with values.

    3. Gözden geçir + oluştur'u ve ardından Oluştur'u seçerek Uyarı kuralı oluştur sayfasına dönün.

  11. Uyarı kuralı adı metin kutusu için Uyarı kuralı ayrıntıları'nın altında.

  12. Uyarı kuralı oluştur’u seçin. Eylem grubunu etkinlik günlüğü uyarılarında ve oluşturduğunuz neredeyse gerçek zamanlı uyarılarda kullanabilirsiniz.

Doğrulama

VM'nizin çalıştığından emin olun. Stop-AzureVmInResponsetoVMAlert runbook'una gidin ve Doldurulacak Son İşler listesini izleyin. Tamamlanmış bir iş göründüğünde işi seçin ve çıkışı gözden geçirin. Ayrıca VM'nizin durdurulup durdurulmadığını denetleyin.

Showing output from job.

Yaygın Azure VM yönetim işlemleri

Azure Otomasyonu Runbook galerisinde VM'yi yeniden başlatma, VM'yi durdurma, VM silme, ölçeği artırma ve azaltma senaryoları gibi yaygın Azure VM yönetim işlemleri için betikler sağlar. Betikler Azure Otomasyonu GitHub deposunda da bulunabilir Yukarıdaki adımlarda belirtildiği gibi bu betikleri de kullanabilirsiniz.

Azure VM yönetim işlemleri Ayrıntılar
Uyarıda Azure-VM'leri Durdurma Bu runbook, Azure uyarı tetikleyicisine yanıt olarak bir Azure Resource Manager VM'sini durdurur.

Giriş, hangi VM'nin durdurulacağını belirlemek için gereken bilgileri içeren uyarı verileridir.

Runbook, web kancası aracılığıyla bir Azure uyarısından çağrılmalıdır.

Az modülünün en son sürümü otomasyon hesabına eklenmelidir.

Yönetilen Kimlik etkinleştirilmeli ve otomasyon hesabına katkıda bulunan erişimi verilmelidir.
Yeniden Başlatma-Azure-VM-On-Alert Bu runbook, Azure uyarı tetikleyicisine yanıt olarak bir Azure Resource Manager VM'sini durdurur.

Giriş, hangi VM'nin durdurulacağını belirlemek için gereken bilgileri içeren uyarı verileridir.

Runbook, web kancası aracılığıyla bir Azure uyarısından çağrılmalıdır.

Az modülünün en son sürümü otomasyon hesabına eklenmelidir.

Yönetilen Kimlik etkinleştirilmeli ve otomasyon hesabına katkıda bulunan erişimi verilmelidir.
Delete-Azure-VM-On-Alert Bu runbook, Azure uyarı tetikleyicisine yanıt olarak bir Azure Resource Manager VM'sini durdurur.

Giriş, hangi VM'nin durdurulacağını belirlemek için gereken bilgileri içeren uyarı verileridir.

Runbook, web kancası aracılığıyla bir Azure uyarısından çağrılmalıdır.

Az modülünün en son sürümü otomasyon hesabına eklenmelidir.

Yönetilen Kimlik etkinleştirilmeli ve otomasyon hesabına katkıda bulunan erişimi verilmelidir.
ScaleDown-Azure-VM-On-Alert Bu runbook, Azure uyarı tetikleyicisine yanıt olarak bir Azure Resource Manager VM'sini durdurur.

Giriş, hangi VM'nin durdurulacağını belirlemek için gereken bilgileri içeren uyarı verileridir.

Runbook, web kancası aracılığıyla bir Azure uyarısından çağrılmalıdır.

Az modülünün en son sürümü otomasyon hesabına eklenmelidir.

Yönetilen Kimlik etkinleştirilmeli ve otomasyon hesabına katkıda bulunan erişimi verilmelidir.
ScaleUp-Azure-VM-On-Alert Bu runbook, Azure uyarı tetikleyicisine yanıt olarak bir Azure Resource Manager VM'sini durdurur.

Giriş, hangi VM'nin durdurulacağını belirlemek için gereken bilgileri içeren uyarı verileridir.

Runbook, web kancası aracılığıyla bir Azure uyarısından çağrılmalıdır.

Az modülünün en son sürümü otomasyon hesabına eklenmelidir.

Yönetilen Kimlik etkinleştirilmeli ve otomasyon hesabına katkıda bulunan erişimi verilmelidir.

Sonraki adımlar