kubernetes - 有没有办法通过字符串值过滤指标,其中一部分来自普罗米修斯查询中另一个查询的结果?
问题描述
我想在最近的 cronjob 作业失败时收到警报。expr
kube_job_status_failed{job_name=~"cronjobname.*"}==1
大部分时间都有效。但是如果一个作业失败并保留,即使下一个作业成功,我仍然会收到警报,因为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,您将无法拥有您描述的方式。此外,我不确定最后的计划时间是否始终与作业开始时间相同;例如,如果某处出现缓慢或重新安排的情况。
您可以按照本文中指出的方法进行。另一种方法是使用工作指标来确定:
每个 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.'
推荐阅读
- r - 标准化 R 中的定性变量以执行 glm、glm.nb 和 lm
- apache-kafka - 消费者控制台中的引导服务器与动物园管理员参数
- python - Python3将png数据从html画布写入文件
- javascript - 为什么使用 webpack 开发服务器时从 my_domain.com 加载 webpack 块而不是从 localhost:8080 加载?
- ruby - How can I sort by index in Daru?
- scala - Keywords lookup in Spark Scala based on position
- php - 无法编辑 moodle 密码策略
- c - 需要一种快速方法将大量双精度转换为字符串
- maven-plugin - 自定义 Maven 插件开发 - getArtifacts 为空,但包含依赖项
- javascript - 导入的函数未定义