Prometheus 选择性地抑制警报

Posted

技术标签:

【中文标题】Prometheus 选择性地抑制警报【英文标题】:Prometheus inhibit alert selectively 【发布时间】:2021-11-06 04:33:30 【问题描述】:

我需要创建一个警报系统,它必须在满足特定条件(例如 Tomcat 宕机)时发出通知。 部署在不同位置(具有不同时区)的多个远程服务器托管 Tomcat 服务并由 Prometheus 监控。 我只需要在当地时间 8:05 到 22:45 收到警报,所以我按照以下步骤进行:

    定义了一个自定义规则“check_system_time_in_interval”,如果服务器本地时间在 [8:05,22:45],则返回 1,否则返回 0 使用规则 1) 在“prometheus.rule.yml”中定义警报在非工作时间禁止警报
- name: quite_hours
  rules:
    - alert: Inhibit alert during NO working hours
      expr: check_system_time_in_interval==0
      labels:
        notification: none
        severity: critical
    在“alertmanager.yml”文件中定义了一个新的禁止规则,当监控的服务器时间不在该时间间隔内时,该规则禁止警报TOMCAT down(当 TOMCAT 服务停止服务时触发警报)李>
inhibit_rules:
- source_match:
    alertname: Inhibit alert during NO working hours
  target_match_re:
    alertname: (TOMCAT down)

TOMCAT down 使用自定义规则“tomcat_up”检查 Tomcat 是否已启动。 现在它似乎工作得很好但是使用这种方法我会因为时区而遇到问题:即使被监控的服务器的本地时间在 [8:05,22:45] 内,我也需要得到通知,即使 Prometheus 服务器位于到不同的时区。

一个简单的解决方案是仅当 check_system_time_in_interval 时间序列的“instance”标签等于 TOMCAT down 的“instance”标签时(例如,如果 check_system_time_in_intervalinstance="10.41.0.118"=0 和 tomcat_up instance="10.41.0.118=1" 然后触发警报)但我不知道如何修改“inhibit_rule”来做到这一点。

【问题讨论】:

【参考方案1】:

过了一会儿,我想出了一个简单的解决方案:添加一个新标签“时区”并仅在“时区”标签匹配时才禁止警报。

【讨论】:

我认为您还可以通过使用 Prometheus 时间函数来避免额外的 tz 指标。类似于:***.com/questions/69717672/…

以上是关于Prometheus 选择性地抑制警报的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus 抑制但没有匹配的实例标签

为啥 Prometheus 不会在不可见的指标上引发错误?

在 graylog、prometheus、grafana 等工具中对历史警报进行分组

Prometheus Alert Manager:如何防止在通知中分组

Prometheus部署及服务发现

Prometheus部署及服务发现