添加和管理变量 - Amazon Managed Grafana

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

添加和管理变量

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

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

下表列出了 Grafana 附带的变量类型。

变量类型 描述

查询

查询生成的值列表,例如指标名称、服务器名称、传感器 ID、数据中心等。添加查询变量。

自定义

使用逗号分隔的列表手动定义变量选项。添加自定义变量。

Text box(文本框)

显示带有可选默认值的自由文本输入字段。添加文本框变量。

常量

定义一个隐藏的常量。添加一个常量变量。

数据来源

快速更改整个仪表板的数据源。添加数据源变量。

Interval

间隔变量表示时间跨度。添加间隔变量。

即席过滤器

自动添加到数据源的所有指标查询中的键值筛选器(仅限 Prometheus、Loki、InfluxDB 和 Elasticsearch)。添加临时过滤器。

全局变量

可在查询编辑器的表达式中使用的内置变量。请参阅全局变量。

链式变量

变量查询可以包含其他变量。请参阅链式变量。

输入 “常规” 选项

必须为所创建的任何类型的变量输入常规选项。

输入常规选项
  1. 导航到要为其设置变量的仪表板,然后选择页面顶部的仪表板设置(齿轮)图标。

  2. 在 “变量” 选项卡上,选择 “新建”。

  3. 输入变量的名称

  4. 在 “类型” 列表中,选择 “查询”。

  5. (可选)在标签中,输入变量下拉列表的显示名称。

    如果您未输入显示名称,则下拉标签就是变量名称。

  6. 选择 “隐藏” 选项:

    • 未选择(空白):变量下拉列表显示变量名称标签值。

    • 标签:变量下拉列表仅显示选定的变量值和向下箭头。

    • 变量:仪表板上不显示变量下拉列表。

添加查询变量

查询变量使您可以编写数据源查询,该查询可以返回指标名称、标签值或密钥的列表。例如,查询变量可能返回服务器名称、传感器 ID 或数据中心的列表。变量值在通过数据源查询动态获取选项时会发生变化。

查询变量通常仅支持字符串。如果您的查询返回数字或任何其他数据类型,则可能需要将其转换为字符串才能将其用作变量。例如,对于 Azure 数据源,你可以使用 tostring 函数来实现此目的。

查询表达式可以包含对其他变量的引用,实际上可以创建链接变量。Grafana 会检测到这一点,并在变量的链接变量之一发生变化时自动刷新该变量。

注意

每个数据源的查询表达式都不同。有关更多信息,请参阅您的数据源的文档。

添加查询变量
  1. 如上所述,输入常规选项。

  2. 数据源列表中,选择查询的目标数据源。

  3. 刷新列表中,选择变量应何时更新选项。

    • 仪表板加载时:每次加载仪表板时都会查询数据源。这会减慢仪表板的加载速度,因为需要在初始化仪表板之前完成变量查询。

    • 时间范围更改时:在仪表板时间范围发生变化时查询数据源。仅当您的变量选项查询包含时间范围筛选器或依赖于仪表板的时间范围时,才使用此选项。

  4. 在 “查询” 字段中,输入查询。

    • 查询字段因您的数据源而异。某些数据源具有自定义查询编辑器。

    • 如果您需要在单个输入字段查询编辑器中留出更多空间,请将光标悬停在字段右下角的行上,然后向下拖动以展开。

  5. (可选)在 Regex 字段中,键入正则表达式以筛选或捕获数据源查询返回的名称的特定部分。要查看示例,请参阅使用正则表达式过滤变量

  6. 排序列表中,选择要在下拉列表中显示的值的排序顺序。默认选项 “禁用” 表示将使用数据源查询返回的选项顺序。

  7. (可选)输入选择选项

  8. 值预览中,Grafana 显示当前变量值的列表。查看它们以确保它们符合您的期望。

  9. 选择 “加” 将变量添加到仪表板。

添加自定义变量

对不变的值(例如数字或字符串)使用自定义变量。

例如,如果您的服务器名称或区域名称永远不会更改,则可能需要将其创建为自定义变量而不是查询变量。因为它们不会改变,所以你可以在链式变量中使用它们,而不是在其他查询变量中使用它们。这将减少 Grafana 在更新链式变量时必须发送的查询数量。

