kubernetes - 有没有一种方法可以通过字符串值过滤度量标准,该字符串值的一部分来自普罗米修斯查询中另一个查询的结果?

标签 kubernetes prometheus promql kubernetes-cronjob

我想在最近的cronjob作业失败时得到警报。专家kube_job_status_failed{job_name=~"cronjobname.*"}==1在大多数时间都有效。但是,如果一项工作失败并保留下来,即使下一项工作成功了,我仍然会收到警报,因为普罗米修斯有两条记录,其中一条是失败记录,另一条是成功记录。

我发现我可以从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中指示的方法进行操作。另一种方法是使用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.'

关于kubernetes - 有没有一种方法可以通过字符串值过滤度量标准,该字符串值的一部分来自普罗米修斯查询中另一个查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58002943/

相关文章:

grafana - 如何在 Grafana 中动态设置 Y 轴的最大值

prometheus - 如何在普罗米修斯中按两个标签过滤?

prometheus - 和具有相同标签的两个指标的运算符 - promql

prometheus - Loki Ruler 未向警报经理发送警报

kubernetes - 如何修复第二个节点的 weave-net CrashLoopBackOff?

kubernetes - Calico 等待 etcd 报错 Kubespray

kubernetes - 从 Dataproc 集群访问 GKE 集群中的 Postgres

prometheus - 如何使用 prometheus 和 node_exporter 获得服务器的整体正常运行时间

prometheus - PromQL的rate()函数的理解

kubernetes - 如何将文件内容传递给Helm values.yaml