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

如何基于kube-state-metrics为Kubernetes CronJob配置Prometheus告警

Kubernetes CronJob Prometheus告警配置(基于kube-state-metrics)

场景1:CronJob失败告警(含自动恢复与重复通知)

问题分析

你之前使用的count_over_time(kube_job_failed[1m]) > 0无法自动恢复告警,原因是这个表达式统计的是1分钟时间窗口内出现过的失败样本数——即使当前Job已经恢复正常,只要窗口内存在过失败记录,结果就会持续大于0,导致告警无法自动解除。

解决方案

改用kube_job_status_failed指标(kube-state-metrics提供),该指标值为1时表示对应Job当前处于失败状态;当Job被清理或状态恢复后,指标会消失或变为0,告警会自动恢复。

Prometheus告警规则配置

groups:
- name: cronjob-alerts
  rules:
  - alert: CronJobExecutionFailed
    expr: kube_job_status_failed{job="kube-state-metrics"} == 1
    for: 1m  # 持续失败1分钟后触发告警
    labels:
      severity: critical
    annotations:
      summary: "CronJob {{ $labels.cronjob }} 执行失败"
      description: "命名空间 {{ $labels.namespace }} 中,CronJob {{ $labels.cronjob }} 创建的Job {{ $labels.job_name }} 已持续失败1分钟。"

Alertmanager重复通知配置

通过Alertmanager控制告警重复发送间隔,确保1分钟后仍未恢复则每5分钟推送一次:

route:
  group_by: ['alertname', 'cronjob', 'namespace']
  group_wait: 30s  # 首次告警等待30秒聚合同组告警
  group_interval: 5m  # 同组告警后续通知间隔
  repeat_interval: 5m  # 单个告警重复通知间隔

场景2:CronJob运行时长超过1分钟告警

利用kube_job_start_time指标(记录Job启动的Unix时间戳),计算当前时间与启动时间的差值,判断是否超过1分钟阈值。

Prometheus告警规则配置

groups:
- name: cronjob-alerts
  rules:
  - alert: CronJobLongRunning
    expr: time() - kube_job_start_time{job="kube-state-metrics"} > 60
    for: 1m  # 持续运行超1分钟触发告警
    labels:
      severity: warning
    annotations:
      summary: "CronJob {{ $labels.cronjob }} 运行超时"
      description: "命名空间 {{ $labels.namespace }} 中,CronJob {{ $labels.cronjob }} 创建的Job {{ $labels.job_name }} 已运行 {{ humanizeDuration(time() - $value) }},超过1分钟阈值。"

关键说明

  • CronJob创建的Job会自动携带cronjob=<你的CronJob名称>标签,因此告警规则中可以通过$labels.cronjob直接关联到对应的CronJob。
  • humanizeDuration是Prometheus内置函数,用于将秒数转换为易读的时长格式(如1分30秒)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:10