2022-07-05 23:04:31

promql例子

具体语句

KubePodNotReady

sum by (namespace, pod) (
    max by(namespace, pod) (
        kube_pod_status_phase{job=~"kube-state-metrics.*", phase=~"Pending|Unknown"}
    ) * on(namespace, pod) group_left(owner_kind) topk by(namespace, pod) (
        1, max by(namespace, pod, owner_kind) (kube_pod_owner{owner_kind!="Job"})
    )
) > 0
  1. 通过 max by 聚合父资源信息
  2. 通过 topk by (1, expr) 来去重,防止右侧匹配有多个条目
  3. max by 获取 pending 和 unknown 状态的pod,然后聚合
  4. 最终通过group_left进行左连接,完成信息组合拼接

可以看出,通过 expr1 * on (label1) group_left (label2) topk by (label1) (1, expr2) 进行信息聚合,是通用模板,适用于各种场景,有效降低表达式报错。

本文链接:https://troy.wang/post/prometheus-promql.html

-- EOF --