Preparar seus aplicativos lógicos e runbooks para a migração de regras de alerta clássicos
Observação
Conforme anunciado anteriormente, os alertas clássicos no Azure Monitor foram desativados para os usuários da nuvem pública, embora ainda estejam em uso limitado até 31 de maio de 2021. Os alertas clássicos da nuvem do Azure Governamental e do Azure operado pela 21Vianet serão desativados no dia 29 de fevereiro de 2024.
Se você optar por migrar voluntariamente suas regras de alerta clássicas para as regras de alerta novas, haverá algumas diferenças entre os dois sistemas. Este artigo explica essas diferenças e como você pode se preparar para a alteração.
Alterações de API
As APIs que criam e gerenciam as regras de alerta clássicas (microsoft.insights/alertrules
) são diferentes das que criam e gerenciam os novos alertas de métrica (microsoft.insights/metricalerts
). Se você cria e gerencia regras de alerta clássicas programaticamente, atualize seus scripts de implantação para que funcionem com as novas APIs.
A seguinte tabela é uma referência às interfaces programáticas para os alertas clássicos e novos:
Tipo de script de implantação | Alertas clássicos | Novos alertas de métrica |
---|---|---|
API REST | microsoft.insights/alertrules | microsoft.insights/metricalerts |
CLI do Azure | az monitor alert |
az monitor metrics alert |
PowerShell | Referência | Referência |
Modelo do Azure Resource Manager | Para alertas clássicos | Para novos alertas de métrica |
Alterações no conteúdo de notificação
O formato do conteúdo de notificação é ligeiramente diferente entre as regras de alerta clássicas e os novos alertas de métrica. Se você tiver regras de alerta clássicas com ações de runbook, webhook ou aplicativo lógico, deverá atualizar os destinos para aceitar o novo formato do conteúdo.
Use a seguinte tabela para mapear os campos de conteúdo do webhook do formato clássico para o novo formato:
Tipo do ponto de extremidade de notificação | Alertas clássicos | Novos alertas de métrica |
---|---|---|
O alerta foi ativado ou resolvido? | status | data.status |
Informações contextuais sobre o alerta | contexto | data.context |
Carimbo de data/hora em que 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 de 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 ao longo da 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 agregado da métrica é comparado com o limite) | 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 assinatura | context.subscriptionId | data.context.subscriptionId |
Grupo de recursos do recurso afetado | context.resourceGroup | data.context.resourceGroup |
Nome do recurso afetado | context.resourceName | data.context.resourceName |
Tipo do recurso afetado | context.resourceType | data.context.resourceType |
A ID do recurso afetado | context.resourceId | data.context.resourceId |
Link direto para a página de resumo de recursos do portal | context.portalLink | data.context.portalLink |
Campos de conteúdo personalizados a serem passados para o webhook ou aplicativo lógico | properties | data.properties |
Os conteúdos são semelhantes, como você pode ver. A seguinte seção oferece:
- Detalhes sobre como modificar aplicativos lógicos para funcionarem com o novo formato.
- Um exemplo de runbook que avalia o conteúdo de notificação para novos alertas.
Modificar um aplicativo lógico para receber uma notificação de alerta de métrica
Se você estiver usando aplicativos lógicos com alertas clássicos, deverá modificar o código do aplicativo lógico para analisar a o novo conteúdo dos alertas de métrica. Siga estas etapas:
Criar um aplicativo lógico.
Use o modelo "Azure Monitor – Manipulador de Alertas de Métricas". Esse modelo tem um gatilho de solicitação HTTP com o esquema apropriado definido.
Adicione uma ação para hospedar sua lógica de processamento.
Usar um runbook de automação que recebe uma notificação de alerta de métrica
O exemplo a seguir fornece o código do PowerShell a ser usado em seu runbook. Esse código pode analisar os conteúdos de regras de alerta de métrica clássicas e de novas regras de alerta de métrica.
## 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 interrompe uma máquina virtual quando um alerta é disparado, consulte o Automação do Azure documenation.
Integração de parceiros por meio de webhooks
A maioria de nossos parceiros que se integram aos alertas clássicos já tem suporte para alertas de métrica mais novos por meio de suas integrações. As integrações conhecidas que já funcionam com novos alertas de métrica incluem:
Se você está usando uma integração de parceiros que não está listada aqui, confirme com o provedor que ela funciona com os novos alertas de métrica.