在基于MySQL的Grafana的柱状中不显示0值
简单记录下自己在使用Grafana
过程中的一点点经验总结:通过修改sql的方式来消除柱状图中多余的0值。
问题
通过Grafana
基于MySQL
查询系统监控统计数据时,发现在柱状图中有很多0值,严重影响使用体验。
解决
一开始自己想通过Grafana
面板的过滤这些0值,搜索一番后并没有找到基于Grafana
的解决方案,给出的答案是通过修改sql来规避此问题1,对比该答案,还发现自己遇到的问题类似。
原始查询sql:
SELECT
DATE_FORMAT(t.start_time,'%Y-%m-%d') AS `taskDate`,
SUM(IF(t.instance_status = 0,1,0)) AS `未知`,
SUM(IF(t.instance_status = 1,1,0)) AS `等待触发`,
SUM(IF(t.instance_status = 2,1,0)) AS `队列中`,
SUM(IF(t.instance_status = 3,1,0)) AS `开始执行`,
SUM(IF(t.instance_status = 4,1,0)) AS `执行中`,
SUM(IF(t.instance_status = 5,1,0)) AS `成功`,
SUM(IF(t.instance_status = 6,1,0)) AS `失败`,
SUM(IF(t.instance_status = 7,1,0)) AS `终止`,
SUM(IF(t.instance_status = 8,1,0)) AS `超时`,
SUM(IF(t.instance_status = 9,1,0)) AS `拒绝执行`,
SUM(IF(t.instance_status = 10,1,0)) AS `已访问`
FROM t_work_flow_instance t
WHERE t.start_time> DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY taskDate
ORDER BY taskDate
mysql
中查询结果:
为了解决该问题,需要将IF
中的默认值从0
修改为null
。
改进后的sql:
SELECT
DATE_FORMAT(t.start_time,'%Y-%m-%d') AS `taskDate`,
SUM(IF(t.instance_status = 0,1,null)) AS `未知`,
SUM(IF(t.instance_status = 1,1,null)) AS `等待触发`,
SUM(IF(t.instance_status = 2,1,null)) AS `队列中`,
SUM(IF(t.instance_status = 3,1,null)) AS `开始执行`,
SUM(IF(t.instance_status = 4,1,null)) AS `执行中`,
SUM(IF(t.instance_status = 5,1,null)) AS `成功`,
SUM(IF(t.instance_status = 6,1,null)) AS `失败`,
SUM(IF(t.instance_status = 7,1,null)) AS `终止`,
SUM(IF(t.instance_status = 8,1,null)) AS `超时`,
SUM(IF(t.instance_status = 9,1,null)) AS `拒绝执行`,
SUM(IF(t.instance_status = 10,1,null)) AS `已访问`
FROM t_work_flow_instance t
WHERE t.start_time> DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY taskDate
ORDER BY taskDate
mysql
中查询结果如下,可看出除了将0
值修改为null
之外,其余的查询数据是一致的。
在Grafana
中查看显示效果类似如下,可发现0值已经消失,问题初步解决。
后记
虽然前述问题被解决,但当我们用鼠标查询对应的柱状条时,可发现tooltip
中会显示所有的类别,即使该类别值为0或不存在也会显示,同样很影响使用体验。
在网上搜索一番后,发现已经有人在Grafana
的GitHub
主页上提出了对应的issue2, 遗憾的是该问题在2015年初被提出,到现在快10年了都没解决,Grafana
官方的开发人员明确回复了没有该问题的修复计划,并且不认为其是一个issue,看来只能一直凑合用着!