转换数据 - Amazon Managed Grafana

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

转换数据

本文档主题专为支持 Grafana 9.x 版本的 Grafana 工作空间而设计。

有关支持 Grafana 版本 10.x 的 Grafana 工作空间,请参阅。在 Grafana 版本 10 中工作

有关支持 Grafana 8.x 版本的 Grafana 工作空间,请参阅。在 Grafana 版本 8 中工作

在系统应用可视化之前,转换是一种强大的操作查询返回的数据的方法。使用变换,您可以:

  • 重命名字段

  • 加入时序数据

  • 跨查询执行数学运算

  • 使用一个变换的输出作为另一个变换的输入

对于依赖同一数据集的多个视图的用户,转换提供了一种创建和维护大量仪表板的有效方法。

您也可以使用一个变换的输出作为另一个变换的输入,从而提高性能。

注意

有时,系统无法绘制转换后的数据。发生这种情况时,单击可视化上方的表格视图切换开关,切换到数据的表格视图。这可以帮助您了解转换的最终结果。

转换类型

Grafana 提供了多种转换数据的方式。下面是变换函数的完整列表。

变换顺序

当有多个变换时,Grafana 会按照列出的顺序应用它们。每次转换都会创建一个结果集,然后将其传递到处理管道中的下一个转换。

Grafana 应用变换的顺序直接影响结果。例如,如果您使用 Reduce 转换将一列的所有结果压缩为单个值,则只能对该单个值应用转换。

向数据添加转换函数

以下步骤将指导您向数据添加转换。

向面板添加变换
  1. 导航到要在其中添加一个或多个变换的面板。

  2. 选择面板标题,然后单击 “编辑”

  3. 选择 Transform (转换) 选项卡。

  4. 选择转换。此时会出现一个转换行,您可以在其中配置转换选项。

  5. 要应用其他转换,请选择 “添加转换”。此转换作用于前一次转换返回的结果集。

调试转换

要查看转换的输入和输出结果集,请选择转换行右侧的错误图标。

输入和输出结果集可以帮助您调试转换。

删除转换

我们建议您移除不需要的变换。删除转换时,即从可视化中移除数据。

先决条件:

识别所有依赖转换的仪表板,并通知受影响的仪表板用户。

删除转换
  1. 打开面板进行编辑。

  2. 选择 Transform (转换) 选项卡。

  3. 选择要删除的转换旁边的垃圾桶图标。

转换函数

您可以对数据执行以下转换。

从计算中添加字段

使用此转换可以添加一个根据其他两个字段计算得出的新字段。每次转换都允许您添加一个新字段。

  • 模式-选择模式:

    • 减少行-对选定字段的每一行分别应用所选计算。

    • 二元期权-对两个选定字段中单行中的值应用基本的数学运算(求和、乘法等)。

  • 字段名称-选择要在新字段的计算中使用的字段名称。

  • 计算-如果您选择减少行模式,则会出现 “计算” 字段。单击该字段可查看可用于创建新字段的计算选项列表。有关可用计算的信息,请参阅计算类型

  • 操作-如果您选择二元期权模式,则会出现 “操作” 字段。这些字段允许您对两个选定字段中的单行值进行基本的数学运算。也可以使用数值进行二进制运算。

  • 别名-(可选)输入新字段的名称。如果将此字段留空,则该字段的命名将与计算结果相匹配。

  • 替换所有字段-(可选)如果您想在可视化中隐藏所有其他字段并仅显示您的计算字段,请选择此选项。

连接字段

此变换将所有帧中的所有字段合并为一个结果。考虑一下这两个查询。

查询 A:

临时文件 正常运行时间

15.4

1230233

查询 B:

AQI 错误

3.2

5

连接字段后,数据框将是:

临时文件 正常运行时间 AQI 错误

15.4

1230233

3.2

5

来自查询结果的 Config

此转换允许您选择一个查询,然后从中提取标准选项,例如最小值、最大值、单位阈值,并将其应用于其他查询结果。这支持动态查询驱动的可视化配置。

如果您想为配置查询结果中的每一行提取唯一的配置,请尝试将行转换为字段。

