【问题标题】:How to inhibit alerts outside business hours with prometheus alertmanager?如何使用 prometheus alertmanager 在工作时间以外抑制警报?
【发布时间】:2019-08-01 08:54:21
【问题描述】:

我们的应用程序依赖于仅在工作时间处于活动状态的数据源。我们在 Prometheus 中设置了警报,以便在流干涸时通知我们。但是,我们不希望在工作时间以外收到“虚假”警​​报。

我关注this post 设置了一个“假警报”,该警报会在工作时间以外触发,并且应该禁止所有其他警报。

设置如下所示。在普罗米修斯中:

rules:

# This special alert will be used to inhibit all other alerts outside business hours
- alert: QuietHours
  expr: day_of_week() == 6 or day_of_week() == 0 or europe_amsterdam_hour >= 18 or europe_amsterdam_hour <= 7
  for: 1m
  labels:
    notification: page
    severity: critical
  annotations:
    description: 'This alert fires during quiet hours. It should be blackholed by Alertmanager.'

europe_amsterdam_hour 函数被定义为规则,为简洁起见,本示例中省略了。

在警报管理器中:

routes:
# ensure to forward to blackhole receiver during quiet hours
- match:
    alertname: QuietHours
  receiver: blackhole

inhibit_rules:
- source_match:
    alertname: QuietHours
  target_match_re:
    alertname: '[^(QuietHours)]'

我验证了触发 QuietHours 警报的逻辑是有效的。它在工作时间后很好地触发并在工作时间解决。但是,抑制部分似乎不起作用,因为当 QuietHours 处于活动状态时,我仍然会收到其他警报。我找不到一个很好的资源来详细解释抑制配置。

任何想法我做错了什么?

【问题讨论】:

  • 您确定您正在使用的正则表达式吗?从技术上讲,它的意思是“匹配不在列表中的单个字符(QuietHors)”
  • Thnx Elad,我知道它确实并不完美,但如果不支持前瞻语法,则很难进行负匹配。

标签: prometheus prometheus-alertmanager


【解决方案1】:

问题在于您的目标 re,语法不正确。无需像 inhibit_rule 文档中所述排除 QuietHours

为防止警报自我抑制,同时匹配两者的警报 规则的目标端和源端不能被警报禁止 对于它也是如此(包括它自己)。

正则表达式应该只匹配与您的数据源相关的警报。

添加标签来识别与源相关的警报以禁止和使用它而不是使用警报名称更容易。

inhibit_rules:
- source_match:
    alertname: QuietHours
  target_match:
    component: 'data_source'

这样,任何与源相关的新警报都将被禁止。

【讨论】:

  • 谢谢迈克尔,我希望在没有额外标签的情况下做到这一点,并正在寻找一种匹配所有警报的方法
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
  • 2021-11-06
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多