Prometheus告警:如何将2个相似Counter指标值求和实现单次告警
多实例指标求和、单条告警触发的实现方案
核心原理
原规则每条告警对应一个独立时间序列,要实现仅触发一次告警,只需在增量计算的外层增加聚合逻辑,消除按实例拆分的多序列输出,将所有匹配实例的计算值累加为单值即可。
具体修改点
- 修正原规则的笔误:原表达式内的指标名
ome_metric_counter缺失开头的s,应为some_metric_counter,否则规则无法匹配到任何监控数据 - 在
increase()计算外层包裹sum()聚合函数,将不同实例的3分钟增量值累加为总数值 - (可选优化)如果需要在告警标签中保留应用标识,可配合
by子句指定需要保留的标签维度,避免聚合后丢失应用相关上下文;如果不需要保留任何标签,可直接省略by子句
修改后的完整告警规则
保留应用标签维度的版本:
- alert: someAlertForSomeCounter expr: sum by (app, result) (increase(some_metric_counter{app="v1-review-some-app", result="failure"}[3m])) > 0 labels: severity: warning annotations: summary: Some summary description: Consolidated value of counter: {{ $value }}
无额外标签的简化版本:
- alert: someAlertForSomeCounter expr: sum(increase(some_metric_counter{app="v1-review-some-app", result="failure"}[3m])) > 0 labels: severity: warning annotations: summary: Some summary description: Consolidated value of counter: {{ $value }}
效果说明
- 规则会自动对两个实例3分钟内的失败计数增量做求和计算,最终仅返回1个总数值,只会触发1条告警
- 告警描述中的
{{ $value }}会直接传入两个实例的增量总和 - 注意计算逻辑顺序必须为「先对单个实例的序列计算窗口增量,再做聚合求和」,避免因counter重置、实例重启导致计算值偏差
内容的提问来源于stack exchange,提问作者Jan Carlo Once
相关产品推荐
相关产品推荐

