1

问题:如果时间序列超过阈值,则不会创建任何事件。

如果 5% 的请求在 CloudRun 中返回 4xx,我想收到警报。我使用以下查询创建了一个警报策略:

fetch cloud_run_revision::run.googleapis.com/request_count
| { filter metric.response_code_class = '4xx'
  ; ident }
| group_by [resource.service_name], 1m, max(val())
| ratio
| condition val() > 0.05 '10^2.%'

在云控制台中,我可以看到实际上有超过阈值的时间序列:

Cloud Console 屏幕截图:图表

期望是,事件被创建。然而,这种情况并非如此。

Cloud Console 屏幕截图:事件

为了完整起见:我使用 terraform 创建了警报:

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, max(val())
| ratio
| condition val() > 0.05 '10^2.%'
EOT
      duration = "60s"
    }
  }
}
4

1 回答 1

1

我同意@c69。

我想总结几点:

  1. 我们需要增加持续时间,因为它会增加对齐周期,这将有助于进一步回顾以包括已经摄取的数据。

  2. 我们应该使用持续时间或持续时间窗口来防止由于单次测量而满足条件。在 Google Cloud Console 中,使用以下字段来配置持续时间:

    • 旧界面:警报策略配置 窗格的For字段。
    • 预览界面:配置触发步骤中的高于阈值的时间(或低于
      阈值
      的时间)字段。
  3. 因此,我们应该将持续时间窗口设置得足够长,以最大限度地减少误报,但又要足够短,以确保及时打开事件。

您可以参考警报行为以获取更多详细信息。

此外,对于 MQL,警报策略也有些不同。MQL 查询,警报策略条件包括两个值:

必须满足条件的输入时间序列数。该值可以是以下任何一项:

  • 单个时间序列。

  • 特定数量的时间序列。

  • 时间序列的百分比。

  • 所有时间序列。

警报状态的持续时间,即警报条件必须持续评估为真的时间。

在 MQL 中,策略中必须只有条件。您不能在基于 MQL 的警报策略中使用多个条件。

有关更多详细信息,请参阅使用 MQL 的警报策略

于 2021-09-22T17:19:16.210 回答