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, debe llevar a cabo algunos procesos anticipadamente:
- Instale el módulo de Azure PowerShell.
- Cree o vuelva 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>
Nota:
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 Opciones de plantilla de Resource Manager para alertas de Resource Health.
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 :
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.
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')]"
}
]
}
}
}
]
}
Sin embargo, una alerta amplia como esta no suele ser recomendable. En la sección siguiente, aprenderá a reducir el ámbito para que la alerta se centre en los eventos que nos importan.
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
de esta 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/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 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 de mantenimiento notificados pertinentes son: Available
, Unavailable
y Degraded
. Sin embargo, en situaciones en las que el ejecutor y el recurso de Azure no se pueden comunicar, se notifica un estado Unknown
para el recurso y que se considera un evento de estado "Activo".
No obstante, cuando un recurso se notifica como Unknown
, es probable que su estado no haya cambiado desde el último informe preciso. Si desea eliminar las alertas de eventos Unknown
, 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 Unknown
. Este cambio puede resultar útil si las alertas se envían directamente al correo electrónico o teléfono móvil.
Es posible que las propiedades currentHealthStatus
y previousHealthStatus
sean un valor nulo 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, el uso de la cláusula en este ejemplo puede provocar que algunas alertas no se desencadenen, ya que los valores de properties.currentHealthStatus
y properties.previousHealthStatus
se establecen en el valor nulo.
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
}
]
}
Es posible que el campo de la causa sea un valor nulo 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 de este ejemplo puede provocar que una alerta no se desencadene, ya que el valor de la propiedad properties.cause
se establecerá en el valor nulo.
Completar la plantilla de alerta de Resource Health
Esta es una plantilla de ejemplo que se configura mediante los ajustes descritos en la sección anterior para maximizar la relación de señal a ruido. Tenga en cuenta las observaciones que se han indicado anteriormente donde los valores de las propiedades currentHealthStatus
, previousHealthStatus
y cause pueden ser nulos 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: