Создание ресурсов мониторинга с помощью Bicep

В Azure есть обширный набор средств, позволяющих отслеживать приложения и службы. Вы можете программно создать ресурсы мониторинга с помощью Bicep, чтобы автоматизировать создание правил, параметров диагностики и оповещений при подготовке инфраструктуры Azure.

Перенос конфигурации мониторинга в код Bicep может показаться необычным шагом, учитывая, что на портале Azure доступны средства для настройки правил генерации оповещений, параметров диагностики и панелей мониторинга.

Однако оповещения и параметры диагностики по сути аналогичны другим ресурсам инфраструктуры. Включив их в код Bicep, вы можете развертывать и тестировать ресурсы оповещений так же, как и другие ресурсы Azure.

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

Рабочие области Log Analytics и Application Insights

Рабочие области Log Analytics можно создать с типом ресурса Microsoft.OperationalInsights/workspaces, в и рабочие области Application Insights — с типом Microsoft.Insights/components. Оба этих компонента развертываются в группах ресурсов.

Параметры диагностики

Параметры диагностики позволяют настроить Azure Monitor для экспорта журналов и метрик в несколько целевых расположений, включая Log Analytics и службу хранилища Azure.

При создании параметров диагностики в Bicep помните, что этот ресурс является ресурсом расширения, то есть он применяется к другому ресурсу. Параметры диагностики в Bicep можно создать с помощью типа ресурса Microsoft.Insights/diagnosticSettings.

При создании параметров диагностики в Bicep нужно применить область действия параметра диагностики. Этот параметр диагностики может применяться на уровне управления, подписки или группы ресурсов. Используйте свойство scope для этого ресурса, чтобы задать для него область действия.

Рассмотрим следующий пример:

param location string = resourceGroup().location
param appPlanName string = '${uniqueString(resourceGroup().id)}asp'
param logAnalyticsWorkspace string = '${uniqueString(resourceGroup().id)}la'

var appPlanSkuName = 'S1'

resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2021-12-01-preview' existing = {
  name: logAnalyticsWorkspace
}

resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
  name: appPlanName
  location: location
  sku: {
    name: appPlanSkuName
    capacity: 1
  } 
}

resource diagnosticLogs 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: appServicePlan.name
  scope: appServicePlan
  properties: {
    workspaceId: logAnalytics.id
    logs: [
      {
        category: 'AllMetrics'
        enabled: true
        retentionPolicy: {
          days: 30
          enabled: true 
        }
      }
    ]
  }
}

В предыдущем примере вы создаете параметр диагностики для плана службы приложений и отправляете его в Log Analytics. Свойство scope можно использовать для определения плана службы приложений в качестве области действия для параметра диагностики, а свойство workspaceId — для определения рабочей области Log Analytics, куда отправляются журналы диагностики. Вы также можете экспортировать параметры диагностики в Центры событий и учетные записи хранения Azure.

Типы журналов у разных ресурсов отличаются, поэтому убедитесь, что экспортируемые журналы применимы к используемому ресурсу.

Параметры диагностики журнала действий

Чтобы с помощью Bicep настроить параметры диагностики для экспорта журнала действий Azure, разверните ресурс параметров диагностики в области подписки.

В следующем примере показано, как экспортировать несколько типов журналов действий в рабочую область Log Analytics:

targetScope = 'subscription'

param logAnalyticsWorkspaceId string

var activityLogDiagnosticSettingsName = 'export-activity-log'

resource subscriptionActivityLog 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: activityLogDiagnosticSettingsName
  properties: {
    workspaceId: logAnalyticsWorkspaceId
    logs: [
      {
        category: 'Administrative'
        enabled: true
      }
      {
        category: 'Security'
        enabled: true
      }
      {
        category: 'ServiceHealth'
        enabled: true
      }
      {
        category: 'Alert'
        enabled: true
      }
      {
        category: 'Recommendation'
        enabled: true
      }
      {
        category: 'Policy'
        enabled: true
      }
      {
        category: 'Autoscale'
        enabled: true
      }
      {
        category: 'ResourceHealth'
        enabled: true
      }
    ]
  }
}

видны узлы

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

Дополнительные сведения о работе оповещений в Azure см. в статье Обзор оповещений в Microsoft Azure.

В следующих разделах показано, как настроить различные типы оповещений с помощью кода Bicep.

Группы действий

