Настройка оповещений о работоспособности ресурсов с помощью шаблонов Resource Manager
В этой статье показано, как создавать оповещения журнала действий Работоспособность ресурсов программным способом с помощью шаблонов Azure Resource Manager и Azure PowerShell.
Служба "Работоспособность ресурсов Azure" позволяет получать сведения о текущем и прошлых состояниях работоспособности ресурсов Azure. Оповещения службы "Работоспособность ресурсов Azure" помогают практически в реальном времени сообщить вам об изменении состояния работоспособности этих ресурсов. Используя программные средства, клиенты могут создать и настроить оповещения службы "Работоспособность ресурсов" в пакетном режиме.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Необходимые компоненты
Чтобы выполнить инструкции на этой странице, необходимо заранее настроить следующие действия:
- установить модуль Azure PowerShell .
- Создайте или повторно используйте группу действий, настроенную для уведомления.
Instructions
Используйте PowerShell для входа в Azure с помощью учетной записи и выберите подписку, с которой вы хотите взаимодействовать.
Login-AzAccount Select-AzSubscription -Subscription <subscriptionId>
Примечание.
С помощью командлета
Get-AzSubscription
можно перечислить подписки, к которым у вас есть доступ.Найдите и сохраните полный идентификатор Azure Resource Manager для группы действий.
(Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
Создайте и сохраните шаблон Resource Manager для оповещений Работоспособность ресурсов как resourcehealthalert.json, см. параметры шаблона Resource Manager для Работоспособность ресурсов оповещений.
Создайте новое развертывание Azure Resource Manager с помощью этого шаблона.
New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
Вам будет предложено ввести имя оповещения и идентификатор ресурса группы действий, скопированные ранее:
Supply values for the following parameters: (Type !? for Help.) activityLogAlertName: <Alert Name> actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
Если все работает успешно, вы получите подтверждение в 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 :
Если вы планируете полностью автоматизировать этот процесс, просто необходимо изменить шаблон Resource Manager, чтобы не запрашивать значения на шаге 5.
Варианты шаблона Resource Manager для оповещений службы "Работоспособность ресурсов"
Этот базовый шаблон можно использовать в качестве отправной точки для создания оповещений службы "Работоспособность ресурсов". Этот шаблон работает как написанный и подписывается для получения оповещений обо всех активированных событиях работоспособности ресурсов во всех ресурсах в подписке.
Примечание.
В нижней части этой статьи мы также включили более сложный шаблон оповещения, который должен увеличить соотношение сигнала и помех для оповещений службы "Работоспособность ресурсов" по сравнению с этим шаблоном.
{
"$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')]"
}
]
}
}
}
]
}
Тем не менее такое широкое оповещение обычно не рекомендуется использовать. В следующем разделе описано, как развернуть это оповещение, чтобы сосредоточиться на событиях, о которые мы заботимся.
Корректировка области оповещения
Службу "Работоспособность ресурсов" можно настроить для мониторинга событий в трех различных областях:
- Уровень подписки
- уровень группы ресурсов;
- уровень ресурса.
Шаблон генерации оповещений настраивается на уровне подписки, но если вы хотите настроить оповещение только о определенных ресурсах или ресурсах в определенной группе ресурсов, необходимо просто изменить scopes
раздел в этом шаблоне.
Раздел с заданной областью на уровне группы ресурсов должен выглядеть так:
"scopes": [
"/subscriptions/<subscription id>/resourcegroups/<resource group>"
],
А раздел с заданной областью на уровне ресурса должен выглядеть так:
"scopes": [
"/subscriptions/<subscription id>/resourcegroups/<resource group>/providers/<resource>"
],
Пример: "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myRG/providers/microsoft.compute/virtualmachines/myVm"
Примечание.
Вы можете перейти к портал Azure и просмотреть URL-адрес при просмотре ресурса Azure, чтобы получить эту строку.
Корректировка типов ресурсов, о которых приходят оповещения
Оповещения на уровне подписки или группы ресурсов могут иметь различные типы ресурсов. Если вы хотите, чтобы оповещения поступали только из определенного подмножества типов ресурсов, это можно определить в разделе condition
шаблона следующим образом:
"condition": {
"allOf": [
...,
{
"anyOf": [
{
"field": "resourceType",
"equals": "MICROSOFT.COMPUTE/VIRTUALMACHINES",
"containsAny": null
},
{
"field": "resourceType",
"equals": "MICROSOFT.STORAGE/STORAGEACCOUNTS",
"containsAny": null
},
...
]
}
]
},
Здесь мы используем оболочку anyOf
, чтобы оповещение о работоспособности ресурса сопоставлялось с одним из указанных условий и отправлялись оповещения, предназначенные для определенных типов ресурсов.
Корректировка событий службы "Работоспособность ресурсов", о которых поступают оповещения
Когда в ресурсах происходит событие работоспособности, они могут проходить через ряд шагов, представляющих состояния событий работоспособности: Active
, In Progress
, Updated
и Resolved
.
Вам может требоваться уведомление только в том случае, если ресурс становится неработоспособным. В этом случае нужно настроить срабатывание оповещения, только когда status
имеет значение Active
. Однако, если вы хотите получать уведомления и на других этапах, эти сведения можно добавить следующим образом:
"condition": {
"allOf": [
...,
{
"anyOf": [
{
"field": "status",
"equals": "Active"
},
{
"field": "status",
"equals": "In Progress"
},
{
"field": "status",
"equals": "Resolved"
},
{
"field": "status",
"equals": "Updated"
}
]
}
]
}
Если вы хотите получать уведомления для всех четырех этапов событий работоспособности, вы можете удалить это условие вместе, а оповещение уведомляет вас независимо от status
свойства.
Примечание.
Каждый раздел anyOf должен содержать только одно значение типа поля.
Корректировка оповещений службы "Работоспособность ресурсов" во избежание событий Unknown (Неизвестно)
Azure Работоспособность ресурсов может сообщать о последней работоспособности ресурсов, постоянно отслеживая их с помощью тестовых средств выполнения. Соответствующие состояния работоспособности: Available
, Unavailable
и Degraded
. Однако в ситуациях, когда средство выполнения и ресурс Azure не могут взаимодействовать, Unknown
состояние работоспособности сообщается для ресурса и считается событием работоспособности "Активный".
Однако, когда ресурс сообщает Unknown
, скорее всего, состояние работоспособности не изменилось с момента последнего точного отчета. Если вы хотите исключить оповещения о Unknown
событиях, можно указать эту логику в шаблоне:
"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
}
]
},
]
},
В этом примере мы уведомляем только о событиях, в которых отсутствует текущее и предыдущее состояние Unknown
работоспособности. Это изменение может быть полезным дополнением, если оповещения отправляются непосредственно на мобильный телефон или на электронную почту.
В некоторых событиях можно currentHealthStatus
использовать значения NULL и previousHealthStatus
свойства. Например, при возникновении события обновления вероятно, что состояние работоспособности ресурса не изменилось с момента последнего отчета, доступно только то, что дополнительные сведения о событии доступны (например, причина). Поэтому использование предложения в этом примере может привести к тому, что некоторые оповещения не активируются, так как properties.currentHealthStatus
для значений и properties.previousHealthStatus
значений задано значение NULL.
Настройка оповещения, чтобы избежать событий, инициированных пользователем
События службы "Работоспособность ресурсов" могут вызываться инициированной платформой и событиями, инициированными пользователем. Оповещение имеет смысл отправлять только тогда, когда событие работоспособности вызвано платформой Azure.
Для оповещения можно легко настроить фильтрацию событий только этих типов:
"condition": {
"allOf": [
...,
{
"field": "properties.cause",
"equals": "PlatformInitiated",
"containsAny": null
}
]
}
Поле причины может иметь значение NULL в некоторых событиях. То есть происходит переход работоспособности (например, доступен для недоступности) и событие регистрируется немедленно, чтобы предотвратить задержки уведомлений. Поэтому использование предложения в этом примере может привести к тому, что оповещение не активируется, так как properties.cause
значение свойства будет иметь значение NULL.
Полный шаблон оповещений для службы "Работоспособность ресурсов"
Ниже приведен пример шаблона, настроенный с помощью параметров, описанных в предыдущем разделе, чтобы максимально увеличить коэффициент сигнала к шуму. Помните, что указанные выше предостережения, в которых currentHealthStatus
previousHealthStatus
значения свойств , а значения свойств могут иметь значение NULL в некоторых событиях.
{
"$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')]"
}
]
}
}
}
]
}
Однако вы знаете, какие конфигурации эффективны для вас, поэтому используйте средства, которые вы научили вам в этой документации, чтобы сделать собственную настройку.
Следующие шаги
Дополнительная информация о службе "Работоспособность ресурсов".
- Обзор службы "Работоспособность ресурсов Azure"
- Типы ресурсов и проверок работоспособности, доступные в службе "Работоспособность ресурсов Azure"
Создание оповещений службы "Работоспособность служб":