You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prometheus查询中引用记录规则值作为另一查询的过滤条件

解决方案

核心问题说明

你当前的用法存在两处核心错误:

  • PromQL查询表达式的标签匹配段(大括号内部的过滤规则)不支持Go模板语法,{{ job_cronjob:job:name}} 这类写法只会被识别为普通字符串,不会解析为你定义的记录规则值。模板语法仅可用于告警规则的 annotations 和 labels 字段。
  • 你定义的 job_cronjob:job:name 记录规则的计算结果是时间戳数值,本身也不是CronJob生成的Job名称后缀,无法用于拼接job_name过滤条件。

正确实现方式

你不需要额外定义记录规则,直接通过PromQL的正则匹配+向量关联逻辑即可实现需求:筛选出指定CronJob生成的、最近一次调度后的失败任务。
修改后的完整PrometheusRule配置如下:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: cron-job-alerts
  namespace: openshift-monitoring
  labels:
    openshift.io/prometheus-rule-evaluation-scope: leaf-prometheus
spec:
  groups:
  - name: kube-cron
    rules:
    - alert: CronJobStatusFailed
      expr: |
        # 匹配目标CronJob生成的所有失败Job
        kube_job_failed{
          namespace="dev-v1",
          condition="true",
          job_name=~"weekly-availability-reporting-cronjob-.*"
        } == 1
        # 关联Job创建时间,仅保留最近一次调度后生成的Job,避免历史失败任务重复告警
        * on(namespace, job_name) group_left()
        (
          kube_job_created{namespace="dev-v1"}
          >= on(namespace) group_left()
          kube_cronjob_status_last_schedule_time{
            namespace="dev-v1",
            cronjob="weekly-availability-reporting-cronjob"
          }
        )
      for: 1m
      annotations:
        description: 'CronJob weekly-availability-reporting-cronjob 最近一次运行失败'

提示:如果你的集群指标中CronJob名称对应的标签名为label_cronjob,将kube_cronjob_status_last_schedule_time的过滤条件中cronjob=替换为label_cronjob=即可;如果Job指标自带所属CronJob的标签,还可以直接用该标签过滤,省略job_name的正则匹配规则。

内容的提问来源于stack exchange,提问作者Whiat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:45:04