Options

  • Config query-选择返回要用作配置的数据的查询。

  • 应用于-选择要将配置应用到的字段或系列。

  • 应用于选项-通常是字段类型或字段名称正则表达式,具体取决于您在 “应用于” 中选择的选项。

转换字段类型

此转换会更改指定字段的字段类型。

  • 字段-从可用字段中选择

  • as — 选择 FieldType 要转换为

    • 数字-尝试将值变为数字

    • 字符串 — 将值设为字符串

    • 时间 — 尝试将值解析为时间

      • 将显示一个选项,用于通过诸 DateFormat 如 yyyy-mm-dd 或 DD MM YYYY hh: mm: ss 之类的字符串将 a 指定为输入

    • 布尔值 — 将使值变为布尔值

例如,通过选择时间字段作为时间,将日期格式选择为YYYY,可以修改以下查询。

时间 标记

7/1/2017

以上

25

8/2/2018

下面

22

2019 年 2 月 9 日

下面

29

10/4/2020

以上

22

结果:

时间 标记

1/1/2017

以上

25

2018 年 1 月 1 日

下面

22

2019 年 1 月 1 日

下面

29

1/1/2020

以上

22

按名称筛选数据

使用此转换可以移除部分查询结果。

Grafana 显示 “标识符” 字段,然后显示查询返回的字段。

您可以通过以下两种方式之一应用过滤器:

  • 输入正则表达式。

  • 选择一个字段以切换该字段的筛选。筛选后的字段显示为深灰色文本,未经过滤的字段显示为白色文本。

按查询筛选数据

如果您想隐藏一个或多个查询,请在包含多个查询的面板中使用此转换。

Grafana 以深灰色文本显示查询标识字母。单击查询标识符可切换筛选。如果查询信是白色的,则会显示结果。如果查询信是深色的,则结果将被隐藏。

注意

这种转换不适用于 Graphite,因为此数据源不支持将返回的数据与查询相关联。

按值筛选数据

这种转换允许您直接在 Grafana 中筛选数据,并从查询结果中删除一些数据点。您可以选择包含或排除与您定义的一个或多个条件相匹配的数据。这些条件将应用于所选字段。

如果您的数据源未按值进行本地筛选,则此转换非常有用。如果您使用的是共享查询,也可以使用它来缩小要显示的值。

所有字段的可用条件为:

  • 正则表达式 — 匹配正则表达式

  • 为空 — 如果值为空,则匹配

  • 不为空 — 如果值不为空,则匹配

  • 等于 — 如果值等于指定值,则匹配

  • 不同 — 如果值与指定值不同,则匹配

数值字段的可用条件是:

  • 大于-如果该值大于指定值,则匹配

  • L@@ ow er — 如果值小于指定值,则匹配

  • 大于或等于 — 如果值大于或等于,则匹配

  • 小于或等于 — 如果值小于或等于,则匹配

  • 范围 — 匹配指定的最小值和最大值、最小值和最大值之间的范围

考虑以下数据集:

时间 Temperature 海拔

7/7/2020 上午 11:34:23

32

101

7/7/2020 上午 11:34:22

28

125

7/7/2020 上午 11:34:21

26

110

7/7/2020 上午 11:34:20

23

98

7/7/2020 上午 10:32:24

31

95

7/7/2020 上午 10:31:22

20

85

7/7/2020 上午 9:30:57

19

101

如果包括温度低于 30°C 的数据点,则配置将如下所示:

  • 过滤器类型Include

  • 条件-Temperature 匹配的行 Lower Than 30

您将得到以下结果,其中仅包括低于 30°C 的温度:

时间 Temperature 海拔

7/7/2020 上午 11:34:22

28

125

7/7/2020 上午 11:34:21

26

110

7/7/2020 上午 11:34:20

23

98

7/7/2020 上午 10:31:22

20

85

7/7/2020 上午 9:30:57

19

101

您可以向筛选器中添加多个条件。例如,您可能只想在海拔高度大于 100 时才包含数据。为此,请将该条件添加到以下配置中:

  • 筛选器类型-筛选Match All条件的Include

  • 条件 1-TemperatureLower之匹配的行 30

  • 条件 2-AltitudeGreater之匹配的行 100

