关于告警条件触发range_query和query问题

Viewed 25

版本: v6.7.3
数据源: 阿里云sls
测试方式: 创建两个告警规则, 除了报警条件和规则名称不一样外,其他均一致(包括告警方式, 告警接收人,检查间隔,持续时间等等等)
第一个报警条件:min_over_time(waf_qps_Maximum{domain="xxxx.com.cn-waf"}[5m]) > 1
第二个报警条件:waf_qps_Maximum{domain="xxxx.com.cn-waf"} > 1
补充: 这是通过阿里云的api采集的waf监控数据, 每1分钟投递一次到阿里云sls, xxxx.com.cn的qps非常稳定的持续在100以上
预期: 理论上两个报警条件都应该会触发告警
实际: 只有第一个报警条件成功触发了告警
排查过程:
首先按照文档 https://mp.weixin.qq.com/s/TctM_kosBZesKj6i0oEZew 排查,确认系统、报警通道是没问题。
唯一有区别的是
在即时查询中, 查询 waf_qps_Maximum{domain="xxxx.com.cn-waf"} "Talbe"是看不到数据了, 但是在"Graph"中是可以看到的, 在告警规则配置界面, "数据预览" 也可以看到数据。 而 min_over_time(waf_qps_Maximum{domain="xxxx.com.cn-waf"}[5m]) 则是在这三个场景都可以看到数据

目前临时规避: 配置告警前先通过即时查询查询一下,如果Table方式查询不到, 就用min_over_time方式来配置告警规则

问题: 对于一条指标, 到底是按照聚合方式进行查询(第一种告警方式),还是说可以按照第二种方式查询就能按照我们的预期(在本例子中就是 最近一分钟qps大于1)触发告警, 有没有更优雅的方式可以推荐呢

2 Answers

第二种没有产生告警,我认为和采集频率以及回溯窗口不匹配有关,这篇faq里有解释 监控数据时有时无,这样情况下我觉得第一种更好

last_over_time(waf_qps_Maximum{domain="xxxx.com.cn-waf"} [1m])> 1

last_over_time好用,完美解决了个人问题

image.png
看了一下grafana在配置告警规则的时候, 默认按照了"Range"(Type字段) 进行查询, 就不会遇到此类问题了

另外微信的那个推文中, 排查过程中, 应该让用户检查Table页面,而不是Graph页面,即下图应该调整一下
image.png