Grafana Stat面板错误率显示异常:零值时仍展示历史峰值
解决Grafana Stat面板错误率为0时显示历史峰值的问题
问题背景
用Loki查询容器错误率的语句是:
(sum(rate({namespace="namespace", cluster="cluster", level="error"}[1m])) by (cluster, container, level, namespace))>0.5
搭配Grafana Stat面板,设置了计算方式为「最后非空值」、数值型、小数位数0,时间范围选最近6小时。但现在遇到问题:当前错误率明明是0,面板却还显示6小时内曾经出现过的峰值(比如之前的672),换了好几种计算方式都没解决。
问题根源
原查询里的>0.5把错误率≤0.5的结果都过滤掉了,当当前没有错误(错误率为0)时,Loki根本返回不了对应的数据点。Grafana的「最后非空值」就只能抓时间范围内最后一条有数据的记录——也就是之前的峰值,自然就显示错了。
解决办法
办法一:修改Loki查询,强制返回0值
把原查询的过滤条件去掉,或者用or vector(0)兜底,确保无错误时返回0,这样Grafana就能拿到当前的正确值:
基础版修改(保留所有错误率数据,包括≤0.5的):
sum(rate({namespace="namespace", cluster="cluster", level="error"}[1m])) by (cluster, container, level, namespace) or vector(0)
如果还是想只关注错误率>0.5的情况,但空值时显示0:
sum(rate({namespace="namespace", cluster="cluster", level="error"}[1m])) by (cluster, container, level, namespace) |> filter(fn (r) => r.value > 0.5) or vector(0)
办法二:调整Grafana面板配置
- 把计算方式从「最后非空值」改成「最后值」或者「当前值」(看你Grafana版本支持哪个),确保只取时间范围最末尾的数据点。
- 开空值处理:在面板的「值选项」里,把空值显示设为0,就算Loki返回空数据,Grafana也会自动填0。
- 调整rate窗口:把查询里的
[1m]改成和面板时间范围匹配的粒度,比如6小时范围用[1h],让数据点更贴合当前状态。
最优组合方案
用修改后的查询确保返回0值,再配上面板的正确设置:
- 查询用:
sum(rate({namespace="namespace", cluster="cluster", level="error"}[1m])) by (cluster, container, level, namespace) or vector(0) - 面板计算方式设为「最后值」,小数位数0,空值处理设为0(可选)
这样不管当前有没有错误,面板都会准确显示当前的错误率,不会再揪着历史峰值不放。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

