当 pod 运行 时间过长时 Prometheus 发出警报
Prometheus alerting when a pod is running for too long
我 运行 遇到了一些看似简单的问题。
我的场景:
我有一个 k8s 作业,它可以随时 运行(不是 cronJob),它会创建一个 pod 来执行一些任务。一旦 Pod 执行了它的任务,它就完成了,从而完成了生成它的作业。
我想要的:
如果 pod 处于 运行ning 状态超过 1 小时,我想通过 prometheus 发出警报,表明任务花费了太多时间。
我有兴趣仅在所附图像中用箭头表示的持续时间超过 1 小时时发出警报。当 pod 不再 运行ning.
时也没有触发警报
我尝试了什么:
以下 prometheus 指标,它是一个即时向量,可以是 0(pod 不是 运行ning)或 1(pod 是 运行ning):
kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}
我想我尝试将此指标与以下公式一起使用来计算指标在一天中为一的持续时间
(1 - avg_over_time(kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}[1d])) * 86400 > 3600
因为这些 pods 来来去去,并不总是存在,所以我遇到了以下问题:
- 上面的expr从86400值开始,最终下降一次
容器正在 运行ning 这会触发警报
- pod 最终消失了,我不想为 pods 发送假警报,这些警报不再是 运行ning(尽管他们接管了 1 小时到 运行)
感谢@HelloWorld 的建议,我认为这将是实现我想要的最佳解决方案:
(sum_over_time(kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}[1d:1s]) > 3600) and (kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}==1)
- 计算 pods 过去 运行 的次数 day/6h/3h 并验证是否超过 1h(3600s)
和
- 检查 pod 是否仍然 运行 - 这样它就不会考虑旧的 pods 或者 pod 是否终止。
我 运行 遇到了一些看似简单的问题。
我的场景: 我有一个 k8s 作业,它可以随时 运行(不是 cronJob),它会创建一个 pod 来执行一些任务。一旦 Pod 执行了它的任务,它就完成了,从而完成了生成它的作业。
我想要的:
如果 pod 处于 运行ning 状态超过 1 小时,我想通过 prometheus 发出警报,表明任务花费了太多时间。
我有兴趣仅在所附图像中用箭头表示的持续时间超过 1 小时时发出警报。当 pod 不再 运行ning.
我尝试了什么: 以下 prometheus 指标,它是一个即时向量,可以是 0(pod 不是 运行ning)或 1(pod 是 运行ning):
kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}
我想我尝试将此指标与以下公式一起使用来计算指标在一天中为一的持续时间
(1 - avg_over_time(kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}[1d])) * 86400 > 3600
因为这些 pods 来来去去,并不总是存在,所以我遇到了以下问题:
- 上面的expr从86400值开始,最终下降一次 容器正在 运行ning 这会触发警报
- pod 最终消失了,我不想为 pods 发送假警报,这些警报不再是 运行ning(尽管他们接管了 1 小时到 运行)
感谢@HelloWorld 的建议,我认为这将是实现我想要的最佳解决方案:
(sum_over_time(kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}[1d:1s]) > 3600) and (kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}==1)
- 计算 pods 过去 运行 的次数 day/6h/3h 并验证是否超过 1h(3600s) 和
- 检查 pod 是否仍然 运行 - 这样它就不会考虑旧的 pods 或者 pod 是否终止。