添加自定义变量
  1. 如上所述,输入常规选项。

  2. 用逗号列表分隔的值,在逗号分隔的列表中输入此变量的值。可以包含由空格和冒号分隔的数字、字符串或键值对。例如,key1 : value1,key2 : value2

  3. (可选)输入选择选项

  4. 值预览中,Grafana 显示当前变量值的列表。查看它们以确保它们符合您的期望。

  5. 选择 “加” 将变量添加到仪表板。

添加文本框变量

文本框变量显示带有可选默认值的自由文本输入字段。这是最灵活的变量,因为您可以输入任何值。如果您的指标具有高基数,或者您想同时更新仪表板中的多个面板,请使用这种类型的变量。

添加文本框变量
  1. 如上所述,输入常规选项。

  2. (可选)在 “默认值” 字段中,选择变量的默认值。如果您未在此字段中输入任何内容,Grafana 会显示一个空文本框供用户键入文本。

  3. 值预览中,Grafana 显示当前变量值的列表。查看它们以确保它们符合您的期望。

  4. 选择 “加” 将变量添加到仪表板。

添加常量变量

量变量使您可以定义隐藏的常量。这对于要共享的仪表板的指标路径前缀很有用。导出仪表板时,常量变量会转换为导入选项。

常量变量灵活。每个常量变量仅包含一个值,除非您更新变量设置,否则无法对其进行更新。

当你有复杂的值需要包含在查询中但又不想在每个查询中都重新键入时,常量变量很有用。例如,如果您有一个名为的服务器路径i-0b6a61efe2ab843gg,则可以将其替换为一个名为的变量$path_gg

添加常量变量
  1. 如上所述,输入常规选项。

  2. 在 “” 字段中,输入变量值。您可以输入字母、数字和符号。如果你使用原始格式,你甚至可以使用通配符。

  3. 值预览中,Grafana 显示当前变量值的列表。查看它们以确保它们符合您的期望。

  4. 选择 “加” 将变量添加到仪表板。

添加数据源变量

数据源变量使您能够快速更改整个仪表板的数据源。如果您有多个数据源实例(可能在不同的环境中),它们会很有用。

添加数据源变量
  1. 如上所述,输入常规选项。

  2. 类型列表中,为变量选择目标数据源。

  3. (可选)在实例名称筛选器中,在变量值下拉列表中输入要从哪些数据源实例中选择的正则表达式筛选器。将此字段留空可显示所有实例。

  4. (可选)输入选择选项

  5. 值预览中,Grafana 显示当前变量值的列表。查看它们以确保它们符合您的期望。

  6. 选择 “加” 将变量添加到仪表板。

添加间隔变量

使用间变量来表示时间跨度1m,例如1h、或1d。您可以通过时间命令将它们视为仪表板范围内的群组。间隔变量会更改数据在可视化中的分组方式。您也可以使用 “自动选项” 在每个时间段内返回设定数量的数据点。

您可以使用间隔变量作为按时间分组的参数(对于 InfluxDB)、日期直方图间隔(对于 Elasticsearch)或作为汇总函数参数(对于 Graphite)进行分组。

添加间隔变量
  1. 如上所述,输入常规选项。

  2. 字段中,输入要在变量下拉列表中显示的时间范围间隔。支持以下时间单位:s (seconds)m (minutes)h (hours)d (days)w (weeks)M (months)、和y (years)。您也可以接受或编辑默认值:1m,10m,30m,1h,6h,12h,1d,7d,14d,30d.

  3. (可选)如果要将自动选项添加到列表中,请打开 “自动auto选项”。此选项允许您指定应将当前时间范围分割多少次以计算当前auto时间跨度。如果将其打开,则会出现另外两个选项:

    • 步数- 选择当前时间范围的划分次数以计算该值,类似于最大数据点查询选项。例如,如果当前可见的时间范围为 30 分钟,则auto间隔将数据分组为 30 个一分钟增量。默认值为 30 步。

    • 最小间隔- 最小阈值,低于该阈值的步数间隔不会除以时间。继续以 30 分钟为例,如果将最小间隔设置为 2m,则 Grafana 会将数据分组为 15 个两分钟增量。

  4. 值预览中,Grafana 显示当前变量值的列表。查看它们以确保它们符合您的期望。

  5. 选择 “加” 将变量添加到仪表板。

