Grafana表格面板新增列需求:如何从3列扩展至5列?
解决方法:扩展Grafana Table面板到5列
没问题,我帮你一步步搞定这个需求!要把新版Grafana Table面板从3列(metric、value、time)扩展到5列(两个metric、两个value、time),核心是先让SQL返回对应字段,再配置面板的列显示,具体操作如下:
第一步:修改SQL查询,返回5个目标字段
首先得调整你的SQL语句,让它输出两个metric相关字段、两个value相关字段和time字段。举几个常见场景的例子:
场景1:从同一张表获取两组不同的metric和value
比如你要同时展示"CPU使用率"和"内存使用率"这两个指标,SQL可以这么写:
SELECT 'CPU使用率' AS metric_1, cpu_value AS value_1, '内存使用率' AS metric_2, mem_value AS value_2, time FROM your_metrics_table WHERE time >= NOW() - INTERVAL 1 HOUR ORDER BY time DESC
场景2:从关联表获取不同维度的metric和value
如果你的metric和value来自关联表,比如业务指标和系统指标,SQL可以这样写:
SELECT b.biz_metric AS metric_1, b.biz_value AS value_1, s.sys_metric AS metric_2, s.sys_value AS value_2, b.time FROM biz_metrics b JOIN sys_metrics s ON b.time = s.time WHERE b.time >= NOW() - INTERVAL 1 HOUR ORDER BY b.time DESC
场景3:从单字段拆分出两个metric列
如果需要把同一个metric字段按条件拆分到两列(比如区分成功/失败指标),可以用CASE WHEN:
SELECT CASE WHEN metric_type = 'success' THEN metric ELSE NULL END AS metric_1, CASE WHEN metric_type = 'success' THEN value ELSE NULL END AS value_1, CASE WHEN metric_type = 'failure' THEN metric ELSE NULL END AS metric_2, CASE WHEN metric_type = 'failure' THEN value ELSE NULL END AS value_2, time FROM your_metrics_table WHERE time >= NOW() - INTERVAL 1 HOUR ORDER BY time DESC
注意:给每个字段起清晰的别名(比如metric_1、value_1),方便后面在Grafana里识别配置。
第二步:配置新版Grafana Table面板的列显示
修改完SQL后,回到Grafana面板编辑界面,切换到「Visualization」标签页(就是那个图表图标),然后按以下步骤配置:
- 确认字段已加载:在「Data」标签页先验证SQL查询结果,确保已经返回了5个字段(两个metric、两个value、time)。
- 进入列配置:在「Visualization」标签页往下滑,找到「Columns」配置项(新版Grafana默认会自动列出所有返回的字段)。
- 设置列名称和顺序:
- 找到
metric_1字段,点击它的配置项,把「Display name」改成metric,然后拖动它到第一列的位置。 - 找到
metric_2字段,同样把「Display name」改成metric,拖动到第二列。 - 对
value_1和value_2做同样操作:把「Display name」改成value,分别放到第三、第四列。 - 把
time字段留在第五列,还可以调整它的显示格式(比如改成「YYYY-MM-DD HH:mm:ss」)。
- 找到
- 优化列样式(可选):
- 对于
value列,可以设置「Align」为「Right」,方便数值对齐。 - 如果某些列有空值,可以在「Null value」里设置显示内容(比如
-或者0)。
- 对于
- 保存配置:调整完后点击右上角的「Save」按钮,就能看到5列的Table面板了!
如果遇到字段不显示的情况,检查一下SQL是否正确返回了字段,或者在Grafana的「Data」标签页刷新一下查询结果。
内容的提问来源于stack exchange,提问作者jack94




