NewRelic告警查询不支持Having子句,如何实现双重条件告警?
解决NewRelic告警同时校验错误率与错误数的问题
由于NewRelic告警查询不支持HAVING子句,也无法直接在单条告警条件中同时引用两个指标,你可以通过以下两种方式实现需求,确保仅当错误率超过阈值且总错误数达标时触发告警,避免单次请求失败(100%错误率但错误数仅1)的误触发。
方法一:子查询过滤出符合条件的结果
通过嵌套查询先计算每个事务的错误数和错误率,再在外层筛选出同时满足双条件的条目。只要查询返回数据,就触发告警。
SELECT * FROM ( SELECT count(*) AS ErrorCount, (filter(count(*), WHERE error = true AND http.statusCode = '500') / count(*)) * 100 AS ErrorRate FROM Transaction WHERE appName = 'app_name' AND transactionType = 'Web' FACET name LIMIT 200 ) WHERE ErrorCount > 5 AND ErrorRate > [你的阈值]
说明:
- 将
[你的阈值]替换为实际错误率阈值(例如50代表50%) - 告警规则设置为当查询返回任何结果时触发,仅符合双条件的事务会触发告警。
方法二:用CASE生成告警标记字段
在查询中新增布尔标记字段,直接标记是否满足告警条件,再通过告警规则判断该字段的值。
SELECT count(*) AS ErrorCount, (filter(count(*), WHERE error = true AND http.statusCode = '500') / count(*)) * 100 AS ErrorRate, CASE WHEN ErrorCount > 5 AND ErrorRate > [你的阈值] THEN 1 ELSE 0 END AS ShouldAlert FROM Transaction WHERE appName = 'app_name' AND transactionType = 'Web' FACET name LIMIT 200
说明:
- 告警规则设置为ShouldAlert equals 1,当标记为1时触发告警
- 这种方式保留了所有事务的指标数据,同时清晰标记出需要告警的条目
内容的提问来源于stack exchange,提问作者Sathish
相关产品推荐
相关产品推荐