Чтобы получать уведомления об активации оповещений, нужно создать группу действий. Группа действий — это коллекция параметров уведомлений, которые определены владельцем подписки Azure. Группы действий используются для уведомления пользователей о том, что оповещение было активировано, либо для активации автоматических ответов на оповещения.

Чтобы создать группы действий в Bicep, можно использовать тип Microsoft.Insights/actionGroups. Например:

param actionGroupName string = 'On-Call Team'
param location string = resourceGroup().location

var actionGroupEmail = 'oncallteam@contoso.com'

resource supportTeamActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
  name: actionGroupName
  location: location
  properties: {
    enabled: true
    groupShortName: actionGroupName
    emailReceivers: [
      {
        name: actionGroupName
        emailAddress: actionGroupEmail
        useCommonAlertSchema: true
      }
    ]
  }
}

В предыдущем примере создается группа действий, которая отправляет оповещения по адресу электронной почты, но вы также можете определить группы действий, которые отправляют оповещения в Центры событий, Функции Azure, Logic Apps и т. п.

Правила обработки оповещений

Правила обработки оповещений (которые раньше назывались правилами действий) позволяют применять обработку для сработавших оповещений. Правила обработки оповещений можно создать в Bicep с помощью типа Microsoft.AlertsManagement/actionRules.

Каждое правило обработки оповещений имеет область действия, которая может быть списком из одного или нескольких конкретных ресурсов, определенной группой ресурсов или всей подпиской Azure. При определении правил обработки оповещений в Bicep вы определяете список идентификаторов ресурсов в свойстве scope, который нацелен на соответствующие ресурсы для правила обработки оповещений.

param alertRuleName string = 'AlertRuleName'
param actionGroupName string = 'On-Call Team'
param location string = resourceGroup().location

resource actionGroup 'Microsoft.Insights/actionGroups@2021-09-01' existing = {
  name: actionGroupName
}

resource alertProcessingRule 'Microsoft.AlertsManagement/actionRules@2021-08-08' = {
  name: alertRuleName
  location: location
  properties: {
    actions: [
      {
        actionType: 'AddActionGroups'
        actionGroupIds: [
          actionGroup.id
        ]
      }
    ]
    conditions: [
      {
        field: 'MonitorService'
        operator: 'Equals'
        values: [
          'Azure Backup'
        ]
      }
    ]
    enabled: true
    scopes: [
      subscription().id
    ]
  }
}

В предыдущем примере определяется правило обработки оповещений MonitorService в хранилище Azure Backup, которое применяется к существующей группе действий. Это правило активирует оповещения для этой группы действий.

Правила генерации оповещений журнала

Оповещения журнала автоматически выполняют запрос Log Analytics. Этот запрос, используемый для оценки журналов ресурсов с заданным вами интервалом, определяет, соответствуют ли результаты определенным вами условиям, а затем вызывает оповещение.

Правила генерации оповещений журнала в Bicep можно создать с помощью типа Microsoft.Insights/scheduledQueryRules.

Правила генерации оповещений метрик

Оповещения метрик уведомляют вас в том случае, если одна из метрик пересекает заданное пороговое значение. Правило генерации оповещений метрик можно определить в коде Bicep с помощью типа Microsoft.Insights/metricAlerts.

Оповещения журнала действий

Журнал действий Azure — это журнал платформы в Azure, который предоставляет аналитические сведения о событиях на уровне подписки. Сюда относятся сведения об изменении ресурса в Azure.

Оповещения журнала действий активируются в тех случаях, когда происходит новое событие, записываемое в журнал действий, которое соответствует условиям, заданным в оповещении.

Свойство scope можно использовать в типе Microsoft.Insights/activityLogAlerts, чтобы создать оповещения журнала действий для определенного ресурса или списка ресурсов, используя идентификаторы ресурсов в качестве префикса.

Вы определяете условия правила генерации оповещений в свойстве condition, а затем настраиваете группу оповещений для активации этих оповещений с помощью массива actionGroup. Здесь можно передать одну или несколько групп действий, куда нужно отправлять оповещения журнала действий, в зависимости от ваших требований.

param activityLogAlertName string = '${uniqueString(resourceGroup().id)}-alert'
param actionGroupName string = 'adminactiongroup'

resource actionGroup 'Microsoft.Insights/actionGroups@2021-09-01' existing = {
  name: actionGroupName
}

