请求率下降触发Grafana Singlestat面板变色的配置问询
用PromQL实现请求率下降的Singlestat告警面板
当然可以实现!而且通过PromQL把「当前请求率对比10分钟前的下降比例」直接计算出来,再配合Singlestat的阈值配置,比单纯依赖原始指标的阈值要精准得多,完全贴合你的需求。
第一步:编写计算下降比例的PromQL
直接用PromQL的offset语法获取10分钟前的指标值,再算出下降比例:
1 - (sum(Total_Query_Received_persec) / sum(Total_Query_Received_persec offset 10m))
这个查询的逻辑很直白:
sum(Total_Query_Received_persec offset 10m):拿到10分钟前的请求率总和- 当前请求率总和除以历史值,得到当前值相对历史值的比例
- 用
1减去这个比例,得到下降的百分比(小数形式):比如当前值是10分钟前的50%,结果就是0.5(对应50%下降);如果只剩20%,结果就是0.8(对应80%下降)
第二步:配置Singlestat面板
- 把上面的PromQL填入Singlestat的指标查询框
- 调整显示单位:在「Display」选项卡的「Unit」里选择「Percentage」,面板会直接显示百分比(比如50%、80%),看起来更直观
- 设置阈值规则:
- 黄色阈值:当数值≥
0.5时触发(也就是下降50%及以上) - 红色阈值:当数值≥
0.8时触发(也就是下降80%及以上)
刚好Singlestat默认是数值越高越触发严重级别的颜色,完全匹配我们的场景——下降比例越高,问题越严重
- 黄色阈值:当数值≥
额外优化:处理无历史数据的情况
如果服务刚启动,10分钟前没有数据,上面的查询会返回空值。可以加个兜底逻辑避免面板无数据:
1 - (sum(Total_Query_Received_persec) / (sum(Total_Query_Received_persec offset 10m) or vector(1)))
这里用or vector(1),如果历史值为空,就默认用1作为对比基准——这样只要当前有数据,就不会因为历史值缺失导致查询失效。
你还可以在Singlestat的「Value」选项卡设置副标题,把sum(Total_Query_Received_persec)作为第二个指标,这样既能看到下降比例,也能看到当前的实际请求数,排查问题时更方便。
内容的提问来源于stack exchange,提问作者slowscripter
相关产品推荐
相关产品推荐

