有没有办法通过字符串值过滤指标,其中一部分来自普罗米修斯查询中另一个查询的结果?
Is there a way to filter metric by a string value a part of which comes from the result of another query in prometheus query?
我想在最近的 cronjob 作业失败时收到警报。表达式
kube_job_status_failed{job_name=~"cronjobname.*"}==1
大部分时间都有效。但是如果一个job失败了还保留着,即使下一个job成功了,我还是会收到alert,因为prometheus里面有两条记录,一条是失败记录,一条是成功记录。
我发现我可以从kube_cronjob_status_last_schedule_time{cronjob="cronjobname"}
获取最新的作业时间戳,然后使用kube_job_status_failed{job_name="cronjobname-TIMESTAMP"}
查询最后的作业状态。
我想知道我们是否有办法在一个查询中连接第一个查询结果的 jobname
并在第二个查询中过滤?像
kube_job_status_failed{job_name=string_concatenate("cronjobname-", kube_cronjob_status_last_schedule_time{cronjob="cronjobname"})}
使用 promql,您将无法像您描述的那样拥有某些东西。此外,我不确定最后的调度时间是否总是与作业开始时间相同;如果某处运行缓慢或重新安排示例。
您可以按照this article. An alternative one would be using the job metrics中给出的方法来确定:
每个 cronjob 的最后一个失败作业的时间戳
- record: job_cronjob:kube_job_status_start_time:last_failed
expr: max((kube_job_status_start_time AND kube_job_status_failed == 1)
* ON(job,namespace) GROUP_LEFT
kube_job_labels{label_cronjob!=""}
) BY(label_cronjob)
每个 cronjob 的最后一个成功作业的时间戳
- record: job_cronjob:kube_job_status_start_time:last_suceeded
expr: max((kube_job_status_start_time AND kube_job_status_suceeded == 1)
* ON(job,namespace) GROUP_LEFT
kube_job_labels{label_cronjob!=""}
) BY(label_cronjob)
如果失败的比成功的更晚,则发出警报:
- alert: CronJobStatusFailed
expr: job_cronjob:kube_job_status_start_time:last_failed
> job_cronjob:kube_job_status_start_time:last_suceeded
for: 1m
annotations:
description: '{{ $labels.label_cronjob}} last run has failed.'
我想在最近的 cronjob 作业失败时收到警报。表达式
kube_job_status_failed{job_name=~"cronjobname.*"}==1
大部分时间都有效。但是如果一个job失败了还保留着,即使下一个job成功了,我还是会收到alert,因为prometheus里面有两条记录,一条是失败记录,一条是成功记录。
我发现我可以从kube_cronjob_status_last_schedule_time{cronjob="cronjobname"}
获取最新的作业时间戳,然后使用kube_job_status_failed{job_name="cronjobname-TIMESTAMP"}
查询最后的作业状态。
我想知道我们是否有办法在一个查询中连接第一个查询结果的 jobname
并在第二个查询中过滤?像
kube_job_status_failed{job_name=string_concatenate("cronjobname-", kube_cronjob_status_last_schedule_time{cronjob="cronjobname"})}
使用 promql,您将无法像您描述的那样拥有某些东西。此外,我不确定最后的调度时间是否总是与作业开始时间相同;如果某处运行缓慢或重新安排示例。
您可以按照this article. An alternative one would be using the job metrics中给出的方法来确定:
每个 cronjob 的最后一个失败作业的时间戳
- record: job_cronjob:kube_job_status_start_time:last_failed
expr: max((kube_job_status_start_time AND kube_job_status_failed == 1)
* ON(job,namespace) GROUP_LEFT
kube_job_labels{label_cronjob!=""}
) BY(label_cronjob)
每个 cronjob 的最后一个成功作业的时间戳
- record: job_cronjob:kube_job_status_start_time:last_suceeded
expr: max((kube_job_status_start_time AND kube_job_status_suceeded == 1)
* ON(job,namespace) GROUP_LEFT
kube_job_labels{label_cronjob!=""}
) BY(label_cronjob)
如果失败的比成功的更晚,则发出警报:
- alert: CronJobStatusFailed
expr: job_cronjob:kube_job_status_start_time:last_failed
> job_cronjob:kube_job_status_start_time:last_suceeded
for: 1m
annotations:
description: '{{ $labels.label_cronjob}} last run has failed.'