间隔变量示例

以下示例显示了 Graphite 函数myinterval中的模板变量:

summarize($myinterval, sum, false)

添加即席过滤器

即席筛选器允许您添加键值筛选器,这些筛选器会自动添加到使用指定数据源的所有指标查询中。与其他变量不同,您不在查询中使用临时筛选器。相反,您可以使用即席过滤器为现有查询编写过滤器。

注意

临时过滤器变量仅适用于 Prometheus、Loki、InfluxDB 和 Elasticsearch 数据源。

  1. 如上所述,输入常规选项。

  2. 数据源列表中,选择目标数据源。

  3. 选择 “加” 将变量添加到仪表板。

创建即席过滤器

即席筛选器是可用的最复杂、最灵活的变量选项之一。此变量允许您构建仪表板范围的即席查询,而不是常规的变量选项列表。以这种方式应用的筛选器将应用于仪表板上的所有面板。

配置变量选择选项

选择选项是一项可用于管理变量选项选择的功能。所有选择选项都是可选的,默认情况下它们处于关闭状态。

多值变量

对选择了多个值的变量进行插值很棘手,因为如何将多个值格式化为在使用该变量的给定上下文中有效的字符串并不直截了当。Grafana 试图通过允许每个数据源插件通知模板插值引擎对多个值使用哪种格式来解决这个问题。

注意

变量上的 “自定义所有值” 选项必须为空,Grafana 才能将所有值格式化为单个字符串。如果将其留空,则 Grafana 会将查询中的所有值串联(相加)。例如,value1,value2,value3。如果使用自定义all值,则该值将改为*all

带有 Graphite 数据源的多值变量

Graphite 使用全局表达式。在这种情况下,将对具有多个值的变量进行插值,就好{host1,host2,host3}像当前变量值为 host1、host 2 和 host3 一样。

具有 Prometheus 或 InfluxDB 数据源的多值变量

InfluxDB 和 Prometheus 使用正则表达式,因此将对相同的变量进行插值。(host1|host2|host3)每个值也会被正则表达式转义。否则,带有正则表达式控制字符的值将破坏正则表达式。

带有 Elastic 数据源的多值变量

Elasticsearch 使用 lucene 查询语法,因此相同的变量格式为。("host1" OR "host2" OR "host3")在这种情况下,必须对每个值进行转义,以便该值仅包含 lucene 控制词和引号。

多值变量疑难解答

自动转义和格式化可能会导致问题,而且要掌握其背后的逻辑可能很棘手。特别是对于 InfluxDB 和 Prometheus 来说,使用正则表达式语法需要在正则表达式运算符上下文中使用该变量。

如果您不希望 Grafana 自动进行正则表达式转义和格式化,则必须执行以下操作之一:

“全部包含” 选项

Grafana 在变量下拉All列表中添加了一个选项。如果用户选择此选项,则会选择所有变量选项。

自定义所有值

仅当选择 “全部包含” 选项时,此选项才可见。

在 “自定义所有值” 字段中输入正则表达式、glob 或 lucene 语法来定义选项的值All

默认情况下,该All值包括组合表达式中的所有选项。这可能会变得很长,并且可能会出现性能问题。有时最好指定一个自定义 all 值,比如通配符正则表达式。

要在 “自定义所有值” 选项中使用自定义正则表达式、glob 或 lucene 语法,它永远不会被转义,因此您必须考虑什么是数据源的有效值。

全局变量

Grafana 具有全局内置变量,可以在查询编辑器的表达式中使用。本主题按字母顺序列出它们并对其进行了定义。这些变量在查询、仪表板链接、面板链接和数据链接中非常有用。

$__仪表板

此变量是当前仪表板的名称。

$__from 和 $__to

Grafana 有两个内置的时间范围变量:和。$__from $__to默认情况下,它们当前始终以纪元毫秒为单位进行插值,但您可以控制日期格式。

语法 结果示例 描述

${__from}

1594671549254

