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

pod 处于running状态并不代表可以正常接收请求,只有当pod对应的status中condition为true才代表能正常接收请求。
pod健康检查promql:pod 处于非ready
以下表达式是在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:])

上一篇:微信各种BUG、技巧汇总


下一篇:KubeCon 2021|使用 eBPF 代替 iptables 优化服务网格数据面性能