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 选择性地抑制警报的主要内容,如果未能解决你的问题,请参考以下文章
在 graylog、prometheus、grafana 等工具中对历史警报进行分组