【问题标题】:GCP MQL: Calculate ratio from 3 metricsGCP MQL:根据 3 个指标计算比率
【发布时间】:2022-01-19 14:57:19
【问题描述】:

我在我的 GCP 中创建了 3 个指标 1) 成功请求计数 2) 重定向请求计数和 3) 失败请求计数。所有 3 个指标都是从 Kubernetes 日志上基于日志的指标创建的。

这里基本上是一个度量“成功请求”的 Terraform 资源定义。

resource "google_logging_metric" "success_requests" {
  filter      = <<-EOT
    resource.type="k8s_container"
    jsonPayload.message:"Request success"
  EOT
  name        = "success_requests"
  project     = var.gcp_project_id

  metric_descriptor {
    metric_kind = "DELTA"
    unit        = "1"
    value_type  = "INT64"
  }
}

另外两个基本上只是用Request redirectedRequest failed过滤jsonPayload.message

我想用这个公式创建一个显示成功率的仪表板

success_rate = success_requests / (success_requests + redirected_requests + failed_requests)

我成功创建了一个仪表板,使用以下 MQL 显示三个指标。

k8s_container | { 
    t_0:
        metric logging.googleapis.com/user/success_requests;
    t_1: 
        metric logging.googleapis.com/user/redirected_requests;
    t_2: 
        metric logging.googleapis.com/user/failed_requests
} | union

但是我如何创建一个仪表板,用前面提到的公式显示成功率?

【问题讨论】:

    标签: google-cloud-platform terraform google-cloud-monitoring monitoring-query-language


    【解决方案1】:

    要使用指标执行一些算术运算,您需要使用Arithmetic Computation 处理时间序列

    要对两个时间序列求和,请将查询配置为获取两个表 时间序列,加入这些结果,然后调用 add 函数。这 下面的示例说明了一个计算总和的查询 从 Compute Engine 实例读取和写入的字节数:

      fetch gce_instance
      | { metric 'compute.googleapis.com/instance/disk/read_bytes_count'
        ; metric 'compute.googleapis.com/instance/disk/write_bytes_count' }
      | outer_join 0
      | add
    

    总结三个时间序列后可以使用div function.

    以下查询使用 time_shift、join 和 div 来计算每个区域从现在到一周前的平均利用率比率。

    fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
    | group_by [zone], mean(val())
    | {
        ident
      ;
        time_shift 1w
      }
    | join | div
    

    您可以查看更多使用 MQL in this Link. 的查询示例

    您可以查看更多在 MQL in this link. 中实现算术运算符的函数

    【讨论】:

      【解决方案2】:

      我相信您需要的是 external_join 而不是联合。请注意,MQL 的 outer_join 仅支持加入两个指标。但是你可以使用两个outer_join操作来连接三个表,如下所示。

      加入指标后,您可以通过success_requestsfailed_requests 等名称简单地引用它们。

      请注意,outer_join 0,0 对两个表执行完全外连接,如果其中一个输入流在给定时间戳处没有值,则替换为 0。

      例子:

      {
        {k8s_container :: logging.googleapis.com/user/success_requests ;
         k8s_container :: logging.googleapis.com/user/redirected_requests}
        | outer_join 0,0 ;
        k8s_container :: logging.googleapis.com/user/failed_requests
      } 
      | outer_join 0,0
      | value [success_rate: success_requests / (success_requests + redirected_requests + failed_requests)]
      

      【讨论】:

        猜你喜欢
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-03
        • 2020-07-23
        • 1970-01-01
        • 2018-01-28
        相关资源
        最近更新 更多