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 programación con 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, necesita de antemano algunas cosas:
- Debe instalar el módulo de Azure PowerShell
- Debe crear o volver a usar un grupo de acciones configurado para recibir notificaciones
Instrucciones
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>
Puede usar
Get-AzSubscription
para enumerar las suscripciones a las que tiene acceso.Busque y guarde el identificador completo del grupo de acciones de Azure Resource Manager
(Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
Cree y guarde una plantilla de Resource Manager para las alertas de Resource Health como
resourcehealthalert.json
(consulte los detalles a continuación)Cree una nueva implementación de Azure Resource Manager con esta plantilla
New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
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>
Si todo fue bien, 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 :
Tenga en cuenta que si planea automatizar completamente este proceso, basta con editar la plantilla de Resource Manager para que no solicite los valores del paso 5.
Opciones de la plantilla de Resource Manager para las alertas de Resource Health
Para crear alertas de Resource Health puede usar esta plantilla base como punto de partida. Esta plantilla funcionará como se escriba y le permitirá recibir alertas de todos los eventos de estado de recurso que se activen a partir de ese momento en los recursos de una suscripción.
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')]"
}
]
}
}
}
]
}
Sin embargo, una alerta amplia como esta no suele ser recomendable. Aprenda a reducir el ámbito para que la alerta se centre en los eventos que nos importan a continuación.
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 a nivel de suscripción, pero si desea configurarla para que solo se notifiquen determinados recursos o recursos de un determinado grupo, basta con modificar la sección scopes
en la anterior plantilla.
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/d37urb3e-ed41-4670-9c19-02a1d2808ff9/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"
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 con 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".
No obstante, 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 son desconocidos. 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 y solo está disponible esa información adicional del 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 lo tanto, mediante la cláusula anterior puede provocar que una alerta no se desencadene, ya que el valor de la propiedad properties.cause se establecerá 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 muestra configurada para maximizar la relación señal/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:
- Información general sobre Azure Resource Health
- Tipos de recursos y comprobaciones de mantenimiento disponibles a través de Azure Resource Health
Creación de alertas de Service Health: