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

CloudRun 4xx占比超阈值但StackDriver未生成告警事件问题

问题原因

主要由3个配置错误共同导致:

  • MQL聚合函数使用错误
    request_count是请求计数指标,你使用max(val())仅会取1分钟窗口内的最大单采样点计数值,而非窗口内的总请求数,计算得到的比例完全不符合真实的4xx请求占比。
  • 阈值单位配置逻辑错误
    你设置的0.05 '10^2.%'等价于阈值为0.05%(万分之五),和你预期的5%阈值差了100倍。MQL的单位规则下会将带百分比单位的数值转换为无量纲比值进行比较:0.05 * 1% = 0.0005,远低于你实际需要的0.05(即5%)阈值。
  • 告警持续时长配置冗余
    你在MQL中已经按1分钟粒度聚合数据,Terraform中额外设置duration = "60s",要求条件连续满足2个1分钟窗口才会触发告警,若超阈值场景仅持续1分钟也不会生成事件。

解决方法

修改你的Terraform配置中的MQL查询和duration参数即可:

resource "google_monitoring_alert_policy" "cloudrun_http_4xx_errors" {
  display_name = "CloudRun 4xx errors"

  documentation {
    content = "CloudRun returned 4xx for more than 5% of its requests."
  }
  combiner = "OR"

  notification_channels = var.environment == "dev" ? [] : [
  google_monitoring_notification_channel.pubsubchannel.name]
  conditions {
    display_name = "4xx errors"
    condition_monitoring_query_language {
      query    = <<EOT
fetch cloud_run_revision::run.googleapis.com/request_count
| { filter metric.response_code_class = '4xx'
  ; ident }
| group_by [resource.service_name], 1m, sum(val())
| ratio
| condition val() > 0.05
EOT
      duration = "0s"
    }
  }
}

修改点说明:

  • 将聚合函数从max(val())改为sum(val()),统计1分钟窗口内的总请求数,计算得到的占比才符合预期
  • 去掉阈值的百分比单位,直接判断val() > 0.05,对应比值5%,和需求一致
  • 将duration改为0s,只要单1分钟窗口满足阈值就触发告警,若需要连续N分钟超标再触发可自行调整该参数

额外验证项

如果修改后还是没有收到通知,可检查:

  • 若部署环境为dev,你配置的通知通道为空,告警事件会在控制台展示但不会推送通知
  • 检查告警策略是否已成功同步生效,Terraform apply后可在云监控控制台查看策略的配置是否和预期一致

内容的提问来源于stack exchange,提问作者Mirco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:03