当您有多个条件时,可以选择是否要将操作(包括/排除)应用于匹配所有条件的行还是匹配您添加的任何条件的行。

在上面的示例中,我们之所以选择 Match all,是因为我们想包括温度低于 30 且海拔高于 100 的行。如果我们想包括温度低于 30 或海拔高于 100 的行,则可以选择 Match any。这将包括原始数据中的第一行,其温度为32°C(与第一个条件不匹配),但海拔为101(与第二个条件相匹配),因此将其包括在内。

无效或配置不完整的条件将被忽略。

Group by (分组依据)

此转换按指定的字段(列)值对数据进行分组,并对每个组进行计算。单击查看计算选项列表。

以下是原始数据的示例。

时间 Server ID CPU 温度 服务器状态

7/7/2020 上午 11:34:20

服务器 1

80

关闭

7/7/2020 上午 11:34:20

服务器 3

62

OK

7/7/2020 上午 10:32:20

服务器 2

90

超载

7/7/2020 上午 10:31:22

服务器 3

55

OK

7/7/2020 上午 9:30:57

服务器 3

62

Rebooting

7/7/2020 上午 9:30:05

服务器 2

88

OK

7/7/2020 上午 9:28:06

服务器 1

80

OK

7/7/2020 上午 9:25:05

服务器 2

88

OK

7/7/2020 上午 9:23:07

服务器 1

86

OK

这种转变分为两个步骤。首先,指定一个或多个字段作为数据分组依据。这会将这些字段的所有相同值组合在一起,就像对它们进行排序一样。例如,如果我们按服务器 ID 字段进行分组,那么它将按以下方式对数据进行分组:

时间 Server ID CPU 温度 服务器状态

7/7/2020 上午 11:34:20

服务器 1

80

关闭

7/7/2020 上午 9:28:06

服务器 1

80

OK

7/7/2020 上午 9:23:07

服务器 1

86

OK

7/7/2020 上午 10:32:20

服务器 2

90

超载

7/7/2020 上午 9:30:05

服务器 2

88

OK

7/7/2020 上午 9:25:05

服务器 2

88

OK

7/7/2020 上午 11:34:20

服务器 3

62

OK

7/7/2020 上午 10:31:22

服务器 3

55

OK

7/7/2020 上午 9:30:57

服务器 3

62

Rebooting

服务器 ID 值相同的所有行都组合在一起。

选择要按哪个字段对数据进行分组后,可以在其他字段上添加各种计算,然后将计算应用于每组行。例如,我们可以计算每台服务器的平均CPU温度。因此,我们可以添加应用于 “CPU 温度” 字段的平均值计算得出以下结果:

Server ID CPU 温度(平均值)

服务器 1

82

服务器 2

88.6

服务器 3

59.6

我们可以添加多个计算。例如:

  • 对于时间字段,我们可以计算最后一个值,以了解每台服务器的最后一个数据点是什么时候收到的

  • 对于 “服务器状态” 字段,我们可以计算最后一个值以了解每台服务器的最后一个状态值是多少

  • 对于现场温度,我们还可以计算上次值以了解每台服务器的最新监控温度是多少

然后我们会得到:

Server ID CPU 温度(平均值) CPU 温度(上次) 时间(上次) 服务器状态(最新)

服务器 1

82

80

7/7/2020 上午 11:34:20

关闭

服务器 2

88.6

90

7/7/2020 上午 10:32:20

超载

服务器 3

59.6

62

7/7/2020 上午 11:34:20

OK

这种转换使您能够从时间序列中提取关键信息,并以方便的方式显示这些信息。

按字段加入

使用此转换将多个结果联接到一个表中。这对于将多个时间序列结果转换为具有共享时间字段的单个宽表特别有用。

内部联接

内联接合并来自多个表的数据,其中所有表共享选定字段中的相同值。这种类型的联接不包括每个结果中值不匹配的数据。

使用此转换将来自多个查询(合并到传递的联接字段或第一个时间列上)的结果合并为一个结果,并删除无法成功联接的行。

