Kubernetes 有没有一种方法可以通过字符串值过滤度量值,该字符串值的一部分来自prometheus查询中另一个查询的结果?

Kubernetes 有没有一种方法可以通过字符串值过滤度量值,该字符串值的一部分来自prometheus查询中另一个查询的结果?,kubernetes,prometheus,promql,kubernetes-cronjob,Kubernetes,Prometheus,Promql,Kubernetes Cronjob,我想在cronjob的最近作业失败时获得警报。专家 kube\u job\u status\u failed{job\u name=~“cronjobname.*}==1在大部分时间都有效。但是,如果一个作业失败并被保留,即使下一个作业成功,我仍然会收到警报,因为普罗米修斯有两个记录,一个是失败记录,另一个是成功记录 我发现我可以从kube\u cronjob\u status\u last\u schedule\u time{cronjob=“cronjobname”}获取最新的作业时间戳,然

我想在cronjob的最近作业失败时获得警报。专家
kube\u job\u status\u failed{job\u name=~“cronjobname.*}==1
在大部分时间都有效。但是,如果一个作业失败并被保留,即使下一个作业成功,我仍然会收到警报,因为普罗米修斯有两个记录,一个是失败记录,另一个是成功记录

我发现我可以从
kube\u cronjob\u status\u last\u schedule\u time{cronjob=“cronjobname”}
获取最新的作业时间戳,然后使用
kube\u job\u status\u failed{job\u 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)
- 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)
每个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)
- 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.'

谢谢@Michael。这就是我需要的。