如何配置Prometheus抑制规则以基于被监控服务器本地时区实现Tomcat故障告警时段控制
解决Alertmanager按Instance匹配的非工作时间告警抑制问题
你的思路完全正确——问题出在当前的抑制规则没有关联instance标签,导致只要有任何一台服务器触发了非工作时间告警,所有Tomcat宕机告警都会被无差别抑制。要实现仅同一台服务器的非工作时间告警抑制自身的Tomcat宕机告警,只需要在inhibit_rules中添加equal字段,指定需要匹配的标签即可。
具体修改步骤
修改你的alertmanager.yml中的抑制规则,添加equal: ['instance']:
inhibit_rules: - source_match: alertname: Inhibit alert during NO working hours target_match_re: alertname: (TOMCAT down) equal: ['instance'] # 关键:要求source和target告警的instance标签完全匹配
配置解释
equal: ['instance']这个字段告诉Alertmanager:只有当**源告警(非工作时间告警)和目标告警(Tomcat宕机告警)**的instance标签完全一致时,才会执行抑制逻辑。- 这样一来,当
check_system_time_in_interval{instance="10.41.0.118"}=0触发非工作时间告警时,只会抑制TOMCAT down{instance="10.41.0.118"}这条告警,其他instance的Tomcat宕机告警不受影响。
额外验证要点
- 确保你的
check_system_time_in_interval指标确实带有instance标签:可以在Prometheus UI中查询这个指标,确认每个时间序列都对应到具体的被监控服务器。 - 测试场景:
- 模拟某台服务器处于非工作时段,触发非工作时间告警,然后手动停掉该服务器的Tomcat,确认这条Tomcat宕机告警不会被发送。
- 同时在另一台处于工作时段的服务器停掉Tomcat,确认这条告警正常发送。
内容的提问来源于stack exchange,提问作者gpprimo
相关产品推荐
相关产品推荐

