【发布时间】:2020-09-22 08:55:56
【问题描述】:
对于一个看似简单的问题,我遇到了一些麻烦。
我的场景: 我有一个可以随时运行的 k8s 作业(不是 cronJob),它反过来创建了一个 pod 来执行一些任务。一旦 pod 执行了它的任务,它就完成了,从而完成了产生它的作业。
我想要的: 如果 pod 处于运行状态超过 1 小时,我想通过 prometheus 发出警报,表明任务花费了太多时间。 仅当附图中箭头表示的持续时间超过 1 小时时,我才有兴趣提醒。当 pod 不再运行时也不会触发任何警报。
我尝试了什么: 以下 prometheus 度量,它是一个即时向量,可以是 0(pod 未运行)或 1(pod 正在运行):
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
因为这些 pod 来来去去,并不总是存在,所以我遇到了以下问题:
- 上面的expr从86400这个值开始,最终下降一次 容器正在运行,这将触发警报
- Pod 最终会消失,我不想为不再运行的 Pod 发送虚假警报(尽管它们需要 1 多小时才能运行)
【问题讨论】:
-
你可以试试这个:
sum_over_time(kube_pod_status_ready{condition="true",pod_name=~".+POD-A.+"}[1h:1s]) == 3600吗? -
@HelloWorld 谢谢。这看起来是迄今为止最好的解决方案。我将对此发表完整的答案。
标签: docker kubernetes prometheus grafana