Unix 毫秒时代

${__from:date}

2020-07-13T 20:19:09.254 Z

没有参数,默认为 ISO 8601/RFC 3339

${__from:date:iso}

2020-07-13T 20:19:09.254 Z

ISO 8601/RFC 3339

${__from:date:seconds}

1594671549

Unix 秒纪元

${__from:date:YYYY-MM}

2020-07

任何不包含:字符的自定义日期格式

上面的语法也适用于${__to}

$__间隔

你可以将该$__interval变量用作按时间(对于 InfluxDB、MySQL、Postgres、MSSQL)、日期直方图间隔(适用于 Elasticsearch)进行分组的参数,也可以用作汇总函数参数(对于 Graphite)进行分组。

Grafana 会自动计算一个间隔,该间隔可用于在查询中按时间进行分组。当数据点多于图表上显示的数据点时,可以通过按更大的间隔进行分组来提高查询的效率。例如,如果您正在查看价值 3 个月的数据的图表,则可能无法在分钟级别上看到详细信息。按小时或天分组可以提高查询效率,而不会影响图表显示的内容。使用图表的时间范围和宽度(像素数)计算得出。$__interval

近似计算:(to - from) / resolution

例如,当时间范围为 1 小时且图表为全屏模式时,可以将间隔计算为 2m-将点按照 2 分钟间隔进行分组。如果时间范围为 6 个月并且图表是全屏显示的,则间隔可能是1d(1 天)-点按天分组。

在 InfluxDB 数据源中,传统变量$interval是同一个变量。 $__interval应该改用。

InfluxDB 和 Elasticsearch 数据源的Group by time interval字段用于对间隔进行硬编码或设置$__interval变量的最小限制(使用语法->)。> >10m

$__间隔_ms

此变量是以毫秒为单位的$__interval变量,而不是时间间隔格式的字符串。例如,如果$__interval是,20m$__interval_ms1200000

$__org

此变量是当前组织的 ID。 ${__org.name}是当前组织的名称。

$__user

${__user.id}是当前用户的 ID。 ${__user.login}是当前用户的登录账号。 ${__user.email}是当前用户的电子邮件。

$__区间

目前仅支持 Prometheus 和 Loki 数据源。此变量表示当前仪表板的范围。它是通过计算得出的to - from。它有一个毫秒和第二个表示形式,叫做 and。$__range_ms $__range_s

$__rate_interval

目前仅支持 Prometheus 数据源。该$__rate_interval变量本应用于速率函数。

$timeFilter 或 $__timeFilt

$timeFilter变量以表达式形式返回当前选定的时间范围。例如,时间范围间隔Last 7 days表达式为time > now() - 7d

它用于多个地方,包括:

  • InfluxDB 数据源的 WHERE 子句。在查询编辑器模式下,Grafana 会自动将其添加到 InfluxDB 查询中。您可以在文本编辑器模式下手动添加:WHERE $timeFilter.

  • 在 Azure 监控器数据源中记录分析查询。

  • MySQL、Postgres 和 MSSQL 中的 SQL 查询。

  • $__timeFilter变量用于 MySQL 数据源。

链式变量

链式变量,也称为链接变量嵌套变量,是变量查询中包含一个或多个其他变量的查询变量。本节说明了链式变量的工作原理,并提供了指向使用链式变量的示例仪表板的链接。

每个数据源的链式变量查询都不同,但所有数据源的前提都是一样的。你可以在任何允许链式变量查询的数据源中使用链式变量查询。

可能存在极其复杂的链接模板化仪表板,深度为 5 或 10 级。从技术上讲,您可以访问的深度或复杂程度没有限制,但是您拥有的链接越多,查询负载就越大。

最佳实践和技巧

以下做法将使您的仪表板和变量更易于使用。

创建新的链接变量

  • 链接变量会创建父/子依赖关系。你可以把它们想象成梯子或一棵树。

  • 创建新的链式变量的最简单方法是复制要作为新变量基础的变量。在变量列表中,单击变量条目右侧的复制变量图标以创建副本。然后,您可以将父变量的查询添加到查询中。

  • 以这种方式创建的新变量显示在列表的底部。您可能需要将其拖动到列表中的其他位置才能使其按逻辑顺序排列。

