Как создать оповещения о разных типах метрик для нескольких ресурсов одного типа

Я работаю над созданием предупреждений в лазурном цвете с помощью скриптов Terraform. Я пытаюсь создать оповещения о разных типах метрик для разных ресурсов. (Например: functionapp01, functionapp02, logicapp01, logicapp02 и т. Д.)

Это сценарий:

terraform {
  required_version = ">=0.12"
}

resource "azurerm_monitor_metric_alert" "metric_alert" {
  name                = var.metric_alert_name
  resource_group_name = var.rg_name
  scopes              = [var.resource_id_01,var.resource_id_02]
  description         = var.metric_alert_description
  tags                = var.tags
  frequency           = var.frequency
  severity            = var.severity
  window_size         = var.window_size
  enabled             = var.is_enabled
  
  criteria {
    metric_namespace = var.metric_namespace
    metric_name      = var.metric_name
    aggregation      = var.aggregation
    operator         = var.operator
    threshold        = var.threshold
  }

  action {
    action_group_id = var.action_group_id
  }

}

Всякий раз, когда я запускаю приведенный выше сценарий, я получаю следующую ошибку:

Сервис вернул ошибку. Статус = 400 Код = BadRequest Сообщение = Оповещения в настоящее время не поддерживаются с несколькими уровнями ресурсов для microsoft.web / sites

Справочные ссылки:

azurerm_monitor_metric_alert

Поддерживаемые показатели и измерения

Итак, может ли кто-нибудь посоветовать мне по этому поводу?


person Pradeep    schedule 24.12.2020    source источник


Ответы (1)


Как показывает ошибка, тип ресурса microsoft.web/sites не поддерживает предупреждения о нескольких ресурсах, см. https://docs.microsoft.com/en-us/azure/azure-monitor/platform/alerts-metric-почтивреальномвремени#споддержкойметрикиразмеров  введите описание изображения здесь введите описание изображения здесь

В этом случае вам нужно создать каждый monitor_metric_alert на каждом уровне ресурсов.

Например, если вы создали две функции, functionapp01, functionapp02. Вы можете сделать это так.

variable "function_apps" {
  default = ["functionapp01","functionapp02"]
}


data "azurerm_function_app" "example" {
  for_each = toset(var.function_apps)
  name                = each.value
  resource_group_name = "funtions_rg"
}


resource "azurerm_monitor_metric_alert" "metric_alert" {
  for_each = toset(var.function_apps)
  name                = "${each.value}-example-metricalert"
  resource_group_name = var.rg_name
  scopes              = [data.azurerm_function_app.example[each.value].id]
  description         = var.metric_alert_description
  tags                = var.tags
  frequency           = var.frequency
  severity            = var.severity
  window_size         = var.window_size
  enabled             = var.is_enabled
  
  criteria {
    metric_namespace = var.metric_namespace
    metric_name      = var.metric_name
    aggregation      = var.aggregation
    operator         = var.operator
    threshold        = var.threshold
  }

  action {
    action_group_id = var.action_group_id
  }

}

Обновлять

Если у вас есть ресурсы приложения-функции, которые создаются с помощью Terraform, вы можете использовать их следующим образом:

            variable "function_apps" {
              default = ["functionapp01","functionapp02"]
            }
            
         resource "azurerm_function_app" "example" {
            for_each = toset(var.function_apps)
            name                      = "${each.value}-example-funapp"
            location                  = azurerm_resource_group.example.location
            resource_group_name       = azurerm_resource_group.example.name
            app_service_plan_id       = azurerm_app_service_plan.example.id
          
        
            storage_account_name       = azurerm_storage_account.example.name
            storage_account_access_key = azurerm_storage_account.example.primary_access_key
          
            app_settings = { }
          
            version = "~3"
           
          }
        
        
        
        resource "azurerm_monitor_metric_alert" "test" {
          for_each = toset(var.function_apps)
          name                = "${each.value}-example-metricalert"
          resource_group_name = azurerm_resource_group.example.name
          scopes              = [azurerm_function_app.example[each.value].id]
          description         = var.metric_alert_description
          severity            = var.severity
          window_size         = var.window_size
          enabled             = var.is_enabled
      
            criteria {
        metric_namespace = var.metric_namespace
        metric_name      = var.metric_name
        aggregation      = var.aggregation
        operator         = var.operator
        threshold        = var.threshold
      }
    
        
  action {
    action_group_id = var.action_group_id
  }
}
person Nancy Xiong    schedule 25.12.2020
comment
Спасибо @Nancy! Вышеупомянутый ответ содержит фрагмент кода для импорта функций и повторения элемента в azurerm_monitor_metric_alert. Но в моем случае я создал приложения-функции, планы обслуживания приложений, ресурсы хранения и т. Д., Используя сценарии TF. Итак, не могли бы вы обновить свой ответ в соответствии с ним. - person Pradeep; 28.12.2020
comment
Я обновил свой ответ. - person Nancy Xiong; 28.12.2020
comment
есть ли способ предоставить различные идентификаторы ресурсов свойству scopes? потому что я создал отдельный модуль для azurerm_monitor_metric_alert. Я хочу передать разные идентификаторы ресурсов, имена показателей, имена предупреждений и т. Д. - person Pradeep; 28.12.2020
comment
Приведенный выше код создает два метрических предупреждения для двух приложений-функций с идентификатором динамических ресурсов. scopes = [azurerm_function_app.example[each.value].id]. Разве это не ответ? Как создать одно и то же предупреждение для нескольких ресурсов одного типа? И критерии это пример. Теперь меняю его как ваш код. - person Nancy Xiong; 28.12.2020
comment
Приведенный выше ответ содержит фрагмент кода для создания одного предупреждения для каждого приложения-функции. Но я хочу создать несколько предупреждений, передав разные показатели. Если у вас есть справочные документы, пожалуйста, поделитесь ссылками, я изучу их. - person Pradeep; 28.12.2020
comment
Вот пример использования dynamic_criteria. Похоже на то, что вы ищете. - person Nancy Xiong; 28.12.2020
comment
Нет, я не ищу dynamic_criteria. - person Pradeep; 28.12.2020
comment
создавать несколько предупреждений, передавая разные показатели. Означает ли это? Не могли бы вы привести пример. Или вы можете принять это и опубликовать в другой теме. - person Nancy Xiong; 28.12.2020
comment
Да, я ищу ту. у вас есть образец кода? - person Pradeep; 28.12.2020
comment
Фактически, вы также можете обратиться к моему текущему коду, просто добавьте variable "logic_apps", затем создайте каждое приложение логики и каждое оповещение о показателях для каждого приложения логики с scopes = [azurerm_logic_app_workflow.example[each.value].id] и критериями соблюдения в другом metric_alert. - person Nancy Xiong; 28.12.2020