0

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

  1. 定义了一个自定义规则“check_system_time_in_interval”,如果服务器本地时间在 [8:05,22:45],则返回 1,否则返回 0
  2. 使用规则 1)在“prometheus.rule.yml”中定义一个警报Inhibit alert during NO working hours :
- name: quite_hours
  rules:
    - alert: Inhibit alert during NO working hours
      expr: check_system_time_in_interval==0
      labels:
        notification: none
        severity: critical
  1. 在“alertmanager.yml”文件中定义了一个新的inhibit_rule,当监控的服务器时间不在该时间间隔内时,它会禁止警报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_interval{instance="10.41.0.118"}=0 和 tomcat_up{instance= “10.41.0.118}=1”然后发出警报)但我不知道如何修改“inhibit_rule”才能做到这一点。

4

1 回答 1

0

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

于 2021-09-14T15:01:45.170 回答