可变顺序

您可以通过单击每个条目右侧的向上和向下箭头来更改仪表板变量列表中变量的顺序。Grafana 根据此列表从左到右列出了变量下拉列表,变量位于最左边的顶部。

  • 在子变量之前列出顶部没有依赖关系的变量。

  • 每个变量都应跟在它所依赖的变量之后。

  • 请记住,用户界面中没有指示哪些变量具有依赖关系。按逻辑顺序列出变量,便于其他用户(和您自己)使用。

复杂性考虑

变量中的依赖层越多,更改变量后更新仪表板所需的时间就越长。

例如,如果您有一系列四个关联变量(国家、地区、服务器、指标),并且您更改了根变量值(国家),那么 Grafana 在更新控制面板中的可视化效果之前必须对所有因变量运行查询。

管理变量

变量页面允许您添加变量和管理现有变量。它还允许您检查变量并确定变量是否在其他变量或仪表板中被引用(或使用)。

移动:您可以使用拖放操作在列表中向上或向下移动变量。

克隆:要克隆变量,请单击右侧一组图标中的克隆图标。这将创建变量的副本,其前缀为原始变量的名称。copy_of_

删除:要删除变量,请单击右侧一组图标中的垃圾桶图标。

使用正则表达式过滤变量

使用 Regex Query 选项,您可以筛选变量查询返回的选项列表或修改返回的选项。

本页显示如何使用正则表达式筛选/修改变量下拉列表中的值。

使用正则表达式查询选项,您可以筛选变量查询返回的选项列表或修改返回的选项。有关更多信息,请参阅 Mozilla 关于正则表达式的指南。

以下示例显示了对以下选项列表的筛选

backend_01 backend_02 backend_03 backend_04

进行筛选,以便仅返回以01或结尾02的选项

正则表达式:

/ ( 01|02 ) $/

结果:

backend_01 backend_02

使用正则表达式捕获组筛选和修改选项以返回部分文本

正则表达式:

/.* ( 01|02 ) /

结果:

01 02

筛选和修改——Prometheus 示例

选项清单:

up{instance="demo.robustperception.io:9090",job="prometheus"} 1 1521630638000 up{instance="demo.robustperception.io:9093",job="alertmanager"} 1 1521630638000 up{instance="demo.robustperception.io:9100",job="node"} 1 1521630638000

正则表达式:

/. *instance=" ( [^"]* ) .*/

结果:

demo.robustperception.io:9090 demo.robustperception.io:9093 demo.robustperception.io:9100

使用命名文本和值捕获组进行筛选和修改

使用命名的捕获组,您可以从变量查询返回的选项中捕获单独的 “文本” 和 “值” 部分。这允许变量下拉列表包含每个可以选择的值的友好名称。

例如,在查询 node_hwmon_chip_names Prometheus 指标时,比chip_name该值友好得多。chip因此,以下变量查询结果:

node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_0",chip_name="enp216s0f0np0"} 1 node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_1",chip_name="enp216s0f0np1"} 1 node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_2",chip_name="enp216s0f0np2"} 1 node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_3",chip_name="enp216s0f0np3"} 1

通过以下正则表达式传递:

/chip_name="(?<text>[ ^ " ] + ) |chip=" (?<value >[ ^ " ] + )/g

将生成以下下拉列表:

Display Name Value ------------ ------------------------- enp216s0f0np0 0000:d7:00_0_0000:d8:00_0 enp216s0f0np1 0000:d7:00_0_0000:d8:00_1 enp216s0f0np2 0000:d7:00_0_0000:d8:00_2 enp216s0f0np3 0000:d7:00_0_0000:d8:00_3

仅支持textvalue捕获组名称。

变量页面可让您轻松识别变量是否在其他变量或仪表板中被引用(或使用)。

任何被引用或使用的变量旁边都有一个绿色的复选标记,而未引用的变量旁边有一个橙色的警告图标。此外,所有引用的变量在绿色复选标记旁边都有一个依赖关系图标。您可以选择该图标来查看依赖关系图。依赖关系图可以移动。您可以使用鼠标滚轮或等效工具进行放大或缩小。