Поделиться через


Настройка оповещений о работоспособности ресурсов с помощью шаблонов Resource Manager

В этой статье показано, как создать оповещения журнала действий Работоспособность ресурсов с помощью шаблонов Azure Resource Manager и Azure PowerShell.

Служба "Работоспособность ресурсов Azure" позволяет получать сведения о текущем и прошлых состояниях работоспособности ресурсов Azure. Оповещения службы "Работоспособность ресурсов Azure" помогают практически в реальном времени сообщить вам об изменении состояния работоспособности этих ресурсов. Используя программные средства, клиенты могут создать и настроить оповещения службы "Работоспособность ресурсов" в пакетном режиме.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Необходимые компоненты

Чтобы выполнить инструкции на этой странице, необходимо заранее настроить следующие действия:

  1. Необходимо установить модуль Azure PowerShell.
  2. Необходимо создать или повторно использовать группу действий, настроенную для уведомления.

Instructions

  1. Используйте PowerShell для входа в Azure с помощью учетной записи и выберите подписку, с которой вы хотите взаимодействовать.

    Login-AzAccount
    Select-AzSubscription -Subscription <subscriptionId>
    

    Примечание.

    С помощью командлета Get-AzSubscription можно перечислить подписки, к которым у вас есть доступ.

  2. Найдите и сохраните полный идентификатор Azure Resource Manager для группы действий.

    (Get-AzActionGroup -ResourceGroupName <resourceGroup> -Name <actionGroup>).Id
    
  3. Создание и сохранение шаблона Resource Manager для оповещений Работоспособность ресурсов как resourcehealthalert.json (см. сведения)

  4. Создайте новое развертывание Azure Resource Manager с помощью этого шаблона.

    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <resourceGroup> -TemplateFile <path\to\resourcehealthalert.json>
    
  5. Вам будет предложено ввести имя оповещения и идентификатор ресурса группы действий, скопированные ранее:

    Supply values for the following parameters:
    (Type !? for Help.)
    activityLogAlertName: <Alert Name>
    actionGroupResourceId: /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/microsoft.insights/actionGroups/<actionGroup>
    
  6. Если все работает успешно, вы получите подтверждение в 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. main

Варианты шаблона 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 (Неизвестно), можно указать эту логику в шаблоне:

"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
                }
            ]
        },
    ]
},

В этом примере мы уведомляем только о событиях, в которых текущее и предыдущее состояние работоспособности не имеет "Неизвестно". Это изменение может быть полезным дополнением, если оповещения отправляются непосредственно на мобильный телефон или электронную почту.

Обратите внимание, что свойства currentHealthStatus и предыдущие СвойстваHealthStatus могут иметь значение NULL в некоторых событиях. Например, при возникновении события обновления вероятно, что состояние работоспособности ресурса не изменилось с момента последнего отчета. Доступна только другая информация о событии (например, причина). Поэтому использование предложения выше может привести к тому, что некоторые предупреждения не будут активированы, так как свойства 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')]"
                        }
                    ]
                }
            }
        }
    ]
}

Однако вы знаете, какие конфигурации эффективны для вас, поэтому используйте средства, которые вы научили вам в этой документации, чтобы сделать собственную настройку.

Следующие шаги

Дополнительная информация о службе "Работоспособность ресурсов".

Создание оповещений службы "Работоспособность служб":