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:])
标签:over,namespace,prometheus,promql,ready,pod,kube 来源: https://blog.csdn.net/u010918487/article/details/121880512