在以下示例中,两个查询返回表数据。在应用内部联接转换之前,它被可视化为两个单独的表。

查询 A:

时间 作业 正常运行时间

7/7/2020 上午 11:34:20

node

25260122

7/7/2020 上午 11:24:20

postgr

123001233

7/7/2020 上午 11:14:20

postgr

345001233

查询 B:

时间 Server 错误

7/7/2020 上午 11:34:20

服务器 1

15

7/7/2020 上午 11:24:20

服务器 2

5

7/7/2020 上午 11:04:20

服务器 3

10

应用内部联接变换后的结果如下所示:

时间 作业 正常运行时间 Server 错误

7/7/2020 上午 11:34:20

node

25260122

服务器 1

15

7/7/2020 上午 11:24:20

postgr

123001233

服务器 2

5

外连接

外连接包括来自内部联接的所有数据以及每个输入中值不匹配的行。当内部联接在时间字段上连接查询 A 和查询 B 时,外部联接包括时间字段上所有不匹配的行。

在以下示例中,两个查询返回表数据。在应用外部联接转换之前,它被可视化为两个表。

查询 A:

时间 作业 正常运行时间

7/7/2020 上午 11:34:20

node

25260122

7/7/2020 上午 11:24:20

postgr

123001233

7/7/2020 上午 11:14:20

postgr

345001233

查询 B:

时间 Server 错误

7/7/2020 上午 11:34:20

服务器 1

15

7/7/2020 上午 11:24:20

服务器 2

5

7/7/2020 上午 11:04:20

服务器 3

10

应用外连接转换后的结果如下所示:

时间 作业 正常运行时间 Server 错误

7/7/2020 上午 11:04:20

服务器 3

10

7/7/2020 上午 11:14:20

postgr

345001233

7/7/2020 上午 11:34:20

node

25260122

服务器 1

15

7/7/2020 上午 11:24:20

postgr

123001233

服务器 2

5

字段的标签

此转换会将包含标签或标签的时间序列结果更改为表格,其中每个标签键和值都包含在表结果中。标签可以显示为列或行值。

给定两个时间序列的查询结果:

  • 系列 1 — 标签 Server=Server A,dataCenter=EU

  • 系列 2 — 标签 Server=Server B、dataCenter=EU

“列” 模式下,结果如下所示:

时间 Server Datacenter

7/7/2020 上午 11:34:20

服务器 A

EU

1

7/7/2020 上午 11:34:20

服务器 B

EU

2

在 “行” 模式下,每个系列的结果都有一个表格,并显示每个标签值,如下所示:

label value

Server

服务器 A

Datacenter

EU

label value

Server

服务器 B

Datacenter

EU

值字段名称

如果您选择 “服务器” 作为 “值” 字段名称,则服务器标签的每个值都将获得一个字段。

时间 Datacenter 服务器 A 服务器 B

7/7/2020 上午 11:34:20

EU

1

2

合并行为

字段转换器的标签在内部是两个独立的转换。第一个作用于单个系列,并将标签提取到字段。第二个是合并转换,它将所有结果合并到一个表中。合并转换会尝试在所有匹配的字段上进行联接。此合并步骤是必需的,无法关闭。

注意

合并转换可以单独使用,下面将对其进行详细介绍。

为了说明这一点,这里有一个示例,其中有两个查询返回没有重叠标签的时间序列。

  • 系列 1 — 标签 server=servera

  • 系列 2 — 标签 dataCenter=EU

这将首先生成以下两个表:

时间 Server

7/7/2020 上午 11:34:20

ServerA

10

时间 Datacenter

7/7/2020 上午 11:34:20

EU

20

合并后:

时间 Server Datacenter

7/7/2020 上午 11:34:20

ServerA

10

7/7/2020 上午 11:34:20

20

EU

合并

使用此转换可将多个查询的结果合并为一个结果。这在使用表格面板可视化时很有用。可以合并的值合并到同一行中。如果共享字段包含相同的数据,则值可以合并。

在下面的示例中,我们有两个返回表数据的查询。在应用转换之前,它会被可视化为两个单独的表。

查询 A:

时间 作业 正常运行时间

7/7/2020 上午 11:34:20

