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

Я работаю над созданием оповещений в Azure с помощью сценариев 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
  }

}

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

Сервис вернул ошибку. Status=400 Code="BadRequest" Message="Предупреждения в настоящее время не поддерживаются на уровне нескольких ресурсов для microsoft.web/sites.

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

azurerm_monitor_metric_alert

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

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

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
2 879
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

В этом случае вы должны создать каждый 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
  }
}

Спасибо @Nancy, приведенный выше ответ содержит фрагмент кода для импорта функций и повторения элемента в azurerm_monitor_metric_alert. Но в моем случае я создал функциональные приложения, планы обслуживания приложений, ресурсы хранения и т. д., используя сценарии TF. Итак, не могли бы вы обновить свой ответ в соответствии с ним.

Pradeep 28.12.2020 05:54

Есть ли способ предоставить разные идентификаторы ресурсов свойству scopes? потому что я создал отдельный модуль для azurerm_monitor_metric_alert. Я хочу передать разные идентификаторы ресурсов, имена метрик, имена предупреждений и т. д.

Pradeep 28.12.2020 06:43

Приведенный выше код создает два оповещения о метриках для приложения с двумя функциями с идентификатором динамических ресурсов. scopes = [azurerm_function_app.example[each.value].id]. Разве это не ответ «Как создать одно и то же оповещение для нескольких ресурсов одного типа»? И критерии тому пример. Теперь я меняю его, как ваш код.

Nancy Xiong 28.12.2020 07:02

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

Pradeep 28.12.2020 07:13
Здесь пример использования dynamic_criteria. Похоже на то, что вы ищете.
Nancy Xiong 28.12.2020 07:23

Нет, я не ищу dynamic_criteria.

Pradeep 28.12.2020 07:29

«создать несколько оповещений, передав разные метрики». Это значит? Не могли бы вы привести пример. Или вы можете принять это и опубликовать в другой теме.

Nancy Xiong 28.12.2020 07:30

Да, я ищу тот. у вас есть образец кода?

Pradeep 28.12.2020 07:36

На самом деле, вы также можете обратиться к моему текущему коду, просто добавив variable "logic_apps", затем создайте каждое приложение логики и оповещения каждой метрики для каждого приложения логики с scopes = [azurerm_logic_app_workflow.example[each.value].id] и критериями соблюдения в другом metric_alert.

Nancy Xiong 28.12.2020 08:29

Другие вопросы по теме