【问题标题】:Using regex in gcp monitoring filter在 gcp 监控过滤器中使用正则表达式
【发布时间】:2021-03-23 03:24:05
【问题描述】:

我正在尝试监控一个实例组并拥有一个基于正则表达式的过滤器。查询看起来像这样

fetch instance_group
| metric 'compute.googleapis.com/instance_group/size'
| filter (resource.instance_group_name =~ 'nat-ecmp-[1|2]')
| group_by 1m, [value_size_mean: mean(value.size)]
| every 1m

现在我正在尝试在 terraform 中做同样的事情。

这是我到现在才想到的

condition_threshold {
      filter   = <<-EOF
                resource.type=\"instance_group\"
                metric.type=\"compute.googleapis.com/instance_group/size\"
                resource.label."instance_group_name"=~"nat-ecmp-[1|2]"
               EOF
      duration        = "300s"
      comparison      = "COMPARISON_LT"
      threshold_value = "1"

但这会产生错误

Error creating AlertPolicy: googleapi: Error 400: Field alert_policy.conditions[0].condition_threshold.filter had an invalid value of "resource.type="instance_group"
metric.type="compute.googleapis.com/instance_group/size"
resource.label."instance_group_name"=~"nat-ecmp-[1|2]"
": Could not parse filter "resource.type=\"instance_group\"\nmetric.type=\"compute.googleapis.com/instance_group/size\"\nresource.label.\"instance_group_name\"=~\"nat-ecmp-[1|2]\"\n"; syntax error at line 3, column 37, token '=~'

我也试过了

    condition_threshold {
      filter   = <<-EOF
                resource.type=\"instance_group\"
                metric.type=\"compute.googleapis.com/instance_group/size\"
                resource.label.\"instance_group_name\"=~\"nat-ecmp-[1|2]\"
               EOF
      duration        = "300s"
      comparison      = "COMPARISON_LT"

但我得到了相同的结果。我在这里错过了什么?

【问题讨论】:

    标签: terraform terraform-provider-gcp


    【解决方案1】:

    我在多次阅读 Google 文档here 后找到了我的解决方案。

    你需要使用:

    metric.labels.instance_name = monitoring.regex.full_match("^gke-(hipster|nginx).*")
    

    我的用例的完整示例是:

    resource "google_monitoring_alert_policy" "alert_policy" {
      display_name = "Dataflow fail alert policy"
      combiner     = "AND"
      conditions {
        display_name = "test condition"
        condition_threshold {
          trigger {
            percent = null
            count   = 1
          }
          aggregations {
            per_series_aligner   = "ALIGN_MAX"
            group_by_fields      = []
            alignment_period     = "3600s"
            cross_series_reducer = "REDUCE_NONE"
          }
          threshold_value      = 0
          duration             = "300s"
          comparison           = "COMPARISON_GT"
          filter               = "metric.type=\"logging.googleapis.com/user/dev_dataproc_job_error\" AND resource.type=\"cloud_dataproc_job\" AND resource.label.job_id!=monitoring.regex.full_match(\"foo_bar.*\")"
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多