Grafana 10.0.0中JSON API数据源的时间序列数据转换问询
在Grafana里用JSON API数据源转分离式时间序列数据
不用额外写代码或加中间件,直接靠Grafana的内置工具或者插件就能搞定,两种方案给你:
一、用Grafana自带的Transform(零插件)
这是最省事的办法,步骤如下:
- 先配好JSON API数据源,确保能拉到目标数据。
- 建面板选这个数据源,拿到原始数据后切到Transform标签页,依次加这几个转换:
- 提取字段:把
Values、TimeStamps还有Keyinfo.Name(用来标指标名,比如温度)提出来。 - 展开字段:分别对
Values和TimeStamps做Unwind操作,把数组拆成一行行,每行对应一个时间戳和数值。 - 整理字段:把
Values改名叫value,TimeStamps改名叫time,留着Keyinfo.Name当metric用来区分不同指标。 - 转换字段类型:把
time字段转成Time类型,让Grafana能识别出这是时间序列数据。
- 提取字段:把
转完之后,原始的分离数组就变成Grafana能直接用的格式了:
[ {"time": "2023-06-21T00:57:54+06:00", "value": 20.4627780914307, "metric": "Temperature"}, {"time": "2023-06-21T04:38:02+06:00", "value": 20.4127216339111, "metric": "Temperature"}, {"time": "2023-06-21T04:52:33+06:00", "value": 20.3624877929688, "metric": "Temperature"} ]
二、用JSONata插件处理复杂场景
如果内置Transform满足不了特殊逻辑,就装个Grafana JSONata Plugin:
- 要么在Grafana插件市场搜
JSONata安装,要么用命令行执行:grafana-cli plugins install grafana-jsonata-datasource。 - 配好数据源后,在查询里写JSONata表达式,直接把两个数组合并:
这个表达式会遍历$map($$.Values, function($v, $i) { { "time": $$.TimeStamps[$i], "value": $v, "metric": $$.Keyinfo.Name } })Values里的每个数值,同时取对应索引位置的时间戳,直接拼成标准的时间序列结构。
注意点
- 如果返回的是多组指标(比如多个位置的传感器数据),只要保留
Location或者Keyinfo.Name这类区分字段,两种方法都能正常处理。 - 要是原始时间格式Grafana识别不了,要么在转换字段类型时指定格式,要么用JSONata的时间函数转成标准时间戳格式。
内容的提问来源于stack exchange,提问作者viktorkho
相关产品推荐
相关产品推荐

