【问题标题】:Why does Prometheus resolve unresolved alerts?为什么 Prometheus 会解决未解决的警报?
【发布时间】:2021-11-04 21:18:52
【问题描述】:

我在 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

这是相关的 pod,因为可以看出似乎没有任何问题得到解决。

提前感谢您的帮助!

【问题讨论】:

  • 实际上没有解决是什么意思?工作失败是否继续发生?从截图看不像
  • @JasonS 我指的是job4job5job6。由于其他更改,其他作业已成功运行。这些都是失败的。
  • 我应该不会收到关于 job4、job5 和 job6 的任何已解决警报吗?我错了吗? @JasonS

标签: kubernetes prometheus prometheus-alertmanager


【解决方案1】:

kube_job_status_failed 是一个指标,表示在给定时间失败的作业 pod 的数量。表达式increase(kube_job_status_failed[30m]) &gt; 0 提出问题:“过去 30 分钟内是否有新的故障?”如果没有,那就不是真的,即使 Kubernetes API 中仍然存在旧故障。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多