Я работаю над созданием оповещений в 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.
Справочные ссылки:
Поддерживаемые показатели и размеры
Итак, может ли кто-нибудь предложить мне по этому вопросу?
Как показывает ошибка, тип ресурса 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
}
}
Есть ли способ предоставить разные идентификаторы ресурсов свойству scopes
? потому что я создал отдельный модуль для azurerm_monitor_metric_alert
. Я хочу передать разные идентификаторы ресурсов, имена метрик, имена предупреждений и т. д.
Приведенный выше код создает два оповещения о метриках для приложения с двумя функциями с идентификатором динамических ресурсов. scopes = [azurerm_function_app.example[each.value].id]
. Разве это не ответ «Как создать одно и то же оповещение для нескольких ресурсов одного типа»? И критерии тому пример. Теперь я меняю его, как ваш код.
Приведенный выше ответ содержит фрагмент кода для создания одного оповещения для каждого приложения-функции. Но я хочу создать несколько предупреждений, передав разные показатели. Если у вас есть какие-либо справочные документы, пожалуйста, поделитесь ссылками, я посмотрю на них.
Нет, я не ищу dynamic_criteria
.
«создать несколько оповещений, передав разные метрики». Это значит? Не могли бы вы привести пример. Или вы можете принять это и опубликовать в другой теме.
Да, я ищу тот. у вас есть образец кода?
На самом деле, вы также можете обратиться к моему текущему коду, просто добавив variable "logic_apps"
, затем создайте каждое приложение логики и оповещения каждой метрики для каждого приложения логики с scopes = [azurerm_logic_app_workflow.example[each.value].id]
и критериями соблюдения в другом metric_alert.
Спасибо @Nancy, приведенный выше ответ содержит фрагмент кода для импорта функций и повторения элемента в
azurerm_monitor_metric_alert
. Но в моем случае я создал функциональные приложения, планы обслуживания приложений, ресурсы хранения и т. д., используя сценарии TF. Итак, не могли бы вы обновить свой ответ в соответствии с ним.