Использование оповещения для активации runbook службы автоматизации Azure
С помощью Azure Monitor можно отслеживать метрики и журналы базового уровня большинства служб Microsoft Azure. Модули runbook службы автоматизации Azure можно вызывать с помощью групп действий, чтобы автоматизировать задачи на основе оповещений. В этой статье показано, как настроить и запустить runbook с помощью оповещений.
Необходимые компоненты
- Учетная запись службы автоматизации Azure, которой назначено хотя бы одно управляемое удостоверение. Дополнительные сведения об этом см. в статье Использование управляемого удостоверения, назначаемого пользователем, для учетной записи службы автоматизации Azure.
- Модули Az:
Az.Accounts
иAz.Compute
, импортированные в учетную запись службы автоматизации. Дополнительные сведения см. в разделе Импорт модулей Az. - виртуальной машины Azure.
- Модуль Azure Az PowerShell, установленный на компьютере. Сведения об установке или обновлении см. в разделе Установка модуля Azure Az PowerShell.
- Опыт работы с runbook службы автоматизации.
Типы оповещений
Модули runbook службы автоматизации можно использовать с тремя типами оповещений:
- Распространенные оповещения
- Оповещения журнала действий
- Оповещения метрик почти в реальном времени
Примечание.
Общая схема оповещений позволяет унифицировать работу с уведомлениями об оповещениях в Azure. Исторически три типа оповещений в Azure (метрика, журнал и журнал действий) имели собственные шаблоны электронной почты, схемы веб-перехватчика и т. д. Дополнительные сведения см. в статье "Общая схема оповещений".
Когда оповещение вызывает runbook, фактически осуществляется вызов веб-перехватчика с помощью HTTP-запроса POST. Текст запроса POST содержит объект в формате JSON с полезными свойствами, связанными с оповещением. В следующей таблице приведены ссылки на схему полезных данных для каждого типа оповещения.
Предупреждение | Description | Схема полезных данных |
---|---|---|
Общее оповещение | Общая схема оповещений, которая стандартизирует возможности использования уведомлений об оповещениях в Azure в настоящее время. | Общая схема полезных данных оповещений. |
Оповещение журнала действий | Отправляет уведомление, когда какое-либо новое событие в журнале действий Azure соответствует определенным условиям. Например, если в myProductionResourceGroup выполняется операция Delete VM или возникает новое событие службы "Работоспособность служб Azure" в состоянии "Активно". |
Схема полезных данных оповещения журнала действий |
Оповещения на основе метрик практически в реальном времени | Отправляет уведомление быстрее, чем оповещения о метриках, когда одна или несколько метрик уровня платформы удовлетворяют указанным условиям. Например, если за последние 5 минут значение метрики % ЦП на виртуальной машине превышает 90 и значение метрики Сеть (входящий трафик) превышает 500 МБ. | Схема полезны данных оповещения на основе метрик почти в реальном времени |
Так как данные, предоставляемые для каждого типа оповещения, различны, оповещения разных типов обрабатываются по-разному. В следующем разделе вы узнаете, как создать runbook для обработки различных типов оповещений.
Назначьте разрешения управляемым удостоверениям
Назначьте разрешения надлежащему управляемому удостоверению, чтобы оно могло останавливать виртуальную машину. Runbook может использовать управляемое удостоверение учетной записи службы автоматизации, назначаемое пользователем или системой. Здесь приведены инструкции по назначению разрешений обоим видам удостоверений. Приведенные ниже действия используют PowerShell. Если вы предпочитаете использовать портал, см. статью "Назначение ролей Azure с помощью портал Azure".
Войдите в Azure в интерактивном режиме с помощью командлета Connect-AzAccount и следуйте инструкциям.
# 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>
Укажите соответствующие значения для перечисленных ниже переменных, а затем выполните скрипт.
$resourceGroup = "resourceGroup" $automationAccount = "AutomationAccount" $userAssignedManagedIdentity = "userAssignedManagedIdentity"
Примените командлет PowerShell New-AzRoleAssignment, чтобы назначить роль управляемому удостоверению, назначаемому системой.
$SAMI = (Get-AzAutomationAccount -ResourceGroupName $resourceGroup -Name $automationAccount).Identity.PrincipalId New-AzRoleAssignment ` -ObjectId $SAMI ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
Назначьте роль управляемому удостоверению, назначаемого пользователем.
$UAMI = (Get-AzUserAssignedIdentity -ResourceGroupName $resourceGroup -Name $userAssignedManagedIdentity) New-AzRoleAssignment ` -ObjectId $UAMI.PrincipalId ` -ResourceGroupName $resourceGroup ` -RoleDefinitionName "DevTest Labs User"
Для управляемого удостоверения, назначаемого системой, отображаются
ClientId
и записываются значения для последующего использования.$UAMI.ClientId
Создание модуля Runbook для обработки оповещений
Чтобы использовать автоматизацию с оповещениями, требуется модуль Runbook, который управляет полезными данными JSON оповещения, передаваемыми в модуль Runbook. Приведенный ниже пример модуля Runbook должен быть вызван из оповещения Azure.
Как описано в предыдущем разделе, каждый тип оповещения имеет свою схему. Сценарий принимает данные веб-перехватчика из оповещения во входном параметре модуля runbook WebhookData
. Затем сценарий оценивает полезные данные JSON, чтобы определить, какой тип оповещения использован.
В этом примере используется оповещение из виртуальной машины Azure. Он извлекает данные виртуальной машины из полезных данных, в частности из целевого ресурса триггерного оповещения, а затем использует эти сведения для остановки виртуальной машины. Подключение должно быть настроено в учетной записи службы автоматизации, в которой выполняется runbook. При использовании оповещений для активации модулей Runbook важно проверить состояние оповещения в runbook, который активируется. Модуль runbook будет активирован каждый раз, когда состояние оповещения меняется. Оповещения имеют несколько состояний, из которых два наиболее распространенных — "Активировано" и "Разрешено". Проверьте состояние в логике runbook, чтобы убедиться, что модуль Runbook не выполняется более одного раза. Пример в этой статье показывает, как выполнять поиск только оповещений с состоянием "Активировано".
Модуль Runbook использует управляемое удостоверение, назначаемое системой службы автоматизации, для проверки подлинности в Azure для выполнения действий управления на виртуальной машине. Runbook можно легко изменить для использования управляемого удостоверения, назначаемого пользователем.
Примечание.
Рекомендуется использовать общедоступный сетевой доступ, так как невозможно использовать оповещение Azure (метрики, журналы и журнал действий) для активации веб-перехватчика службы автоматизации, когда учетная запись службы автоматизации использует частные ссылки и настроена с параметром "Отключить общедоступный доступ".
Используйте этот пример для создания runbook Stop-AzureVmInResponsetoVMAlert. Можно изменить сценарий PowerShell и использовать его для множества разных ресурсов.
Войдите на портал Azure перейдите к учетной записи службы автоматизации.
В разделе Автоматизация процессов щелкните Модули Runbook.
Нажмите кнопку + Создать runbook.
- Присвойте новому модулю runbook имя
Stop-AzureVmInResponsetoVMAlert
. - В раскрывающемся списке типов Runbook выберите PowerShell.
- Нажмите кнопку создания.
- Присвойте новому модулю runbook имя
В редакторе runbook вставьте следующий код:
[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 выполнялся с управляемым удостоверением, назначаемым системой, оставьте код как есть. Если вы предпочитаете использовать управляемое удостоверение, назначаемое пользователем, сделайте следующее:
- Из строки 78 удалите ,
$AzureContext = (Connect-AzAccount -Identity).context
- Замените его
$AzureContext = (Connect-AzAccount -Identity -AccountId <ClientId>).context
. - Введите идентификатор клиента, полученный ранее.
- Из строки 78 удалите ,
Нажмите кнопку "Сохранить", "Опубликовать" и "Да" при появлении запроса.
Закройте страницу Runbook, чтобы вернуться на страницу Учетная запись службы автоматизации.
Создание оповещения
Оповещения используют группы действий, которые представляют собой коллекции действий, активируемых оповещением. Модули runbook — это лишь одно из многих действий, доступных для групп действий.
В учетной записи службы автоматизации в разделе "Мониторинг" выберите "Оповещения".
Выберите +Создать правило генерации оповещений, чтобы открыть страницу "Создать правило генерации оповещений".
В разделе "Область" выберите "Изменить ресурс".
На странице "Выбор ресурса" в раскрывающемся списке "Фильтр по типу ресурса" выберите "Виртуальные машины".
Установите флажок рядом с нужными виртуальными машинами. Затем нажмите кнопку "Готово", чтобы вернуться на страницу правила создания оповещений.
В разделе Условие выберите элемент Добавить условие.
На странице выбора сигнала введите
Percentage CPU
текстовое поле поиска и выберите процент ЦП из результатов.На странице "Настройка логики сигнала" в разделе "Пороговое значение" введите начальное низкое значение для целей тестирования, например
5
. Вы можете вернуться и обновить это значение, убедившись, что оповещение работает должным образом. Затем нажмите кнопку "Готово", чтобы вернуться на страницу правила создания оповещений.В разделе "Действия" выберите "Добавить группы действий" и +Создать группу действий.
На странице "Создание группы действий" выполните следующие действия:
На вкладке "Основы" введите имя группы действий и отображаемое имя.
На вкладке "Действия" в текстовом поле "Имя" введите имя. Затем в раскрывающемся списке "Тип действия" выберите Модуль Runbook службы автоматизации, чтобы открыть страницу "Настройка Runbook".
Для исходного элемента Runbook выберите User.
В раскрывающемся списке подписки выберите подписку.
В раскрывающемся списке учетной записи службы автоматизации выберите учетную запись службы автоматизации.
В раскрывающемся списке Runbook выберите Stop-AzureVmInResponsetoVMAlert.
Для включения общего элемента схемы генерации оповещений нажмите кнопку "Да".
Нажмите кнопку "ОК ", чтобы вернуться на страницу "Создать группу действий".
Нажмите кнопку "Просмотр и создание", чтобы вернуться на страницу правила создания оповещений.
В разделе "Сведения о правиле генерации оповещений" в текстовом поле "Имя правила генерации оповещений".
Выберите Создать правило генерации оповещений. Вы можете использовать группу действий в оповещениях журнала действий и оповещениях практически в реальном времени, создаваемых вами.
Проверка
Убедитесь, что виртуальная машина запущена. Перейдите к runbook Stop-AzureVmInResponsetoVMAlert и просмотрите список последних заданий , чтобы заполнить его. По завершении задания выберите задание и просмотрите выходные данные. Также проверьте, остановлена ли виртуальная машина.
Распространенные операции управления виртуальными машинами Azure
служба автоматизации Azure предоставляет сценарии для распространенных операций управления виртуальными машинами Azure, таких как перезапуск виртуальной машины, остановка виртуальной машины, удаление виртуальной машины, увеличение масштаба и уменьшение масштаба в коллекции Runbook. Скрипты также можно найти в репозитории GitHub служба автоматизации Azure, как упоминалось в приведенных выше шагах.
Операции управления виртуальными машинами Azure | Сведения |
---|---|
Stop-Azure-VM-On-Alert | Этот модуль Runbook остановит виртуальную машину Azure Resource Manager в ответ на триггер оповещения Azure. Целевой ресурс триггерного оповещения должен быть виртуальной машиной для остановки. Этот параметр передается в входной параметр из полезных данных с активированным оповещением. Модуль Runbook должен вызываться из оповещения Azure через веб-перехватчик. Последняя версия модуля Az должна быть добавлена в учетную запись службы автоматизации. Управляемое удостоверение должно быть включено, а доступ участника к учетной записи службы автоматизации должен быть предоставлен. |
Перезапуск azure-VM-on-Alert | Этот модуль Runbook остановит виртуальную машину Azure Resource Manager в ответ на триггер оповещения Azure. Целевой ресурс триггерного оповещения должен быть виртуальной машиной для перезапуска. Этот параметр передается в входной параметр из полезных данных с активированным оповещением. Модуль Runbook должен вызываться из оповещения Azure через веб-перехватчик. Последняя версия модуля Az должна быть добавлена в учетную запись службы автоматизации. Управляемое удостоверение должно быть включено, а доступ участника к учетной записи службы автоматизации должен быть предоставлен. |
Delete-Azure-VM-On-Alert | Этот модуль Runbook остановит виртуальную машину Azure Resource Manager в ответ на триггер оповещения Azure. Целевой ресурс триггерного оповещения должен быть виртуальной машиной для удаления. Этот параметр передается в входной параметр из полезных данных с активированным оповещением. Модуль Runbook должен вызываться из оповещения Azure через веб-перехватчик. Последняя версия модуля Az должна быть добавлена в учетную запись службы автоматизации. Управляемое удостоверение должно быть включено, а доступ участника к учетной записи службы автоматизации должен быть предоставлен. |
ScaleDown-Azure-VM-On-Alert | Этот модуль Runbook остановит виртуальную машину Azure Resource Manager в ответ на триггер оповещения Azure. Целевой ресурс триггерного оповещения должен быть виртуальной машиной для уменьшения масштаба. Этот параметр передается в входной параметр из полезных данных с активированным оповещением. Модуль Runbook должен вызываться из оповещения Azure через веб-перехватчик. Последняя версия модуля Az должна быть добавлена в учетную запись службы автоматизации. Управляемое удостоверение должно быть включено, а доступ участника к учетной записи службы автоматизации должен быть предоставлен. |
ScaleUp-Azure-VM-On-Alert | Этот модуль Runbook остановит виртуальную машину Azure Resource Manager в ответ на триггер оповещения Azure. Целевой ресурс триггерного оповещения должен быть виртуальной машиной для увеличения масштаба. Этот параметр передается в входной параметр из полезных данных с активированным оповещением. Модуль Runbook должен вызываться из оповещения Azure через веб-перехватчик. Последняя версия модуля Az должна быть добавлена в учетную запись службы автоматизации. Управляемое удостоверение должно быть включено, а доступ участника к учетной записи службы автоматизации должен быть предоставлен. |
Следующие шаги
- Узнайте больше о том, как создать бюджет и связать его с runbook службы автоматизации.
- Сведения о различных способах запуска модуля Runbook см. в статье "Запуск модуля Runbook".
- Создайте оповещение журнала действий, см. статью "Создание оповещений журнала действий".
- Узнайте, как создать оповещение почти в режиме реального времени, см. статью "Создание правила генерации оповещений" в портал Azure.