当值不存在时,默认求和运算符为 0

Pun*_*wal 3 google-kubernetes-engine prometheus promql

我正在使用以下查询来计算我们 GKE 集群中节点的成本(为可读性添加了新行)

sum(
  kube_node_status_capacity_cpu_cores * on(node) group_left(label_cloud_google_com_gke_nodepool) 
    kube_node_labels{
      label_cloud_google_com_gke_preemptible = "true"
    }
) * 5.10 + 
sum(
  kube_node_status_capacity_cpu_cores * on(node) group_left(label_cloud_google_com_gke_nodepool) 
    kube_node_labels{
      label_cloud_google_com_gke_preemptible = ""
    }
) * 16.95
Run Code Online (Sandbox Code Playgroud)

如果集群具有可抢占节点,则它有效,因为至少有一个节点,label_cloud_google_com_gke_preemptible = "true"因此第一个 sum 运算符返回一个值。

当集群没有抢先节点时它失败,因为没有节点,label_cloud_google_com_gke_preemptible = "true"因此第一个总和不返回值

是否可以修改查询,以便第一个总和返回 0 值?

bri*_*zil 16

or如果一个值不存在,您可以使用插入一个值:

  (
      sum(
          kube_node_status_capacity_cpu_cores 
        * on(node) group_left(label_cloud_google_com_gke_nodepool) 
          kube_node_labels{label_cloud_google_com_gke_preemptible = "true"}
      ) * 5.10 
    or
      vector(0)
  )
+ 
  sum(
      kube_node_status_capacity_cpu_cores 
    * on(node) group_left(label_cloud_google_com_gke_nodepool) 
      kube_node_labels{label_cloud_google_com_gke_preemptible = ""}
  ) * 16.95
Run Code Online (Sandbox Code Playgroud)

  • 你,我的朋友,是个天才! (3认同)