如何用New Relic与Prometheus指标实现周均值对比基线告警?
解决New Relic中本周指标均值低于上周均值的告警配置问题
核心方案:用WITH子句计算双周期均值并比较
由于COMPARE WITH语法无法在告警条件中使用,我们可以通过NRQL的WITH子句分别计算本周和上周的指标均值,再直接比较二者大小,以此作为告警触发条件。
1. 先处理Prometheus计数器指标
Prometheus计数器是单调递增的,直接取均值没有业务意义,必须先转换为速率值。使用rate()函数计算1分钟内的速率(可根据你的指标频率调整窗口,比如[5m]):
rate(prometheus_my_counter[1m])
2. 完整NRQL查询语句
替换prometheus_my_counter为你的实际指标名,可按需添加标签过滤条件(比如AND job="your_job"):
WITH this_week_avg AS ( SELECT average(rate(prometheus_my_counter[1m])) FROM Metric WHERE timestamp >= now() - 7 days AND timestamp < now() ), last_week_avg AS ( SELECT average(rate(prometheus_my_counter[1m])) FROM Metric WHERE timestamp >= now() - 14 days AND timestamp < now() - 7 days ) SELECT (this_week_avg.value < last_week_avg.value) AS alert_trigger FROM this_week_avg, last_week_avg
3. 配置告警条件
基于上述NRQL创建告警规则时:
- 设置告警触发逻辑为:当
alert_trigger等于true时触发 - 可根据需求调整查询的时间窗口、聚合粒度,或者添加阈值缓冲(比如
this_week_avg.value < last_week_avg.value * 0.9,即低于上周90%才告警)
关键注意事项
- 时间范围要严格隔离:本周是
now()-7d到now(),上周是now()-14d到now()-7d,避免时间重叠导致数据不准确 - 如果指标有多个维度(比如不同实例),要在
SELECT中添加FACET instance,并确保告警条件针对每个维度单独判断 - 若遇到数据缺失问题,可在查询中添加
FILL(0)来填充空值,避免比较逻辑失效
内容的提问来源于stack exchange,提问作者Gal Morad
相关产品推荐
相关产品推荐

