Preparar as suas aplicações lógicas e runbooks para a migração de regras de alerta clássicas
Nota
Conforme anunciado anteriormente, os alertas clássicos no Azure Monitor são descontinuados para os utilizadores da cloud pública, embora ainda estejam em utilização limitada até 31 de maio de 2021. Os alertas clássicos para Azure Government cloud e o Microsoft Azure operado pela 21Vianet serão descontinuados a 29 de fevereiro de 2024.
Se optar por migrar voluntariamente as regras de alerta clássicas para novas regras de alerta, existem algumas diferenças entre os dois sistemas. Este artigo explica essas diferenças e como se pode preparar para a alteração.
Alterações à API
As APIs que criam e gerem regras de alerta clássicas (microsoft.insights/alertrules
) são diferentes das APIs que criam e gerem novos alertas de métricas (microsoft.insights/metricalerts
). Se criar e gerir programaticamente regras de alerta clássicas hoje, atualize os scripts de implementação para funcionarem com as novas APIs.
A tabela seguinte é uma referência às interfaces programáticas para alertas clássicos e novos:
Tipo de script de implementação | Alertas clássicos | Novos alertas de métricas |
---|---|---|
API REST | microsoft.insights/alertrules | microsoft.insights/metricalerts |
CLI do Azure | az monitor alert |
az monitor metrics alert |
PowerShell | Referência | Referência |
Modelo Azure Resource Manager | Para alertas clássicos | Para novos alertas de métricas |
Alterações ao payload de notificação
O formato payload de notificação é ligeiramente diferente entre as regras de alerta clássicas e os novos alertas de métricas. Se tiver regras de alerta clássicas com ações de webhook, aplicação lógica ou runbook, tem de atualizar os destinos para aceitar o novo formato de payload.
Utilize a tabela seguinte para mapear os campos de payload do webhook do formato clássico para o novo formato:
Tipo de ponto final de notificação | Alertas clássicos | Novos alertas de métricas |
---|---|---|
O alerta foi ativado ou resolvido? | estado | data.status |
Informações contextuais sobre o alerta | contexto | data.context |
Carimbo de data/hora no qual o alerta foi ativado ou resolvido | context.timestamp | data.context.timestamp |
ID da regra de alerta | context.id | data.context.id |
Nome da regra de alerta | context.name | data.context.name |
Descrição da regra de alerta | context.description | data.context.description |
Condição da regra de alerta | context.condition | data.context.condition |
Nome da métrica | context.condition.metricName | data.context.condition.allOf[0].metricName |
Agregação de tempo (como a métrica é agregada na janela de avaliação) | context.condition.timeAggregation | context.condition.timeAggregation |
Período de avaliação | context.condition.windowSize | data.context.condition.windowSize |
Operador (como o valor de métrica agregado é comparado com o limiar) | context.condition.operator | data.context.condition.operator |
Limite | context.condition.threshold | data.context.condition.allOf[0].threshold |
Valor da métrica | context.condition.metricValue | data.context.condition.allOf[0].metricValue |
ID da subscrição | context.subscriptionId | data.context.subscriptionId |
Grupo de recursos do recurso afetado | context.resourceGroup | data.context.resourceGroup |
Indique o nome do recurso afetado | context.resourceName | data.context.resourceName |
Tipo do recurso afetado | context.resourceType | data.context.resourceType |
ID de recurso do recurso afetado | context.resourceId | data.context.resourceId |
Ligação direta para a página de resumo de recursos do portal | context.portalLink | data.context.portalLink |
Campos de payload personalizados a serem transmitidos para o webhook ou aplicação lógica | propriedades | data.properties |
Os payloads são semelhantes, como pode ver. A secção seguinte oferece:
- Detalhes sobre como modificar aplicações lógicas para funcionarem com o novo formato.
- Um exemplo de runbook que analisa o payload de notificação para novos alertas.
Modificar uma aplicação lógica para receber uma notificação de alerta de métrica
Se estiver a utilizar aplicações lógicas com alertas clássicos, tem de modificar o código da aplicação lógica para analisar o novo payload de alertas de métricas. Siga estes passos:
Criar uma nova aplicação lógica.
Utilize o modelo "Azure Monitor - Processador de Alertas de Métricas". Este modelo tem um acionador de pedido HTTP com o esquema adequado definido.
Adicione uma ação para alojar a sua lógica de processamento.
Utilizar um runbook de automatização que recebe uma notificação de alerta de métrica
O exemplo seguinte fornece código do PowerShell para utilizar no runbook. Este código pode analisar os payloads das regras de alerta de métricas clássicas e das novas regras de alerta de métricas.
## 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."
}
Para obter um exemplo completo de um runbook que para uma máquina virtual quando um alerta é acionado, veja o Automatização do Azure documenation.
Integração de parceiros através de webhooks
A maioria dos nossos parceiros que se integram com alertas clássicos já suportam alertas de métricas mais recentes através das respetivas integrações. As integrações conhecidas que já funcionam com novos alertas de métricas incluem:
Se estiver a utilizar uma integração de parceiros que não está listada aqui, confirme junto do fornecedor que estes funcionam com novos alertas de métricas.