Wyzwalanie elementu Runbook usługi Azure Automation przy użyciu alertu
Za pomocą usługi Azure Monitor można monitorować metryki i dzienniki na poziomie podstawowym dla większości usług na platformie Azure. Elementy Runbook usługi Azure Automation można wywoływać przy użyciu grup akcji w celu automatyzacji zadań na podstawie alertów. W tym artykule pokazano, jak skonfigurować i uruchomić element Runbook przy użyciu alertów.
Wymagania wstępne
- Konto usługi Azure Automation z co najmniej jedną tożsamością zarządzaną przypisaną przez użytkownika. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej przypisanej przez użytkownika dla konta usługi Azure Automation.
- Moduły Az:
Az.Accounts
iAz.Compute
zaimportowane na konto usługi Automation. Aby uzyskać więcej informacji, zobacz Importuj moduły platformy Azure. - Maszyna wirtualna platformy Azure.
- Moduł Azure Az programu PowerShell zainstalowany na maszynie. Aby zainstalować lub uaktualnić, zobacz Jak zainstalować moduł Azure Az programu PowerShell.
- Ogólna znajomość elementów Runbook usługi Automation.
Typy alertów
Elementy Runbook automatyzacji można używać z trzema typami alertów:
- Typowe alerty
- Alerty dotyczące dzienników aktywności
- Alerty metryk niemal w czasie rzeczywistym
Uwaga
Typowy schemat alertu standandaryzuje środowisko użycia dla powiadomień o alertach na platformie Azure. W przeszłości trzy typy alertów na platformie Azure (metryka, dziennik i dziennik aktywności) miały własne szablony wiadomości e-mail, schematy elementu webhook itp. Aby dowiedzieć się więcej, zobacz Wspólny schemat alertów.
Gdy alert wywołuje element Runbook, rzeczywiste wywołanie to żądanie HTTP POST do elementu webhook. Treść żądania POST zawiera obiekt w formacie JSON, który ma przydatne właściwości powiązane z alertem. Poniższa tabela zawiera linki do schematu ładunku dla każdego typu alertu:
Alerty | opis | Schemat ładunku |
---|---|---|
Typowy alert | Typowy schemat alertu, który standandaryzuje środowisko użycia dla powiadomień o alertach na platformie Azure już dzisiaj. | Typowy schemat ładunku alertu. |
Alert dziennika aktywności | Wysyła powiadomienie, gdy dowolne nowe zdarzenie w dzienniku aktywności platformy Azure jest zgodne z określonymi warunkami. Na przykład w przypadku Delete VM wystąpienia operacji w grupie myProductionResourceGroup lub pojawieniu się nowego zdarzenia usługi Azure Service Health z aktywnym stanem. |
Schemat ładunku alertu dziennika aktywności |
Alert dotyczący metryk niemal w czasie rzeczywistym | Wysyła powiadomienie szybciej niż alerty metryk, gdy co najmniej jedna metryka na poziomie platformy spełnia określone warunki. Na przykład gdy wartość % procesora CPU na maszynie wirtualnej jest większa niż 90, a wartość parametru Network In jest większa niż 500 MB w ciągu ostatnich 5 minut. | Schemat ładunku alertu metryki niemal w czasie rzeczywistym |
Ponieważ dane udostępniane przez każdy typ alertu są różne, każdy typ alertu jest obsługiwany inaczej. W następnej sekcji dowiesz się, jak utworzyć element Runbook do obsługi różnych typów alertów.
Przypisywanie uprawnień do tożsamości zarządzanych
Przypisz uprawnienia do odpowiedniej tożsamości zarządzanej, aby umożliwić jej zatrzymanie maszyny wirtualnej. Element Runbook może używać przypisanej przez system tożsamości zarządzanej konta usługi Automation lub tożsamości zarządzanej przypisanej przez użytkownika. Podano kroki przypisywania uprawnień do każdej tożsamości. W poniższych krokach użyj programu PowerShell. Jeśli wolisz korzystać z portalu, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.
Zaloguj się interaktywnie na platformie Azure przy użyciu polecenia cmdlet Connect-AzAccount i postępuj zgodnie z instrukcjami.
# 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>
Podaj odpowiednią wartość dla poniższych zmiennych, a następnie wykonaj skrypt.
$resourceGroup = "resourceGroup" $automationAccount = "AutomationAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity"
Użyj polecenia cmdlet programu PowerShell New-AzRoleAssignment , aby przypisać rolę do przypisanej przez system tożsamości zarządzanej.
$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
Przypisz rolę do tożsamości zarządzanej przypisanej przez użytkownika.
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity) New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
W przypadku tożsamości zarządzanej przypisanej przez system pokaż
ClientId
i zapisz wartość do późniejszego użycia.$UAMI.ClientId
Tworzenie elementu Runbook do obsługi alertów
Aby używać usługi Automation z alertami, potrzebny jest element Runbook, który zarządza ładunkiem JSON alertu przekazywanym do elementu Runbook. Poniższy przykładowy element Runbook musi być wywoływany z alertu platformy Azure.
Zgodnie z opisem w poprzedniej sekcji każdy typ alertu ma inny schemat. Skrypt pobiera dane elementu webhook z alertu w parametrze wejściowym WebhookData
elementu Runbook. Następnie skrypt oblicza ładunek JSON, aby określić, który typ alertu jest używany.
W tym przykładzie użyto alertu z maszyny wirtualnej platformy Azure. Wyodrębnia ona dane maszyny wirtualnej z ładunku, w szczególności z zasobu docelowego wyzwalanego alertu, a następnie wykorzystuje te informacje, aby zatrzymać maszynę wirtualną. Połączenie należy skonfigurować na koncie usługi Automation, na którym jest uruchamiany element Runbook. W przypadku używania alertów do wyzwalania elementów Runbook ważne jest sprawdzenie stanu alertu w wyzwalanym elemecie Runbook. Element Runbook jest wyzwalany za każdym razem, gdy alert zmienia stan. Alerty mają wiele stanów, z których dwa najczęściej są aktywowane i rozwiązywane. Sprawdź stan w logice elementu Runbook, aby upewnić się, że element Runbook nie działa więcej niż raz. W przykładzie w tym artykule pokazano, jak wyszukać alerty tylko z aktywowanym stanem.
Element Runbook używa przypisanej przez system tożsamości zarządzanej konta usługi Automation do uwierzytelniania na platformie Azure w celu wykonania akcji zarządzania względem maszyny wirtualnej. Element Runbook można łatwo zmodyfikować w celu używania tożsamości zarządzanej przypisanej przez użytkownika.
Uwaga
Zalecamy używanie dostępu do sieci publicznej, ponieważ nie można użyć alertu platformy Azure (metryki, dziennika i dziennika aktywności) w celu wyzwolenia elementu webhook usługi Automation, gdy konto usługi Automation korzysta z linków prywatnych i skonfigurowano z dostępem publicznym ustawionym na wartość Wyłącz.
Użyj tego przykładu, aby utworzyć element runbook o nazwie Stop-AzureVmInResponsetoVMAlert. Możesz zmodyfikować skrypt programu PowerShell i użyć go z wieloma różnymi zasobami.
Zaloguj się do witryny Azure Portal i przejdź do swojego konta usługi Automation.
W obszarze Automatyzacja procesów wybierz pozycję Elementy Runbook.
Wybierz pozycję + Utwórz element Runbook.
- Nadaj elementowi runbook
Stop-AzureVmInResponsetoVMAlert
nazwę . - Z listy rozwijanej Typ elementu Runbook wybierz pozycję PowerShell.
- Wybierz pozycję Utwórz.
- Nadaj elementowi runbook
W edytorze elementów Runbook wklej następujący kod:
[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." }
Jeśli chcesz, aby element Runbook był wykonywany przy użyciu tożsamości zarządzanej przypisanej przez system, pozostaw kod w stanie rzeczywistym. Jeśli wolisz użyć tożsamości zarządzanej przypisanej przez użytkownika, wykonaj:
- Z wiersza 78 usuń
$AzureContext = (Connect-AzAccount -Identity).context
, - Zastąp go ciągiem
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
, i - Wprowadź uzyskany wcześniej identyfikator klienta.
- Z wiersza 78 usuń
Po wyświetleniu monitu wybierz pozycję Zapisz, Opublikuj, a następnie pozycję Tak.
Zamknij stronę Runbook, aby wrócić do strony Konto usługi Automation.
Tworzenie alertu
Alerty używają grup akcji, które są kolekcjami akcji wyzwalanych przez alert. Elementy Runbook to tylko jedna z wielu akcji, których można używać z grupami akcji.
Na koncie usługi Automation w obszarze Monitorowanie wybierz pozycję Alerty.
Wybierz pozycję + Nowa reguła alertu, aby otworzyć stronę Tworzenie reguły alertu.
W obszarze Zakres wybierz pozycję Edytuj zasób.
Na stronie Wybieranie zasobu z listy rozwijanej Filtruj według typu zasobu wybierz pozycję Maszyny wirtualne.
Zaznacz pole wyboru obok maszyn wirtualnych, które chcesz monitorować. Następnie wybierz pozycję Gotowe, aby powrócić do strony Tworzenie reguły alertu.
W obszarze Warunek wybierz pozycję Dodaj warunek.
Na stronie Wybieranie sygnału wprowadź
Percentage CPU
w polu tekstowym wyszukiwania, a następnie wybierz pozycję Procentowe użycie procesora CPU z wyników.Na stronie Konfigurowanie logiki sygnału w obszarze Wartość progu wprowadź początkową niską wartość na potrzeby testowania, taką jak
5
. Możesz wrócić i zaktualizować tę wartość po potwierdzeniu, że alert działa zgodnie z oczekiwaniami. Następnie wybierz pozycję Gotowe, aby powrócić do strony Tworzenie reguły alertu.W obszarze Akcje wybierz pozycję Dodaj grupy akcji, a następnie pozycję +Utwórz grupę akcji.
Na stronie Tworzenie grupy akcji:
Na karcie Podstawy wprowadź nazwę grupy akcji i nazwę wyświetlaną.
Na karcie Akcje w polu tekstowym Nazwa wprowadź nazwę. Następnie z listy rozwijanej Typ akcji wybierz pozycję Element Runbook usługi Automation, aby otworzyć stronę Konfigurowanie elementu Runbook.
Dla elementu źródłowego elementu Runbook wybierz pozycję Użytkownik.
Z listy rozwijanej Subskrypcja wybierz swoją subskrypcję.
Z listy rozwijanej Konto usługi Automation wybierz swoje konto usługi Automation.
Z listy rozwijanej Element Runbook wybierz pozycję Stop-AzureVmInResponsetoVMAlert.
W polu Włącz wspólny element schematu alertu wybierz pozycję Tak.
Wybierz przycisk OK , aby powrócić do strony Tworzenie grupy akcji.
Wybierz pozycję Przejrzyj i utwórz, a następnie pozycję Utwórz, aby powrócić do strony Tworzenie reguły alertu.
W obszarze Szczegóły reguły alertu w polu tekstowym Nazwa reguły alertu.
Wybierz pozycję Utwórz regułę alertu. Możesz użyć grupy akcji w alertach dziennika aktywności i alertach niemal w czasie rzeczywistym, które tworzysz.
Weryfikacja
Upewnij się, że maszyna wirtualna jest uruchomiona. Przejdź do elementu runbook Stop-AzureVmInResponsetoVMAlert i poszukaj na liście Ostatnie zadania , aby wypełnić. Po pojawieniu się ukończonego zadania wybierz zadanie i przejrzyj dane wyjściowe. Sprawdź również, czy maszyna wirtualna została zatrzymana.
Typowe operacje zarządzania maszynami wirtualnymi platformy Azure
Usługa Azure Automation udostępnia skrypty dla typowych operacji zarządzania maszynami wirtualnymi platformy Azure, takich jak ponowne uruchamianie maszyny wirtualnej, zatrzymywanie maszyny wirtualnej, usuwanie maszyny wirtualnej, skalowanie w górę i w dół scenariuszy w galerii elementów Runbook. Skrypty można również znaleźć w repozytorium GitHub usługi Azure Automation. Możesz również użyć tych skryptów, jak wspomniano w powyższych krokach.
Operacje zarządzania maszynami wirtualnymi platformy Azure | Szczegóły |
---|---|
Stop-Azure-VM-On-Alert | Ten element Runbook zatrzyma maszynę wirtualną usługi Azure Resource Manager w odpowiedzi na wyzwalacz alertu platformy Azure. Docelowy zasób wyzwalanego alertu musi być maszyną wirtualną, aby zatrzymać. Jest to przekazywane w parametrze wejściowym z wyzwalanego ładunku alertu. Element Runbook musi być wywoływany z alertu platformy Azure za pośrednictwem elementu webhook. Do konta usługi Automation należy dodać najnowszą wersję modułu Az. Tożsamość zarządzana powinna być włączona i należy podać dostęp współautora do konta usługi Automation. |
Restart-Azure-VM-On-Alert | Ten element Runbook zatrzyma maszynę wirtualną usługi Azure Resource Manager w odpowiedzi na wyzwalacz alertu platformy Azure. Docelowy zasób wyzwalanego alertu musi być maszyną wirtualną do ponownego uruchomienia. Jest to przekazywane w parametrze wejściowym z wyzwalanego ładunku alertu. Element Runbook musi być wywoływany z alertu platformy Azure za pośrednictwem elementu webhook. Do konta usługi Automation należy dodać najnowszą wersję modułu Az. Tożsamość zarządzana powinna być włączona i należy podać dostęp współautora do konta usługi Automation. |
Delete-Azure-VM-On-Alert | Ten element Runbook zatrzyma maszynę wirtualną usługi Azure Resource Manager w odpowiedzi na wyzwalacz alertu platformy Azure. Docelowy zasób wyzwalanego alertu musi być maszyną wirtualną do usunięcia. Jest to przekazywane w parametrze wejściowym z wyzwalanego ładunku alertu. Element Runbook musi być wywoływany z alertu platformy Azure za pośrednictwem elementu webhook. Do konta usługi Automation należy dodać najnowszą wersję modułu Az. Tożsamość zarządzana powinna być włączona i należy podać dostęp współautora do konta usługi Automation. |
ScaleDown-Azure-VM-On-Alert | Ten element Runbook zatrzyma maszynę wirtualną usługi Azure Resource Manager w odpowiedzi na wyzwalacz alertu platformy Azure. Docelowy zasób wyzwalanego alertu musi być maszyną wirtualną do skalowania w dół. Jest to przekazywane w parametrze wejściowym z wyzwalanego ładunku alertu. Element Runbook musi być wywoływany z alertu platformy Azure za pośrednictwem elementu webhook. Do konta usługi Automation należy dodać najnowszą wersję modułu Az. Tożsamość zarządzana powinna być włączona i należy podać dostęp współautora do konta usługi Automation. |
ScaleUp-Azure-VM-On-Alert | Ten element Runbook zatrzyma maszynę wirtualną usługi Azure Resource Manager w odpowiedzi na wyzwalacz alertu platformy Azure. Docelowy zasób wyzwalanego alertu musi być maszyną wirtualną do skalowania w górę. Jest to przekazywane w parametrze wejściowym z wyzwalanego ładunku alertu. Element Runbook musi być wywoływany z alertu platformy Azure za pośrednictwem elementu webhook. Do konta usługi Automation należy dodać najnowszą wersję modułu Az. Tożsamość zarządzana powinna być włączona i należy podać dostęp współautora do konta usługi Automation. |
Następne kroki
- Dowiedz się więcej na temat tworzenia budżetu i kojarzenia go z elementem Runbook usługi Automation.
- Poznaj różne sposoby uruchamiania elementu Runbook, zobacz Uruchamianie elementu Runbook.
- Tworzenie alertu dziennika aktywności, zobacz Tworzenie alertów dziennika aktywności.
- Dowiedz się, jak utworzyć alert niemal w czasie rzeczywistym, zobacz Tworzenie reguły alertu w witrynie Azure Portal.