node

25260122

7/7/2020 上午 11:24:20

postgr

123001233

查询 B:

时间 作业 错误

7/7/2020 上午 11:34:20

node

15

7/7/2020 上午 11:24:20

postgr

5

以下是应用合并转换后的结果:

时间 作业 错误 正常运行时间

7/7/2020 上午 11:34:20

node

15

25260122

7/7/2020 上午 11:24:20

postgr

5

123001233

整理字段

使用此转换可以重命名、重新排序或隐藏查询返回的字段。

注意

此转换仅适用于带有单个查询的面板。如果您的面板有多个查询,则必须应用外联接转换或移除多余的查询。

Grafana 显示查询返回的字段列表。您可以:

  • 将光标悬停在字段上即可更改字段顺序。光标变成一只手牌,然后你可以将字段拖到新的位置。

  • 通过单击字段名称旁边的眼睛图标来隐藏或显示字段。

  • 通过在 “重命名” 框中键入新名称来重命名字段。

按值分区

在绘制多个系列时,这种转换可以帮助消除使用不同WHERE子句对同一个数据源进行多次查询的需要。考虑一个包含以下数据的指标 SQL 表:

时间 区域

2022 年 10 月 20 日下午 12:00:00

美国

1520

2022 年 10 月 20 日下午 12:00:00

EU

2936

2022 年 10 月 20 日凌晨 1:00:00

美国

1327

2022 年 10 月 20 日凌晨 1:00:00

EU

912

在 v9.3 之前,如果你想在同一个 TimeSeries 面板中绘制美国的红色趋势线和欧盟的蓝色趋势线,你可能需要将其分成两个查询:

SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='US' SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='EU'

这还要求您提前知道指标表中实际存在哪些区域。

使用按值分割转换器,您现在可以发出单个查询,然后在您选择的一列或多列 (fields) 中按唯一值拆分结果。下面的示例使用了 Region

SELECT Time, Region, Value FROM metrics WHERE Time > '2022-10-20'
时间 区域

2022 年 10 月 20 日下午 12:00:00

美国

1520

2022 年 10 月 20 日凌晨 1:00:00

美国

1327

时间 区域

2022 年 10 月 20 日下午 12:00:00

EU

2936

2022 年 10 月 20 日凌晨 1:00:00

EU

912

减少

R ed uce 转换对框架中的每个字段应用计算并返回单个值。应用此变换时会移除时间字段。

考虑一下输入:

查询 A:

时间 临时文件 正常运行时间

7/7/2020 上午 11:34:20

12.3

256122

7/7/2020 上午 11:24:20

15.4

1230233

查询 B:

时间 AQI 错误

7/7/2020 上午 11:34:20

6.5

15

7/7/2020 上午 11:24:20

3.2

5

还原变压器有两种模式:

  • 序列到行-为每个字段创建一行,为每个计算创建一列。

  • 减少字段-保留现有的框架结构,但会将每个字段折叠成一个值。

例如,如果您将 “第一个” 和 “最后一个” 计算与 “序列到行” 转换一起使用,则结果将是:

字段 第一个 最后一个

临时文件

12.3

15.4

正常运行时间

256122

1230233

AQI

6.5

3.2

错误

15

5

“最后一次计算” 的 “减少” 字段会生成两个帧,每个帧都有一行:

查询 A:

临时文件 正常运行时间

15.4

1230233

查询 B:

AQI 错误

3.2

5

通过正则表达式重命名

使用此转换可使用正则表达式和替换模式重命名部分查询结果。

您可以指定仅适用于匹配项的正则表达式以及支持反向引用的替换模式。例如,假设您正在可视化每台主机的 CPU 使用率,并且想要删除域名。你可以将正则表达式设置为,([^\.]+)\..+将替换模式设置为$1web-01.example.com将变成。web-01

行到字段

行到字段转换将行转换为单独的字段。这很有用,因为字段可以单独设置样式和配置。它还可以使用其他字段作为动态字段配置的来源,或将其映射到字段标签。然后,可以使用其他标签为生成的字段定义更好的显示名称。

