如何合并Prometheus中同一表达式的重复告警并每日汇总通知?
优化Prometheus分散告警为每日汇总告警
一、修改Prometheus告警规则
将原有分散告警规则调整为单条汇总告警,同时确保每日仅触发一次:
- alert: ProductOfferRateAlert # 筛选5分钟内报价增量低于100的实例,统计数量大于0时触发 expr: count by () (sum(increase(product_offer_counter[5m])) by (type, country) < 100) > 0 # 持续24小时符合条件才触发,避免频繁告警 for: 24h labels: level: P2 frequency: daily annotations: summary: "产品报价率过低汇总告警" description: "[{{- range query 'sum(increase(product_offer_counter[5m])) by (type, country) < 100' -}}{{ .Labels.type }}-{{ .Labels.country }}{{- if not last -}}, {{- end -}}{{- end -}}] offer rate was too low"
关键改动说明:
- expr部分:通过
count by ()聚合所有符合条件的实例,仅生成一条告警时间序列,彻底解决分散告警问题。 - for字段:设置为
24h,确保只有当问题持续存在24小时才触发告警,为每日一次的触发频率提供基础约束。 - annotations描述:使用Prometheus模板的
query函数,实时拉取所有符合条件的type-country组合,遍历拼接成要求的[A-A, B-B,...]格式。
二、配置Alertmanager严格控制发送频率
为确保每日仅发送一次告警通知,需调整Alertmanager的路由配置:
route: group_by: ['alertname'] group_wait: 30s # 同一告警组的间隔发送时间设为24小时 group_interval: 24h # 同一告警的重复通知间隔设为24小时 repeat_interval: 24h
配置说明:
group_by: ['alertname']:将同一告警名称的所有实例归为一组,保证汇总逻辑生效。group_interval: 24h:限制同一组告警的发送间隔,避免短时间内重复推送。repeat_interval: 24h:控制同一告警的重复通知周期,确保每日仅推送一次。
内容的提问来源于stack exchange,提问作者Xiao Wang
相关产品推荐
相关产品推荐

