使用 Infinity 可视化 JSON
📊 概述
想要更精简的学习旅程,请查看我们的 Grafana Infinity 数据源学习旅程
Grafana 学习旅程提供清晰、结构化的路径,引导您从初级概念走向高级用例。了解此 Grafana 功能,请访问使用 Infinity 数据源可视化 JSON 数据。
通过 Grafana Play,您可以探索其工作原理,从实际示例中学习,加速您的开发。此功能可以在以下页面看到:Infinity 插件 JSON 演示。
将查询的类型选择为 JSON
。您可以指定 JSON API 的 URL、JSON 文件,或者提供内联 CSV。
使用公共 JSON API 端点
以下示例展示了如何从公共可访问的 JSON API 端点获取数据。
URL : https://jsonplaceholder.typicode.com/users
在上述示例中,URL 中的数据是一个数组,因此除了面板中的 URL 外,无需配置任何额外字段。
访问 JSON 数据的嵌套属性
URL : https://thingspeak.com/channels/38629/feed.json
在上面的示例中,数据位于 feeds
属性中,该属性被指定为 root/rows 字段。然而,插件仍然无法识别这些字段或其类型。为此,我们将添加列使其更具意义。
我们将添加列并定义其类型,如下所示
不含时间字段的 JSON 数据
URL : https://gist.githubusercontent.com/yesoreyeram/2433ce69862f452b9d0460c947ee191f/raw/f8200a62b68a096792578efd5e3c72fdc5d99d98/population.json
在上面的示例中,我们可视化了不含时间字段的 JSON 数据。我们的 JSON 只有 country
和 population
两个字段,因此我们要求插件为数据添加一个虚拟时间字段,以便我们可以在 Grafana 的任何标准面板中可视化它们。如果您仔细查看上面的图片,您会发现我们指定 'format' 为 timeseries。
供参考,URL 中的 JSON 数据如下
[
{ "country": "india", "population": 300 },
{ "country": "usa", "population": 200 },
{ "country": "uk", "population": 150 },
{ "country": "china", "population": 400 }
]
内联 JSON
除了指定 URL,您还可以硬编码一个 JSON 对象。例如,您可以按以下示例所示指定 JSON
[
{ "country": "india", "population": 420 },
{ "country": "india", "population": 440 },
{ "country": "usa", "population": 200 },
{ "country": "uk", "population": 150 },
{ "country": "china", "population": 400 }
]
您还需要手动指定列名以供显示。
root 选择器中的 JSONPath
在 root 选择器中,您可以使用 JSONPath 格式的选择器。
注意
任何以
$
开头的 root 选择器都被视为 JSONPath 选择器。
示例
{
"customers": [
{ "name": "mary", "age": 22, "gender": "female" },
{ "name": "joseph", "age": 41, "gender": "male" }
],
"premium_customers": [{ "name": "john doe", "age": 21, "gender": "male" }]
}
在上述 JSON 中,如果 $.premium_customers
是 root 选择器,则查询返回 john doe
。如果 $.*
是 root 选择器,则查询返回所有三行。
UQL 解析器
如果您正在寻找更多 JSON 选项,如 group by
、order by
、JSONata、字段操作或类似功能,请使用UQL 查询。下面您会找到一个 UQL 命令
parse-json
| scope "feeds"
| project "ts"=todatetime("created_at"), "Density of Westbound Cars"=tonumber("field1"), "Density of Eastbound Cars"=tonumber("field2")
后端解析器
如果您需要告警/录制查询等高级选项,请使用 backend
作为解析器。
当使用 backend
作为解析选项时,您的时间戳字段需要遵循 ISO 日期/时间格式。示例:2006-01-02T15:04:05Z07:00
。如果它们不符合 ISO 时间戳格式,您可以使用 layout 选项指定格式。layout 必须是golang 时间 layout 规范。
当使用 backend
解析器时,您还可以使用 Summarize 字段将数值字段汇总为单个聚合数字。示例用法:last(density_of_eastbound_cars) - last(density_of_westbound_cars)
。您还可以使用数值选项,如 sum
、min
、max
、mean
、first
和 last
。