Compartir a través de


Configuración de alertas de estado de los recursos con plantillas de Resource Manager

En este artículo se muestra cómo crear alertas del registro de actividad de Resource Health mediante plantillas de Azure Resource Manager y Azure PowerShell.

Azure Resource Health le mantiene informado sobre el estado actual y pasado de sus recursos de Azure. Además, le notifica casi en tiempo real de los cambios de estado en estos recursos. La creación y la personalización de alertas mediante programación en Resource Health se puede realizar en bloque.

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Requisitos previos

Para seguir las instrucciones que aparecen en esta página, debe llevar a cabo algunos procesos anticipadamente:

  1. Debe instalar el módulo de Azure PowerShell.
  2. Debe crear o volver a usar un grupo de acciones configurado para recibir notificaciones.

Instrucciones

  1. Con PowerShell, inicie sesión en su cuenta de Azure y seleccione la suscripción con la que desee interactuar.

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Nota:

    Puede usar Get-AzSubscription para enumerar las suscripciones a las que tiene acceso.

  2. Busque y guarde el identificador completo del grupo de acciones de Azure Resource Manager.

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Cree y guarde una plantilla de Resource Manager para las alertas de Resource Health como resourcehealthalert.json (vea los detalles)

  4. Cree una nueva implementación de Azure Resource Manager con esta plantilla.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Se le pedirá que escriba el nombre de la alerta y el identificador de recurso del grupo de acciones que copió anteriormente:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Si todo ha funcionado correctamente, recibirá una confirmación en PowerShell

    DeploymentName          : ExampleDeployment
    ResourceGroupName       : <resourceGroup>
    ProvisioningState       : Succeeded
    Timestamp               : 11/8/2017 2:32:00 AM
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                            Name                     Type       Value
                            ===============          =========  ==========
                            activityLogAlertName     String     <Alert Name>
                            activityLogAlertEnabled  Bool       True
                            actionGroupResourceId    String     /...
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

[!NOTE]
Si planea automatizar completamente este proceso, basta con editar la plantilla de Resource Manager para que no solicite los valores del paso 5. principal

Opciones de la plantilla de Resource Manager para las alertas de Resource Health

<Puede usar esta plantilla base como punto de partida para crear alertas de Resource Health. Esta plantilla funciona como se escribe y le registrará para recibir alertas de todos los eventos de estado de recurso que se activen a partir de ese momento en todos los recursos de una suscripción.

Nota:

En la parte inferior de este artículo hemos incluido también una plantilla de alerta más compleja que debe aumentar la relación señal/ruido de las alertas de Resource Health en comparación con esta plantilla.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "activityLogAlertName": {
      "type": "string",
      "metadata": {
        "description": "Unique name (within the Resource Group) for the Activity log alert."
      }
    },
    "actionGroupResourceId": {
      "type": "string",
      "metadata": {
        "description": "Resource Id for the Action group."
      }
    }
  },
  "resources": [   
    {
      "type": "Microsoft.Insights/activityLogAlerts",
      "apiVersion": "2017-04-01",
      "name": "[parameters('activityLogAlertName')]",      
      "location": "Global",
      "properties": {
        "enabled": true,
        "scopes": [
            "[subscription().id]"
        ],        
        "condition": {
          "allOf": [
            {
              "field": "category",
              "equals": "ResourceHealth"
            },
            {
              "field": "status",
              "equals": "Active"
            }
          ]
        },
        "actions": {
          "actionGroups":
          [
            {
              "actionGroupId": "[parameters('actionGroupResourceId')]"
            }
          ]
        }
      }
    }
  ]
}

Pero una alerta amplia como esta no es recomendable. Aprenda a reducir el ámbito para que esta alerta se centre en los eventos importantes.

Ajuste del ámbito de alerta

Las alertas de Resource Health se pueden configurar para supervisar eventos en tres ámbitos distintos:

  • Nivel de suscripción
  • A nivel de grupo de recursos
  • Nivel de recurso

La plantilla de alerta se configura en el nivel de suscripción, pero si quiere configurarla para que solo se notifiquen determinados recursos o recursos de un determinado grupo de recursos, basta con modificar la sección scopes en la plantilla mostrada antes.

Para un ámbito a nivel de grupo de recursos, la sección de ámbito tiene este aspecto:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>"
],

Para un ámbito a nivel de recurso, la sección de ámbito tiene este aspecto:

"scopes": [
    "/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/<resource>"
],

Por ejemplo: "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"

Nota:

Puede ir a Azure Portal y observar la dirección URL del recurso de Azure para obtener esta cadena.

Ajuste de los tipos de recursos de la alertas

Las alertas a nivel de suscripción o de grupo de recursos tienen distintos tipos de recursos. Si desea limitar las alertas a las que procedan de un determinado subconjunto de tipos de recursos, puede definirlo en la sección condition de la plantilla de este modo:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.COMPUTE/VIRTUALMACHINES",
                    "containsAny": null
                },
                {
                    "field": "resourceType",
                    "equals": "MICROSOFT.STORAGE/STORAGEACCOUNTS",
                    "containsAny": null
                },
                ...
            ]
        }
    ]
},

Aquí usamos el contenedor anyOf para permitir que la alerta de estado de recurso coincida con cualquiera de las condiciones especificadas para las alertas se centren en determinados tipos de recursos.

Ajuste de los eventos de Resource Health con alerta

Cuando se produce un evento de estado en los recursos, pueden pasar por una serie de fases que representan el estado del evento: Active, In Progress, Updated y Resolved.

