Preparar las aplicaciones lógicas y los runbooks para la migración de las reglas de alertas clásicas

Nota

Como se ha anunciado antes, se retiran las alertas clásicas de Azure Monitor para los usuarios de la nube pública, aunque se seguirán usando de forma limitada hasta el 31 de mayo de 2021. Las alertas clásicas para la nube de Azure Government y Azure China 21Vianet se retirarán el 29 de febrero de 2024.

Si decide realizar la migración voluntaria de las reglas de alerta clásicas a las nuevas, tenga en cuenta que existen algunas diferencias entre los dos sistemas. En este artículo se explican esas diferencias y cómo puede prepararse para el cambio.

Cambios de API

Las API que crean y administran las reglas de alertas clásicas (microsoft.insights/alertrules) son diferentes de las API que crean y administran las nuevas alertas de métricas (microsoft.insights/metricalerts). Si crea y administra mediante programación reglas de alertas clásicas hoy, actualice los scripts de implementación para trabajar con las nuevas API.

La tabla siguiente es una referencia a las interfaces de programación para las alertas clásicas y nuevas:

Tipo de script de implementación Alertas clásicas Nuevas alertas de métricas
API DE REST microsoft.insights/alertrules microsoft.insights/metricalerts
Azure CLI az monitor alert az monitor metrics alert
PowerShell Referencia Referencia
Plantilla del Administrador de recursos de Azure Para alertas clásicas Para nuevas alertas de métricas

Cambios de carga de notificación

El formato de carga de notificación es ligeramente diferente entre las reglas de alertas clásicas y las nuevas alertas de métricas. Si tiene reglas de alerta clásicas con acciones de webhook, aplicación lógica o runbook, debe actualizar los destinos para que acepten el nuevo formato de carga.

Utilice la tabla siguiente para asignar los campos de carga de webhook del formato clásico al nuevo formato:

Tipo de punto de conexión de notificaciones Alertas clásicas Nuevas alertas de métricas
¿Se activó o resolvió la alerta? status data.status
Información contextual sobre la alerta contextoo data.context
Marca de tiempo en que se activó o resolvió la alerta context.timestamp data.context.timestamp
Id. de regla de alerta context.id data.context.id
Nombre de regla de alerta context.name data.context.name
Descripción de la regla de alerta context.description data.context.description
Condición de regla de alerta context.condition data.context.condition
Nombre de métrica context.condition.metricName data.context.condition.allOf[0].metricName
Agregación de tiempo (cómo se agrega la métrica en la ventana de evaluación) context.condition.timeAggregation context.condition.timeAggregation
Período de evaluación context.condition.windowSize data.context.condition.windowSize
Operador (cómo se compara el valor de métrica agregado con el umbral) context.condition.operator data.context.condition.operator
Umbral context.condition.threshold data.context.condition.allOf[0].threshold
Valor de métrica context.condition.metricValue data.context.condition.allOf[0].metricValue
Id. de suscripción context.subscriptionId data.context.subscriptionId
Grupo de recursos del recurso afectado context.resourceGroup data.context.resourceGroup
Nombre del recurso afectado context.resourceName data.context.resourceName
Tipo del recurso afectado context.resourceType data.context.resourceType
Id. del recurso afectado context.resourceId data.context.resourceId
Vínculo directo a la página de resumen de recursos del portal context.portalLink data.context.portalLink
Campos de carga personalizada que se deben pasar a la aplicación lógica o webhook properties data.properties

Las cargas son similares, como puede ver. En la siguiente sección se ofrece:

  • Detalles acerca de cómo modificar las aplicaciones lógicas para trabajar con el nuevo formato.
  • Un ejemplo de runbook que analiza la carga de notificación para las alertas nuevas.

Modificar una aplicación lógica para recibir una notificación de alerta de métrica

Si usa aplicaciones lógicas con alertas clásicas, debe modificar el código de aplicación de lógica para analizar la nueva carga de alertas de métricas. Siga estos pasos:

  1. Cree una nueva aplicación lógica.

  2. Use la plantilla "Azure Monitor - Metrics Alert Handler" (Azure Monitor: controlador de alertas de métricas). Esta plantilla tiene un desencadenador de solicitud HTTP con el esquema apropiado definido.

    Captura de pantalla que muestra dos botones, Aplicación lógica en blanco y Azure Monitor: controlador de alertas de métricas.

  3. Agregue una acción para hospedar la lógica de procesamiento.

Usar un runbook de automatización que reciba una notificación de alerta de métrica

En el ejemplo siguiente se proporciona código de PowerShell para usar en el runbook. Este código puede analizar las cargas para reglas de alertas de métricas clásicas y nuevas reglas de alertas 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 obtener un ejemplo completo de un runbook que detenga una máquina virtual cuando se desencadene una alerta, consulte la documentación de Azure Automation.

Integración de asociados a través de webhooks

La mayoría de nuestros asociados que se integran con las alertas clásicas ya son compatibles con las nuevas alertas de métricas a través de sus integraciones. Las integraciones conocidas que ya funcionan con las nuevas alertas de métricas son:

Si usa una integración de asociados que no aparece aquí, confirme con el proveedor que funciona con las nuevas alertas de métricas.

Pasos siguientes