resource activityLogAlert 'Microsoft.Insights/activityLogAlerts@2020-10-01' = {
  name: activityLogAlertName
  location: 'Global'
  properties: {
    condition: {
      allOf: [
        {
          field: 'category'
          equals: 'Administrative'
        }
        {
          field: 'operationName'
          equals: 'Microsoft.Resources/deployments/write'
        }
        {
          field: 'resourceType'
          equals: 'Microsoft.Resources/deployments'
        }
      ]
    }
    actions: {
      actionGroups: [
        {
          actionGroupId: actionGroup.id
        }
      ]
    }
    scopes: [
      subscription().id
    ]
  }
}

Оповещения о состоянии ресурсов

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

В Bicep можно создавать оповещения о работоспособности ресурсов с использованием типа Microsoft.Insights/activityLogAlerts.

Оповещения о работоспособности ресурсов можно настроить для мониторинга событий на уровне подписки, группы ресурсов или отдельного ресурса.

Рассмотрим следующий пример, где создается оповещение о работоспособности ресурсов, которое сообщает об оповещениях о работоспособности службы. Это оповещение применяется на уровне подписки (с помощью свойства scope) и отправляет оповещения в существующую группу действий:

param activityLogAlertName string = uniqueString(resourceGroup().id)
param actionGroupName string = 'oncallactiongroup'

resource actionGroup 'Microsoft.Insights/actionGroups@2021-09-01' existing = {
  name: actionGroupName
}

resource resourceHealthAlert 'Microsoft.Insights/activityLogAlerts@2020-10-01' = {
  name: activityLogAlertName
  location: 'global'
  properties: {
    condition: {
      allOf: [
        {
          field: 'category'
          equals: 'ServiceHealth'
        }
      ]
    }
    scopes: [
      subscription().id
    ]
    actions: {
      actionGroups: [
        {
          actionGroupId: actionGroup.id
        }
      ]
    }
  }
}

Оповещения интеллектуального обнаружения

Функция интеллектуального обнаружения предупреждает вас о потенциальных проблемах с производительностью и аномальных сбоях в веб-приложении. Оповещения интеллектуального обнаружения можно создавать в Bicep с помощью типа Microsoft.AlertsManagement/smartDetectorAlertRules.

Панели мониторинга

В Bicep можно создавать панели мониторинга портала с помощью типа ресурса Microsoft.Portal/dashboards.

Дополнительные сведения о создании панелей мониторинга с помощью кода см. в статье Создание панели мониторинга Azure программными средствами.

Правила автомасштабирования

Чтобы создать параметр автомасштабирования, определите его с помощью типа ресурса Microsoft.Insights/autoscaleSettings.

Чтобы задать целевой ресурс, к которому требуется применить параметр автомасштабирования, нужно указать идентификатор целевого ресурса, к которому требуется добавить параметр.

В этом примере условие горизонтального увеличения масштаба для плана службы приложений основано на проценте средней загрузки ЦП за 10 минут. Если план службы приложений превышает 70 % средней загрузки ЦП в течение 10 минут, подсистема автомасштабирования горизонтально увеличивает масштаб плана, добавляя один экземпляр.

param location string = resourceGroup().location
param appPlanName string = '${uniqueString(resourceGroup().id)}asp'

var appPlanSkuName = 'S1'

resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
  name: appPlanName
  location: location
  properties: {}
  sku: {
    name: appPlanSkuName
    capacity: 1
  }
}

resource scaleOutRule 'Microsoft.Insights/autoscalesettings@2022-10-01' = {
  name: appServicePlan.name
  location: location
  properties: {
    enabled: true
    profiles: [
      {
        name: 'Scale out condition'
        capacity: {
          maximum: '3'
          default: '1'
          minimum: '1'
        }
        rules: [
          {
            scaleAction: {
              type: 'ChangeCount'
              direction: 'Increase'
              cooldown: 'PT5M'
              value: '1'
            }
            metricTrigger: {
              metricName: 'CpuPercentage'
              operator: 'GreaterThan'
              timeAggregation: 'Average'
              threshold: 70
              metricResourceUri: appServicePlan.id
              timeWindow: 'PT10M'
              timeGrain: 'PT1M'
              statistic: 'Average'
            }
          }
        ]
      }
    ]
    targetResourceUri: appServicePlan.id
  }
}

Примечание

При определении правил автомасштабирования учитывайте рекомендации, чтобы избежать проблем при попытке автомасштабирования, таких как неустойчивость. Дополнительные сведения см. в следующей документации по рекомендациям для автомасштабирования.