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


Настройка оповещений о работоспособности ресурсов с помощью шаблонов 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, см. параметры шаблона Resource Manager для Работоспособность ресурсов оповещений.

  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.

Варианты шаблона 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.

Полный шаблон оповещений для службы "Работоспособность ресурсов"

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

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

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

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

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