此转换包括一个字段表,该表列出了配置查询返回的数据中的所有字段。此表允许您控制应将哪个字段映射到每个配置属性(*Use as** 选项)。如果返回的数据中有多行,您也可以选择要选择的值。

这种转换需要:

  • 一个字段用作字段名称的来源。

    默认情况下,转换使用第一个字符串字段作为源。您可以通过在要改用的字段的 “用作” 列中选择 “字段名称” 来覆盖此默认设置。

  • 一个字段用作值的来源。

    默认情况下,转换使用第一个数值字段作为源。但是,您可以通过在要使用的字段的 “用作” 列中选择字段值来覆盖此默认设置。

在以下位置可视化数据时很有用:

  • 计量表

  • Stat

  • 饼图

将多余字段映射到标签

如果字段未映射到配置属性,Grafana 会自动将其用作输出字段上标签的来源-

例如:

名称 DataCenter

ServerA

美国

100

服务器 B

EU

200

输出:

ServerA(标签: DataCenter: 美国) ServerB(标签: DataCenter:欧盟)

10

20

现在可以在字段显示名称中使用额外的标签,从而提供更完整的字段名称。

如果要从一个查询中提取配置并将其应用于另一个查询,则应使用查询结果转换中的配置。

示例

输入:

名称 最大值

ServerA

10

100

服务器 B

20

200

ServerC

30

300

输出:

ServerA(配置:max=100) ServerB(配置:max=200) ServerC(配置:max=300)

10

20

30

如您所见,源数据中的每一行都变成了一个单独的字段。现在,每个字段还设置了最大配置选项。诸如最小值、最大值、单位和阈值之类的选项都是字段配置的一部分,如果这样设置,则可视化将使用该选项,而不是在面板编辑器选项窗格中手动配置的任何选项。

准备时间序列

当数据源以您要使用的面板不支持的格式返回时间序列数据时,准备时间序列转换非常有用。

这种转换通过将时间序列数据从宽格式转换为长格式或反过来来帮助您解决此问题。

选择多帧时间序列选项,将时间序列数据框从宽格式转换为长格式。

选择宽时间序列选项,将时间序列数据框从长格式转换为宽格式。

序列到行

使用此转换可将多个时间序列数据查询的结果合并为一个结果。这在使用表格面板可视化时很有用。

此转换的结果将包含三列:时间、指标和值。添加了 “指标” 列,因此您可以轻松查看该指标来自哪个查询。通过在源查询中定义 Label 来自定义此值。

在下面的示例中,我们有两个查询返回时间序列数据。在应用转换之前,它会被可视化为两个单独的表。

查询 A:

时间 Temperature

7/7/2020 上午 11:34:20

25

7/7/2020 上午 10:31:22

22

7/7/2020 上午 9:30:05

19

查询 B:

时间 湿度

7/7/2020 上午 11:34:20

24

7/7/2020 上午 10:32:20

29

7/7/2020 上午 9:30:57

33

以下是将 Series 应用于行变换后的结果。

时间 指标

7/7/2020 上午 11:34:20

Temperature

25

7/7/2020 上午 11:34:20

湿度

22

7/7/2020 上午 10:32:20

湿度

29

7/7/2020 上午 10:31:22

Temperature

22

7/7/2020 上午 9:30:57

湿度

33

7/7/2020 上午 9:30:05

Temperature

19

排序依据

此转换将按配置的字段对每一帧进行排序,选中后reverse,值将按相反的顺序返回。

限制

使用此转换来限制显示的行数。

在下面的示例中,我们得到了来自数据源的以下响应:

时间 指标

7/7/2020 上午 11:34:20

Temperature

25

7/7/2020 上午 11:34:20

湿度

22

7/7/2020 上午 10:32:20

湿度

29

7/7/2020 上午 10:31:22

Temperature

22

7/7/2020 上午 9:30:57

湿度

33

7/7/2020 上午 9:30:05

Temperature

19

以下是添加值为 '3' 的 Limit 变换后的结果:

时间 指标

7/7/2020 上午 11:34:20

Temperature

25

7/7/2020 上午 11:34:20

湿度

22

7/7/2020 上午 10:32:20

湿度

29