如何用单条PromQL查询检测K8s API Server数量下降及全集群宕机?
Kubernetes API Server异常检测的PromQL优化方案
原查询用于检测API Server在线数量变化:
delta(sum(up{job="kubernetes-apiservers"}) by (cluster)[3h:1m])
该查询存在明显局限性:当集群所有API Server全量宕机时,sum(up{job="kubernetes-apiservers"}) by (cluster)对应的时间序列会直接消失,delta函数无法计算出变化值,导致无法触发告警。
以下是可以同时检测API Server数量下降和全部消失场景的合并查询:
delta(sum(up{job="kubernetes-apiservers"}) by (cluster)[3h:1m]) < 0 or absent(sum(up{job="kubernetes-apiservers"}) by (cluster))
各部分作用说明
delta(sum(up{job="kubernetes-apiservers"}) by (cluster)[3h:1m]) < 0:计算3小时内集群API Server在线数量的变化量,当结果小于0时,说明有API Server实例下线,触发告警。absent(sum(up{job="kubernetes-apiservers"}) by (cluster)):当集群所有API Server都宕机时,sum(up)生成的时间序列会消失,absent函数会针对不存在的序列返回1,刚好覆盖这种全量宕机的场景。
内容的提问来源于stack exchange,提问作者Federico Nafria
相关产品推荐
相关产品推荐

