Оператор суммы по умолчанию равен 0, когда значения не существуют - PullRequest
0 голосов
/ 19 мая 2018

Я использую следующий запрос для расчета стоимости узлов в нашем кластере 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

Это работает, если в кластере есть выгружаемые узлы, потому что есть хотя бы один узелс label_cloud_google_com_gke_preemptible = "true", и, следовательно, первый оператор сумм возвращает значение.

СБОЙ, когда в кластере нет НИКАКИХ предполагаемых узлов, потому что нет узла с label_cloud_google_com_gke_preemptible = "true", и, следовательно, первая сумма не возвращает значения

Можно ли изменить запрос так, чтобы первая сумма вместо него возвращала значение 0?

1 Ответ

0 голосов
/ 19 мая 2018

Вы можете использовать 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
...