Bir runbook'a Azure Otomasyonu kullanma

Azure'Azure İzleyici çoğu hizmet için temel düzeydeki ölçümleri ve günlükleri izlemek için Azure İzleyici'i kullanabilirsiniz. Uyarıları temel Azure Otomasyonu görevleri otomatikleştirmek için eylem gruplarını kullanarak runbook'ları çağırabilirsiniz. Bu makalede, uyarıları kullanarak bir runbook'un nasıl yapılandırıldığında ve çalıştırıldığında size nasıl bir şey olduğu gösterir.

Önkoş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ı

Not

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

Bir uyarı runbook çağırsa gerçek çağrı, web kancası için 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ı listele gösterilmektedir:

Uyarı Description Yük şeması
Genel uyarı Bugün Azure'da uyarı bildirimleri için tüketim deneyimini standartlaştıran genel uyarı şeması. Ortak uyarı yükü şeması.
Etkinlik günlüğü uyarısı Azure etkinlik günlüğünde belirli koşullarla eşleşen yeni bir olay olduğunda bir bildirim gönderir. Örneğin, Delete VM myProductionResourceGroup içinde bir işlem oluştuğunda veya Etkin durumu Azure Hizmet Durumu yeni bir olay görüntülendiğinde. Etkinlik günlüğü uyarı yükü şeması
Neredeyse gerçek zamanlı ölçüm uyarısı Platform düzeyindeki bir veya daha fazla ölçüm belirtilen koşulları karşılarken ölçüm uyarılarından daha hızlı bir bildirim gönderir. Örneğin, bir VM'de CPU % değeri 90'dan büyükse ve Içinde Ağ değeri son 5 dakika için 500 MB'den 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ı bir şekilde ele kullanılır. Sonraki bölümde, farklı uyarı türlerini işlemek için bir runbook oluşturma hakkında bilgi edinebilirsiniz.

Yönetilen kimliklere izin atama

Bir sanal makineyi durdurmasına izin vermek için uygun yönetilen kimliğe izin attayabilirsiniz. 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ımlar PowerShell kullanır. Portalı kullanmayı tercih ediyorsanız bkz. Azure rolleriniAzure portal.

  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 girin ve ardından betiği yürütün.

    $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 atama.

    $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 ClientId sonra kullanmak üzere göster ve kayded.

    $UAMI.ClientId
    

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

Otomasyonu 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ıdan çağrılmalı.

Önceki bölümde açıklandığı gibi, her uyarı türünün farklı bir şeması vardır. Betik, runbook giriş parametresinde bir uyarıdan web WebhookData kancası verilerini alır. Ardından betik JSON yükünü değerlendirerek hangi uyarı türünün kullan olduğunu belirler.

Bu örnekte Bir Azure sanal makinesi (VM) tarafından bir uyarı lanır. Yükten VM verilerini alan bu veri, vm'yi durdurmak için bu bilgileri kullanır. Bağlantı, runbook'un çalıştır olduğu Otomasyon hesabında ayar gerekir. Runbook'ları tetiklemek için uyarılar kullanırken, tetiklenen runbook'ta uyarı durumunun kontrol etmek önemlidir. Runbook, uyarının durumu her değiştinde tetiklenir. Uyarıların birden çok durumu vardır ve en yaygın iki durum Etkinleştirildi ve Çözümlendi'dir. Runbook'un birden çok kez çalışmaması için runbook mantığınız içinde durumu kontrol edin. Bu makaledeki örnek, yalnızca Etkinleştirilmiş durumuna sahip uyarıların nasıl bakılageldirildikten sonra.

Runbook, VM'de yönetim eylemlerini 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 kullanmak için kolayca değiştirilebilir.

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

  1. Azure portal'daoturum açın ve Otomasyon hesabınıza gidin.

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

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

    1. Runbook'a adını Stop-AzureVmInResponsetoVMAlert girin.
    2. Runbook türü açılan listesinden PowerShell'i seçin.
    3. Oluştur’u seçin.
  4. Runbook düzenleyicisinde 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ütmesi için kodu olduğu gibi bırakın. Kullanıcı tarafından atanan yönetilen kimlik kullanmayı tercih ederseniz:

      1. satırdan $AzureContext = (Connect-AzAccount -Identity).context kaldırın,
    1. , ve $AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context ile değiştirin
    2. Daha önce edinilen İstemci Kimliğini girin.
  6. Kaydet, Yayımla'yı ve istendiğinde 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 bir tanedir.

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

    • Yeni Uyarı Kuralı'nın seçerek Uyarı kuralı oluştur sayfasını açın.

    Uyarı kuralı oluştur sayfası ve alt bölüm.

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

  3. Kaynak seçin sayfasının Kaynak türüne göre filtrele açılan listesinden Sanal makineler'i seçin.

  4. İzlemek istediğiniz sanal makinelerin yanındaki kutuyu işaretleyin. Ardından Bitti'yi seçerek Uyarı kuralı oluştur sayfasına geri gidin.

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

  6. Sinyal seçin sayfasında arama metin kutusuna Percentage CPU yazın ve sonuçlardan CPU Yüzdesi'ne tıklayın.

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

    CPU yüzdesi eşik değeri girildi.

  8. Eylemler'in altında Eylem grupları ekle'yi ve ardından +Eylem grubu oluştur'a tıklayın.

    Temel Bilgiler sekmesinin açık olduğu eylem grubu oluşturma sayfası.

  9. 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 listesinde Otomasyon Runbook'unu seçerek Runbook'ları Yapılandır sayfasını açın.

      1. Runbook kaynak öğesi için Kullanıcı'ya 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 listesinden 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.

        Runbook sayfasını değerlerle yapılandırma.

    3. Uyarı kuralı oluştur sayfasına dönmek için Gözden geçir + oluştur'a ve ardından Oluştur'a tıklayın.

  10. Uyarı kuralı ayrıntıları altında, Uyarı kuralı adı metin kutusu için.

  11. Uyarı kuralı oluşturma’yı seçin. Eylem grubunu etkinlik günlüğü uyarılarında ve neredeyse gerçek zamanlı uyarılarda kullanabilirsiniz.

Doğrulama

VM'nizin çalışır olduğundan emin olun. Stop-AzureVmInResponsetoVMAlert runbook'una gidin ve Son İşler listesinin doldurmak için izleyin. Tamamlanan bir iş görüntülendiğinde işi seçin ve çıkışı gözden geçirin. Ayrıca VM'nizin durdurulmuş olup olduğunu da kontrol edin.

İş çıktısı gösteriliyor.

Sonraki adımlar