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
- Kullanıcı Azure Otomasyonu yönetilen kimliği olan bir hesap. Daha fazla bilgi için bkz. Bir hesap için kullanıcı tarafından atanan yönetilen Azure Otomasyonu kullanma.
- Az modülleri:
Az.Accountsve Otomasyon hesabınaAz.Computeaktarıldı. Daha fazla bilgi için bkz. Az modüllerini içeri aktarma. - Bir Azure sanal makinesi.
- Makinenize yüklenmiş Azure Az PowerShell modülü. Yüklemek veya yükseltmek için bkz. Azure Az PowerShell modülünü yükleme.
- Otomasyon runbook'ları hakkında genel bilgi.
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.
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>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"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"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"Sistem tarafından atanan yönetilen kimlik için değeri daha
ClientIdsonra 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.
Azure portal'daoturum açın ve Otomasyon hesabınıza gidin.
İşlem Otomasyonu altında Runbook'lar'ı seçin.
+ Runbook oluştur'ı seçin.
- Runbook'a adını
Stop-AzureVmInResponsetoVMAlertgirin. - Runbook türü açılan listesinden PowerShell'i seçin.
- Oluştur’u seçin.
- Runbook'a adını
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." }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:
-
- satırdan
$AzureContext = (Connect-AzAccount -Identity).contextkaldırın,
- satırdan
- , ve
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).contextile değiştirin - Daha önce edinilen İstemci Kimliğini girin.
-
Kaydet, Yayımla'yı ve istendiğinde Evet'i seçin.
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.
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.
Kapsam'ın altında Kaynağı düzenle'yi seçin.
Kaynak seçin sayfasının Kaynak türüne göre filtrele açılan listesinden Sanal makineler'i seçin.
İzlemek istediğiniz sanal makinelerin yanındaki kutuyu işaretleyin. Ardından Bitti'yi seçerek Uyarı kuralı oluştur sayfasına geri gidin.
Koşul altında Koşul ekle'yi seçin.
Sinyal seçin sayfasında arama metin kutusuna
Percentage CPUyazın ve sonuçlardan CPU Yüzdesi'ne tıklayın.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.
Eylemler'in altında Eylem grupları ekle'yi ve ardından +Eylem grubu oluştur'a tıklayın.
Eylem grubu oluştur sayfasında:
Temel bilgiler sekmesinde bir Eylem grubu adı ve Görünen ad girin.
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.
Runbook kaynak öğesi için Kullanıcı'ya seçin.
Abonelik açılan listesinden aboneliğinizi seçin.
Otomasyon hesabı açılan listesinden Otomasyon hesabınız'ı seçin.
Runbook açılan listesinden Stop-AzureVmInResponsetoVMAlert öğesini seçin.
Ortak uyarı şemasını etkinleştir öğesi için Evet'i seçin.
Eylem grubu oluştur sayfasına dönmek için Tamam'ı seçin.
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.
Uyarı kuralı ayrıntıları altında, Uyarı kuralı adı metin kutusu için.
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.
Sonraki adımlar
- Runbook başlatmanın farklı yollarını bulmak için bkz. Runbook başlatma.
- Etkinlik günlüğü uyarısı oluşturmak için bkz. Etkinlik günlüğü uyarıları oluşturma.
- Gerçek zamanlıya yakın bir uyarı oluşturma hakkında bilgi edinmek için bkz.Azure portal.