如何通过Grafana转换Elasticsearch数据,将子任务按任务分组展示?
问题描述
我的Elasticsearch数据库中存储的子任务数据结构如下:
{ "task_id":1, "subtask_name":"preparation", "subtask_status":"done" }
每个任务包含preparation和realization两个子任务。当前Grafana表格的展示效果为:
| task_id | subtask_name | subtask_status |
|---|---|---|
| 1 | preparation | done |
| 1 | realization | tbd |
| 2 | preparation | tbd |
| 2 | realization | tbd |
我希望将子任务按对应任务分组,展示为如下形式:
| task_id | preparation | realization |
|---|---|---|
| 1 | done | tbd |
| 2 | tbd | tbd |
请问需要使用哪些Grafana Transformations才能实现该效果?使用Elasticsearch作为数据库,是否需要通过Lucene查询进行分组?
解决方案
所需Grafana转换步骤
不用改Lucene查询,靠Grafana自带的Transform功能就能搞定,具体步骤如下:
- 添加「Group by」转换
选择按task_id字段分组,把同一个任务的两条子任务数据合并到同一组里。 - 添加「Pivot」转换
配置这几个核心参数:- 「Row group by」选
task_id,作为最终表格的行标识; - 「Column」选
subtask_name,把该字段的取值(preparation、realization)转换为表格的列名; - 「Value」选
subtask_status,将对应子任务的状态填充为单元格的值。
- 「Row group by」选
- (可选)添加「Organize fields」转换
如果觉得中间生成的冗余字段影响视觉,可以用这个转换移除不需要的字段,让表格结构更简洁。
关于Lucene查询的说明
完全不需要通过Lucene查询进行分组,原始数据已经包含所有必要信息,Grafana的Transform功能足以在前端完成数据结构的重组,无需修改数据源的查询逻辑。
内容的提问来源于stack exchange,提问作者Cake
相关产品推荐
相关产品推荐