Quizá solo desee recibir notificaciones en caso de que el estado del recurso sea incorrecto, para lo que querrá configurar la alerta para notificar solo cuando status sea Active. Sin embargo si desea recibir una notificación también en las otras fases, puede agregar esos detalles de este modo:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "status",
                    "equals": "Active"
                },
                {
                    "field": "status",
                    "equals": "In Progress"
                },
                {
                    "field": "status",
                    "equals": "Resolved"
                },
                {
                    "field": "status",
                    "equals": "Updated"
                }
            ]
        }
    ]
}

Si desea recibir una notificación para las cuatro fases de los eventos de estado, elimine esta condición y la alerta le notificará independientemente de la propiedad status.

Nota:

Cada sección "anyOf" debe contener solo un valor de tipo de campo.

Ajuste de las alertas de Resource Health para evitar eventos desconocidos

Azure Resource Health puede notificar el estado más reciente de los recursos gracias a la constante supervisión mediante ejecutores de pruebas. Los estados importantes que se notifican son: "Disponible", "No disponible" y "Degradado". Sin embargo, en situaciones en las que el ejecutor y el recurso de Azure no se pueden comunicar, se notifica un estado "Desconocido" para el recurso y que se considera un evento de estado "Activo".

Pero cuando un recurso se notifica como "Desconocido", es probable que su estado no haya cambiado desde el último informe preciso. Si desea eliminar las alertas de eventos desconocidos, puede especificar esa lógica en la plantilla:

"condition": {
    "allOf": [
        ...,
        {
            "anyOf": [
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.currentHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
        {
            "anyOf": [
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Available",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Unavailable",
                    "containsAny": null
                },
                {
                    "field": "properties.previousHealthStatus",
                    "equals": "Degraded",
                    "containsAny": null
                }
            ]
        },
    ]
},

En este ejemplo, solo se notifican los eventos en los que el estado actual y anterior no es "Desconocido". Este cambio puede resultar útil si las alertas se envían directamente al correo electrónico o teléfono móvil.

Tenga en cuenta que es posible que las propiedades currentHealthStatus y previousHealthStatus sean null en algunos eventos. Por ejemplo, cuando se produce un evento Updated, es probable que el estado de mantenimiento del recurso no haya cambiado desde el último informe. Solo está disponible la información del otro evento (por ejemplo, la causa). Por lo tanto, mediante la cláusula anterior puede provocar que algunas alertas no se desencadenen, ya que los valores de properties.currentHealthStatus y properties.previousHealthStatus se establecerán en null.

Ajuste de la alerta para evitar eventos iniciados por el usuario

Los eventos de Resource Health se pueden desencadenar mediante eventos iniciados por la plataforma o por el usuario. Puede que tenga sentido solo enviar una notificación cuando el evento lo genere la plataforma Azure.

Es fácil de configurar la alerta para filtrar solo estos tipos de eventos:

"condition": {
    "allOf": [
        ...,
        {
            "field": "properties.cause",
            "equals": "PlatformInitiated",
            "containsAny": null
        }
    ]
}

Tenga en cuenta que es posible que el campo de la causa sea null en algunos eventos. Es decir, una transición de estado tiene lugar (por ejemplo, pasa de disponible a no disponible) y el evento se registra inmediatamente a fin de evitar que la notificación se retrase. Por tanto, la cláusula anterior puede provocar que una alerta no se desencadene, ya que el valor de la propiedad properties.cause se establece en null.

Completar la plantilla de alerta de Resource Health

Con los distintos ajustes que se describen en la sección anterior, a continuación se muestra una plantilla de ejemplo configurada para maximizar la relación entre señal y ruido. Tenga en cuenta las observaciones que se han indicado anteriormente donde los valores de las propiedades currentHealthStatus, previousHealthStatus y cause pueden ser null en algunos eventos.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "activityLogAlertName": {
            "type": "string",
            "metadata": {
                "description": "Unique name (within the Resource Group) for the Activity log alert."
            }
        },
        "actionGroupResourceId": {
            "type": "string",
            "metadata": {
                "description": "Resource Id for the Action group."
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Insights/activityLogAlerts",
            "apiVersion": "2017-04-01",
            "name": "[parameters('activityLogAlertName')]",
            "location": "Global",
            "properties": {
                "enabled": true,
                "scopes": [
                    "[subscription().id]"
                ],
                "condition": {
                    "allOf": [
                        {
                            "field": "category",
                            "equals": "ResourceHealth",
                            "containsAny": null
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.currentHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Available",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Unavailable",
                                    "containsAny": null
                                },
                                {
                                    "field": "properties.previousHealthStatus",
                                    "equals": "Degraded",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "properties.cause",
                                    "equals": "PlatformInitiated",
                                    "containsAny": null
                                }
                            ]
                        },
                        {
                            "anyOf": [
                                {
                                    "field": "status",
                                    "equals": "Active",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Resolved",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "In Progress",
                                    "containsAny": null
                                },
                                {
                                    "field": "status",
                                    "equals": "Updated",
                                    "containsAny": null
                                }
                            ]
                        }
                    ]
                },
                "actions": {
                    "actionGroups": [
                        {
                            "actionGroupId": "[parameters('actionGroupResourceId')]"
                        }
                    ]
                }
            }
        }
    ]
}

Sin embargo, usted conoce mejor las configuraciones que necesita; use las herramientas que le hemos mostrado en esta documentación para la personalización.

Pasos siguientes

Más información sobre Resource Health:

Creación de alertas de Service Health: