You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置Azure排除503的5xx状态码告警遇问题求助

解决方案

错误原因分析

  • 第一个错误:dimension块的values字段要求传入字符串数组,你之前传入的是对象({HttpStatusCode = criteria.value}),不符合类型要求。
  • 第二个错误:dimension块不支持直接将HttpStatusCode/HttpMethod作为参数,这两个是维度名称,需要通过name字段指定。

正确配置实现

通过在每个criteria块下添加两个独立的dimension块,分别指定HttpStatusCode和HttpMethod维度,同时保持用dynamic循环遍历所有目标状态码,即可实现一个告警资源覆盖所有需监控的5xx状态码(排除503):

locals {
  yyy_alert_status_codes = [500, 501, 502, 504, 505, 506, 507, 508, 510, 511]
}

resource "azurerm_monitor_metric_alert" "xxx-d-ar-yyy-failed" {
  provider            = azurerm.dev
  name                = "yyy-exceptions-alert-dev"
  resource_group_name = azurerm_resource_group.xxx-d-rg-yyy.name
  scopes              = [azurerm_linux_web_app.xxx-d-app-yyy]
  description         = "触发所有5xx状态码(排除503)的告警"
  severity            = 1

  dynamic "criteria" {
    for_each = local.yyy_alert_status_codes
    content {
      metric_namespace = "Microsoft.Web/sites"
      metric_name      = "Http5xx"
      
      # 匹配当前循环的目标状态码
      dimension {
        name     = "HttpStatusCode"
        operator = "Include"
        values   = [toset([criteria.value])]
      }

      # 匹配所有HTTP方法
      dimension {
        name     = "HttpMethod"
        operator = "Include"
        values   = ["*"]
      }

      aggregation = "Total"
      operator    = "GreaterThan"
      threshold   = 0
    }
  }

  action {
    action_group_id = azurerm_monitor_action_group.xxx-d-ag-yyy.id
  }
}

关键说明

  • 每个criteria块对应一个状态码,包含两个维度配置,符合Azure Metric Alert的维度规则。
  • toset([criteria.value])确保数字类型的状态码被转为字符串数组,满足values字段的类型要求。
  • 全程用dynamic循环复用配置逻辑,无需为每个状态码单独创建告警资源。

内容的提问来源于stack exchange,提问作者Svein Terje Gaup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:42:52