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

如何用Prometheus获取K8s运行中Job时长并配置告警?

Kubernetes Job长时间运行告警配置方案

要监控运行中的Job时长,确实可以借助PromQL的time()函数来计算,核心思路是用当前时间减去Job的启动时间,同时过滤出未完成的Job。

核心PromQL查询

针对运行中超过指定时长的Job,使用以下查询:

time() - kube_job_status_start_time > 39600 and absent(kube_job_status_completion_time)

查询拆解

  • time():Prometheus服务器当前的Unix时间戳
  • kube_job_status_start_time:Kubernetes Job启动时记录的Unix时间戳(由kube-state-metrics提供)
  • absent(kube_job_status_completion_time):仅保留未完成的Job——已完成的Job会生成kube_job_status_completion_time指标,未完成的则没有这个指标
  • 整体逻辑:筛选出运行时长超过39600秒(11小时)且仍在运行的Job

完整告警规则示例

如果要配置Prometheus告警规则,可以写成这样:

groups:
- name: kubernetes-jobs
  rules:
  - alert: JobLongRunning
    expr: time() - kube_job_status_start_time > 39600 and absent(kube_job_status_completion_time)
    for: 5m  # 持续5分钟满足条件才触发告警,避免误报
    labels:
      severity: warning
    annotations:
      summary: "Job {{ $labels.job_name }} ({{ $labels.namespace }}) 运行超时"
      description: "Job 已运行 {{ humanizeDuration(time() - kube_job_status_start_time) }},超过阈值 11 小时"

注意事项

  • 确保集群中已部署kube-state-metrics,且Prometheus已配置采集该服务的指标(这是获取Job状态指标的前提)
  • 可根据需求调整阈值(比如把39600换成你需要的秒数),或添加namespace过滤(比如and namespace="production")
  • 如果Job存在重启机制,kube_job_status_start_time会自动更新为最新的启动时间,无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:41:02