消息队列MQ

pod健康检查promql:pod 处于非ready

本文主要是介绍pod健康检查promql:pod 处于非ready,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

pod 处于running状态并不代表可以正常接收请求,只有当pod对应的status中condition为true才代表能正常接收请求。

以下表达式是在1分钟之内pod处于非ready状态的promql

 

min_over_time(sum by (namespace, pod, prometheus_replica, instance, node) (kube_pod_status_ready{condition!='true', pod =~ '^<.svcName>.*', namespace='<.namespace>'} == 1)[1m:])

根据实际情况替换其中的占位符<.svcName>和<.namespace>。
这里的pod标签取的并不是pod名称,而是pod名称前缀来匹配的,通过正则表达式^<.svcName>.*可以满足当pod有多个副本的情况。

分组的时候如果有多个prometheus副本,则需要加上prometheus_replica,否则算出来的值是prometheus副本数 * 实际值。

min_over_time,需要搭配时间[1m:]使用,表示在1分钟之内,pod处于非ready状态的最小值为1,就说明pod已经不健康了。

如果想要知道pod所在的宿主机信息,比如pod所在的宿主机ip或者节点名称,则可以搭配使用`kube_pod_info`。

完整的promql为:

min_over_time(sum by(namespace,host_ip,pod_ip,instance,pod,node,prometheus_replica)( kube_pod_info{created_by_kind!="Job", namespace = '<.namespace>', pod =~ '^<.svcName>.*'} AND ON (pod, namespace) kube_pod_status_ready{namespace = '<.namespace>', pod =~ '^<.svcName>.*',condition!="true"} == 1)[1m:])

这篇关于pod健康检查promql:pod 处于非ready的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!