Prepare your logic apps and runbooks for migration of classic alert rules (Подготовка приложений логики и модулей runbook для миграции классических правил генерации оповещений)
Примечание
Как было объявлено ранее, классические оповещения в Azure Monitor исключаются для пользователей общедоступного облака, хотя их ограниченное использование продолжится до 31 мая 2021 г. Классические оповещения для Azure для государственных организаций облака и Microsoft Azure под управлением 21Vianet будут прекращены 29 февраля 2024 г.
Если вы решили самостоятельно перенести классические правила генерации оповещений в новые правила генерации оповещений, существуют некоторые различия между этими двумя системами. В этой статье объясняются эти различия и способы подготовки к изменению.
Изменения API
API, которые создают классические правила генерации оповещений и управляют ими (microsoft.insights/alertrules
), отличаются от API, которые создают новые оповещения о метриках (microsoft.insights/metricalerts
) и управляют ими. Если вы программно создаете классические правила генерации оповещений и управляете ими уже сегодня, обновите сценарии развертывания для работы с новыми API.
В таблице ниже приведены ссылки на программные интерфейсы для классических и новых оповещений.
Тип сценария развертывания | Классические оповещения | Новые оповещений о метриках |
---|---|---|
REST API | microsoft.insights/alertrules | microsoft.insights/metricalerts |
Azure CLI | az monitor alert |
az monitor metrics alert |
PowerShell | Ссылки | Ссылки |
Шаблон Azure Resource Manager | Классические оповещения | Новые оповещения о метриках |
Изменения полезных данных оповещений
Формат полезных данных оповещений немного отличается для классических правил генерации оповещений и новых оповещений о метриках. Если у вас есть классические правила генерации оповещений с веб-перехватчиком, приложением логики или действиями runbook, необходимо обновить целевые объекты, чтобы они принимали новый формат полезных данных.
Используйте следующую таблицу для привязки полей полезных данных веб-перехватчика из классического формата к новому формату:
Тип конечной точки уведомления | Классические оповещения | Новые оповещений о метриках |
---|---|---|
Было ли оповещение активировано или разрешено? | status | data.status |
Контекстно-зависимые сведения об оповещении | context | data.context |
Метка времени, когда оповещение было активировано или разрешено | context.timestamp | data.context.timestamp |
Идентификатор правила генерации оповещений | context.id | data.context.id |
Имя правила генерации оповещений | context.name | data.context.name |
Описание правила оповещения | context.description | data.context.description |
Условие для правила генерации оповещений | context.condition | data.context.condition |
Имя метрики | context.condition.metricName | data.context.condition.allOf[0].metricName |
Агрегирование по времени (как метрика агрегируется по окну оценки) | context.condition.timeAggregation | context.condition.timeAggregation |
Период оценки | context.condition.windowSize | data.context.condition.windowSize |
Оператор (как агрегированное значение метрики сравнивается с пороговым значением) | context.condition.operator | data.context.condition.operator |
Пороговое значение | context.condition.threshold | data.context.condition.allOf[0].threshold |
Значение метрики | context.condition.metricValue | data.context.condition.allOf[0].metricValue |
Идентификатор подписки | context.subscriptionId | data.context.subscriptionId |
Группа ресурсов затронутого ресурса | context.resourceGroup | data.context.resourceGroup |
Имя затронутого ресурса | context.resourceName | data.context.resourceName |
Тип затронутого ресурса | context.resourceType | data.context.resourceType |
Идентификатор затронутого ресурса. | context.resourceId | data.context.resourceId |
Прямая ссылка на страницу сводки по ресурсу на портале | context.portalLink | data.context.portalLink |
Настраиваемые поля полезных данных, передаваемые веб-перехватчику или приложению логики | properties | data.properties |
Как можно видеть, полезные данные похожи. Следующие раздел содержит:
- Сведения об изменении приложений логики для работы с новым форматом.
- Пример модуля runbook, который анализирует полезные данные новых оповещений.
Изменение приложения логики для получения уведомлений об оповещениях на основе метрик
Если вы используете приложения логики с классическими оповещениями, необходимо изменить код логики приложения, чтобы проанализировать новые полезные данные оповещений о метриках. Выполните следующие действия.
Создайте новое приложение логики.
Используйте шаблон "Azure Monitor — обработчик оповещений о метриках". Этот шаблон содержит триггер HTTP-запроса с заданной соответствующей схемой.
Добавьте действие для размещения логики обработки.
Использование модуля runbook службы автоматизации, который получает уведомление об оповещении на основе метрики
В следующем примере показан код PowerShell для использования в модуле runbook. Этот код может анализировать полезные данные для классических и новых правил генерации оповещений о метриках.
## Example PowerShell code to use in a runbook to handle parsing of both classic and new metric alerts.
[OutputType("PSAzureOperationResponse")]
param
(
[Parameter (Mandatory=$false)]
[object] $WebhookData
)
$ErrorActionPreference = "stop"
if ($WebhookData)
{
# Get the data object from WebhookData.
$WebhookBody = (ConvertFrom-Json -InputObject $WebhookData.RequestBody)
# Determine whether the alert triggering the runbook is a classic metric alert or a new metric alert (depends on the payload schema).
$schemaId = $WebhookBody.schemaId
Write-Verbose "schemaId: $schemaId" -Verbose
if ($schemaId -eq "AzureMonitorMetricAlert") {
# This is the new metric alert schema.
$AlertContext = [object] ($WebhookBody.data).context
$status = ($WebhookBody.data).status
# Parse fields related to alert rule condition.
$metricName = $AlertContext.condition.allOf[0].metricName
$metricValue = $AlertContext.condition.allOf[0].metricValue
$threshold = $AlertContext.condition.allOf[0].threshold
$timeAggregation = $AlertContext.condition.allOf[0].timeAggregation
}
elseif ($schemaId -eq $null) {
# This is the classic metric alert schema.
$AlertContext = [object] $WebhookBody.context
$status = $WebhookBody.status
# Parse fields related to alert rule condition.
$metricName = $AlertContext.condition.metricName
$metricValue = $AlertContext.condition.metricValue
$threshold = $AlertContext.condition.threshold
$timeAggregation = $AlertContext.condition.timeAggregation
}
else {
# The schema is neither a classic metric alert nor a new metric alert.
Write-Error "The alert data schema - $schemaId - is not supported."
}
# Parse fields related to resource affected.
$ResourceName = $AlertContext.resourceName
$ResourceType = $AlertContext.resourceType
$ResourceGroupName = $AlertContext.resourceGroupName
$ResourceId = $AlertContext.resourceId
$SubId = $AlertContext.subscriptionId
## Your logic to handle the alert here.
}
else {
# Error
Write-Error "This runbook is meant to be started from an Azure alert webhook only."
}
Полный пример модуля Runbook, который останавливает виртуальную машину при активации оповещения, см. в разделе служба автоматизации Azure documenation.
Интеграция партнеров через веб-перехватчики
Большинство наших партнеров, которые интегрируются с классическими оповещениями, уже поддерживают новые оповещения о метриках с помощью их интеграций. Известные интеграции, которые уже работают с новыми оповещениями метрик:
Если вы используете интеграцию с партнером, не указанную здесь, выясните у поставщика, что он работает с новыми оповещениями о метриках.