我需要创建一个警报系统,它必须在满足特定条件(例如 Tomcat 宕机)时发出通知。部署在不同位置(具有不同时区)的多个远程服务器托管 Tomcat 服务并由 Prometheus 监控。我只需要在当地时间 8:05 到 22:45 收到警报,所以我按照以下步骤进行:
- 定义了一个自定义规则“check_system_time_in_interval”,如果服务器本地时间在 [8:05,22:45],则返回 1,否则返回 0
- 使用规则 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
- 在“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”才能做到这一点。