为什么 Prometheus 会解决未解决的警报?

Why does Prometheus resolve unresolved alerts?

我在 prometheus 中有作业失败警报,它会在 2 小时后自行解决我收到警报,但警报实际上并未解决。普罗米修斯怎么解决的?你知道的,这只会发生在这个职位提醒中。

职位提醒:

  - alert: Failed Job Status
    expr: increase(kube_job_status_failed[30m]) > 0
    for: 1m
    labels:
      severity: warning
    annotations:
      identifier: '{{ $labels.namespace }} {{ $labels.job_name }}'
      description: '{{ $labels.namespace }} - {{ $labels.job_name }} Failed'

警报示例:

At 3:01 pm
[FIRING:1] Failed Job Status @ <environment-name> <job-name>
<environment-name> - <job-name> Failed

At 5:01 pm
[RESOLVED]
Alerts Resolved:
- <environment-name> - <job-name>: <environment-name> - <job-name> Failed

这里是相关的pods,可以看出好像什么都解决不了

提前感谢您的帮助!

kube_job_status_failed 是表示给定时间失败作业数 pods 的量表。表达式 increase(kube_job_status_failed[30m]) > 0 提出以下问题:“最近 30 分钟内是否有新的故障?”如果没有,那就不是真的,即使旧的故障仍然存在于 Kubernetes API.

此方法的改进是 sum(rate(kube_job_status_failed[5m])) by (namespace, job_name) > 0,加上警报管理器配置 不发送此警报的已解决通知。这是因为作业 pod 失败是一个无法逆转的事件 - 作业可以重试,但 pod 无法取消失败,因此解决仅意味着警报已“过期”或 pods 已被删除。

查看API服务器中记录的当前失败次数的表达式是sum(kube_job_status_failed) by (namespace, job_name) > 0。基于此的警报可以“解决”,但只能通过从 API 中删除 Job 个对象(这并不一定意味着进程已成功...)