如何使用普罗米修斯警报管理器抑制营业时间以外的警报?

Jer*_*erg 4 prometheus prometheus-alertmanager

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

我按照这篇文章设置了一个“假警报”,它会在非工作时间触发并且应该禁止所有其他警报。

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

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.'
Run Code Online (Sandbox Code Playgroud)

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)]'
Run Code Online (Sandbox Code Playgroud)

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

任何想法我做错了什么?

Mic*_*bez 6

问题在于您的目标重新,语法不正确。无需排除QuietHoursinhibition_rule文档中所述。

为了防止警报自我抑制,与规则的目标端和源端均匹配的警报不能被同样适用的警报(包括其自身)抑制。

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

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

inhibit_rules:
- source_match:
    alertname: QuietHours
  target_match:
    component: 'data_source'
Run Code Online (Sandbox Code Playgroud)

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