添加变量
下表列出了 Grafana 随附的变量类型。
变量类型 | 描述 |
---|---|
查询 | 查询生成的值列表,例如指标名称、服务器名称、传感器 ID、数据中心等。添加查询变量。 |
自定义 | 使用逗号分隔列表手动定义变量选项。添加自定义变量。 |
文本框 | 显示一个可选默认值的自由文本输入字段。添加文本框变量。 |
常量 | 定义一个隐藏常量。添加常量变量。 |
数据源 | 快速更改整个仪表板的数据源。添加数据源变量。 |
时间间隔 | 时间间隔变量表示时间跨度。添加时间间隔变量。 |
即时过滤器 | 自动添加到数据源所有指标查询(仅限 Prometheus、Loki、InfluxDB 和 Elasticsearch)的键/值过滤器。添加即时过滤器。 |
全局变量 | 可在查询编辑器表达式中使用的内置变量。请参阅 全局变量。 |
链式变量 | 变量查询可以包含其他变量。请参阅 链式变量。 |
输入通用选项
您必须为您创建的任何变量类型输入通用选项。要创建变量,请执行以下步骤
点击仪表板右上角的 编辑。
点击 设置。
转到 变量 选项卡。
点击 添加变量,或者如果已存在变量,点击 + 新建变量。
在 选择变量类型 下拉列表中选择一个选项。
输入变量的 名称。
(可选)在 标签 字段中,输入变量下拉列表的显示名称。
如果您未输入显示名称,则下拉列表标签为变量名称。
选择一个 在仪表板上显示 选项
- 标签和值 - 变量下拉列表显示变量 名称 或 标签 的值。这是默认设置。
- 值: 变量下拉列表仅显示选定的变量值和一个向下箭头。
- 无: 仪表板上不显示变量下拉列表。
点击以下链接之一,完成添加所选变量类型的步骤
添加查询变量
查询变量允许您编写数据源查询,该查询可以返回指标名称、标签值或键的列表。例如,查询变量可能返回服务器名称、传感器 ID 或数据中心的列表。变量值会随着动态地通过数据源查询获取选项而改变。
查询变量通常只支持字符串。如果您的查询返回数字或任何其他数据类型,您可能需要将它们转换为字符串才能将它们用作变量。例如,对于 Azure 数据源,您可以为此目的使用 tostring
函数。
查询表达式可以包含对其他变量的引用,从而有效地创建链式变量。Grafana 会检测到这一点,并在其链式变量之一发生更改时自动刷新该变量。
注意
查询表达式因数据源而异。有关更多信息,请参阅您的 数据源 文档。
在该页面的 查询选项 部分下,在 数据源 下拉列表中选择一个目标数据源。
您还可以点击 打开高级数据源选择器 查看更多选项,包括添加数据源(仅限管理员)。有关数据源的更多信息,请参阅 添加数据源。
在 查询类型 下拉列表中选择以下选项之一
- 标签名称
- 标签值
- 指标
- 查询结果
- 系列查询
- 经典查询
在 查询 字段中,输入查询。
- 查询字段因数据源而异。一些数据源有自定义查询编辑器。
- 每个数据源都定义了变量值的提取方式。典型的实现是将数据源响应返回的每个字符串值用作变量值。请务必仔细检查数据源文档。
- 一些数据源允许您为值提供自定义“显示名称”。例如,PostgreSQL、MySQL 和 Microsoft SQL Server 插件通过查找结果中名为
__text
和__value
的字段来处理此问题。其他数据源可能查找text
和value
或使用不同的方法。请务必始终仔细检查数据源文档。 - 如果您在单输入字段查询编辑器中需要更多空间,请将光标悬停在该字段右下角的线上并向下拖动以展开。
(可选)在 Regex 字段中,输入正则表达式以过滤或捕获您的数据源查询返回的名称的特定部分。要查看示例,请参阅 使用正则表达式过滤变量。
在 排序 下拉列表中,选择要在下拉列表中显示的值的排序顺序。默认选项 禁用 表示使用您的数据源查询返回的选项顺序。
在 刷新 下,选择变量应何时更新选项
- 在仪表板加载时 - 每次仪表板加载时查询数据源。这会减慢仪表板加载速度,因为在仪表板初始化之前需要完成变量查询。
- 在时间范围更改时 - 每次仪表板加载以及仪表板时间范围更改时查询数据源。如果您的变量选项查询包含时间范围过滤器或依赖于仪表板时间范围,请使用此选项。
(可选)配置 选择选项 部分中的设置
- 多值 - 允许同时选择多个值。
- 包含 All 选项 - 启用包含所有变量的选项。
在 值预览 部分,Grafana 显示当前变量值的列表。查看它们以确保它们与您期望的一致。
点击 保存仪表板。
点击 返回仪表板 和 退出编辑。
添加自定义变量
使用自定义变量表示不更改的值,例如数字或字符串。
例如,如果您有永远不会更改的服务器名称或区域名称,则可能希望将其创建为自定义变量而不是查询变量。由于它们不会更改,您可以在链式变量中使用它们,而不是其他查询变量。这将减少在链式变量更新时 Grafana 必须发送的查询数量。
在该页面的 自定义选项 部分下,在 逗号分隔的值 字段中,以逗号分隔列表的形式输入此变量的值。
您可以包括数字、字符串或由空格和冒号分隔的键/值对。例如,
key1 : value1,key2 : value2
。(可选)配置 选择选项 部分中的设置
- 多值 - 允许同时选择多个值。
- 包含 All 选项 - 启用包含所有变量的选项。
在 值预览 部分,Grafana 显示当前变量值的列表。查看它们以确保它们与您期望的一致。
点击 保存仪表板。
点击 返回仪表板 和 退出编辑。
添加文本框变量
文本框变量显示一个可选默认值的自由文本输入字段。这是最灵活的变量,因为您可以输入任何值。如果您的指标基数较高或想要同时更新仪表板中的多个面板,请使用此类型的变量。
有关基数的更多信息,请参阅 什么是基数峰值及其重要性?
(可选)在该页面的 文本选项 部分下,在 默认值 字段中输入变量的默认值。
如果您在此字段中未输入任何内容,Grafana 将显示一个空文本框供用户输入文本。
点击 保存仪表板。
点击 返回仪表板 和 退出编辑。
添加常量变量
常量变量允许您定义一个隐藏常量。这对于您想要共享的仪表板的指标路径前缀非常有用。当您导出仪表板时,常量变量会转换为导入选项。
常量变量不灵活。每个常量变量只持有一个值,除非更新变量设置,否则无法更新。
当您有需要在查询中包含但不想在每个查询中重新输入的复杂值时,常量变量非常有用。例如,如果您有一个服务器路径名为 i-0b6a61efe2ab843gg
,则可以使用名为 $path_gg
的变量替换它。
添加数据源变量
数据源变量使您能够快速更改整个仪表板的数据源。如果您有数据源的多个实例(例如在不同环境中),它们会非常有用。
在该页面的 数据源选项 部分下,在 类型 下拉列表中选择变量的目标数据源。
(可选)在 实例名称过滤器 中,输入一个正则表达式过滤器,用于选择变量值下拉列表中的数据源实例。
将此字段留空以显示所有实例。
(可选)配置 选择选项 部分中的设置
- 多值 - 允许同时选择多个值。
- 包含 All 选项 - 启用包含所有变量的选项。
在 值预览 部分,Grafana 显示当前变量值的列表。查看它们以确保它们与您期望的一致。
点击 保存仪表板。
点击 返回仪表板 和 退出编辑。
添加时间间隔变量
使用时间间隔变量表示时间跨度,例如 1m
、1h
、1d
。您可以将其视为仪表板范围内的“按时间分组”命令。时间间隔变量会更改数据在可视化中的分组方式。您还可以使用“自动”选项来返回每个时间跨度的固定数据点数量。
您可以将时间间隔变量用作按时间分组的参数(对于 InfluxDB)、日期直方图时间间隔(对于 Elasticsearch)或作为汇总函数参数(对于 Graphite)。
在 时间间隔选项 部分,在 值 字段中输入您希望在变量下拉列表中显示的时间范围间隔。
支持以下时间单位:
s
(秒)、m
(分钟)、h
(小时)、d
(天)、w
(周)、M
(月)和y
(年)。您也可以接受或编辑默认值:1m,10m,30m,1h,6h,12h,1d,7d,14d,30d
。(可选)如果您想将
auto
选项添加到列表中,请选中 自动选项 复选框。此选项允许您指定应将当前时间范围划分多少次以计算当前的
auto
时间跨度。如果您启用它,将出现另外两个选项- 步数 - 选择将当前时间范围划分的次数以计算值,类似于 最大数据点 查询选项。例如,如果当前可见时间范围为 30 分钟,则
auto
时间间隔将数据分组为 30 个一分钟的增量。默认值为 30 步。 - 最小间隔 - 步数间隔不会划分时间的最低阈值。继续 30 分钟的示例,如果最小间隔设置为
2m
,则 Grafana 会将数据分组为 15 个两分钟的增量。
- 步数 - 选择将当前时间范围划分的次数以计算值,类似于 最大数据点 查询选项。例如,如果当前可见时间范围为 30 分钟,则
在 值预览 部分,Grafana 显示当前变量值的列表。查看它们以确保它们与您期望的一致。
点击 保存仪表板。
点击 返回仪表板 和 退出编辑。
时间间隔变量示例
以下示例展示了 Graphite 函数中的模板变量 myinterval
summarize($myinterval, sum, false)
以下示例展示了一个更复杂的 Graphite 示例,来自 Graphite Template Nested Requests 面板
groupByNode(summarize(movingAverage(apps.$app.$server.counters.requests.count, 5), '$interval', 'sum', false), 2, 'sum')
添加即时过滤器
即时过滤器是最复杂和最灵活的可用变量选项之一。与常规的变量选项列表不同,此变量允许您构建仪表板范围的即时查询。
即时过滤器允许您添加标签/值过滤器,这些过滤器会自动添加到使用指定数据源的所有指标查询中。与其他变量不同,您不在查询中使用即时过滤器。相反,您使用即时过滤器为现有查询编写过滤器。
注意
并非所有数据源都支持即时过滤器。支持的数据源示例包括 Prometheus、Loki、InfluxDB 和 Elasticsearch。
要创建即时过滤器,请按照以下步骤操作
在该页面的 即时选项 部分下,在 数据源 下拉列表中选择一个目标数据源。
您还可以点击 打开高级数据源选择器 查看更多选项,包括添加数据源(仅限管理员)。有关数据源的更多信息,请参阅 添加数据源。
(可选)要以逗号分隔值 (CSV) 的形式提供过滤器维度,请打开 使用静态键维度 开关,然后在提供的空间中输入值。
点击 保存仪表板。
输入仪表板更改的可选描述,然后点击 保存。
点击 返回仪表板 和 退出编辑。
现在您可以在仪表板上 过滤数据。
配置变量选择选项
选择选项 是一个功能,可用于管理变量选项的选择。所有选择选项都是可选的,并且默认情况下处于关闭状态。
多值变量
插值选择多个值的变量比较棘手,因为如何将多个值格式化为在使用该变量的给定上下文中有效的字符串并不直接。Grafana 试图通过允许每个数据源插件告知模板插值引擎对多个值使用哪种格式来解决这个问题。
注意
变量上的 自定义 All 值 选项必须为空,以便 Grafana 将所有值格式化为单个字符串。如果为空,Grafana 会将查询中的所有值串联(相加)起来,例如
value1,value2,value3
。如果使用了自定义的all
值,则该值将是类似*
或all
的内容。
使用 Graphite 数据源的多值变量
Graphite 使用 glob 表达式。在这种情况下,如果当前变量值为 host1
、host2
和 host3
,则具有多个值的变量将被插值为 {host1,host2,host3}
。
使用 Prometheus 或 InfluxDB 数据源的多值变量
InfluxDB 和 Prometheus 使用正则表达式,因此同一个变量将被插值为 (host1|host2|host3)
。每个值也会进行正则表达式转义。否则,带有正则表达式控制字符的值将破坏正则表达式。
使用 Elastic 数据源的多值变量
Elasticsearch 使用 Lucene 查询语法,因此同一个变量将格式化为 ("host1" OR "host2" OR "host3")
。在这种情况下,每个值必须进行转义,以便该值仅包含 Lucene 控制词和引号。
多值变量故障排除
自动转义和格式化可能会导致问题,并且理解其背后的逻辑可能很棘手。特别是对于 InfluxDB 和 Prometheus,其中使用正则表达式语法要求变量在正则表达式运算符上下文中使用。
如果您不希望 Grafana 进行这种自动正则表达式转义和格式化,则必须执行以下操作之一
- 关闭 多值 或 包含 All 选项 选项。
- 使用 原始变量格式。
包含 All 选项
Grafana 会将 All
选项添加到变量下拉列表。如果用户选择此选项,则所有变量选项都将被选中。
自定义 All 值
此选项仅在选中 包含 All 选项 时可见。
在 自定义 All 值 字段中输入正则表达式、globs 或 Lucene 语法,以定义 All
选项的值。
默认情况下,All
值包含组合表达式中的所有选项。这可能会变得非常长并可能导致性能问题。有时指定一个自定义的 all
值,例如通配符正则表达式,可能会更好。
为了在 自定义 All 值 选项中使用自定义正则表达式、globs 或 Lucene 语法,它永远不会被转义,因此您必须考虑什么对于您的数据源是有效的值。
全局变量
Grafana 具有可在查询编辑器表达式中使用的全局内置变量。本主题按字母顺序列出了它们并定义了它们。这些变量在查询、仪表板链接、面板链接和数据链接中很有用。
$__dashboard
此变量是当前仪表板的名称。
$__from 和 $__to
Grafana 有两个内置的时间范围变量:$__from
和 $__to
。它们当前默认始终插值为 epoch 毫秒,但您可以控制日期格式。
语法 | 示例结果 | 描述 |
---|---|---|
${__from} | 1594671549254 | Unix 毫秒 epoch |
${__from:date} | 2020-07-13T20:19:09.254Z | 无参数,默认为 ISO 8601/RFC 3339 |
${__from:date:iso} | 2020-07-13T20:19:09.254Z | ISO 8601/RFC 3339 |
${__from:date:seconds} | 1594671549 | Unix 秒 epoch |
${__from:date:YYYY-MM} | 2020-07 | 任何不包含 : 字符的自定义 日期格式。使用浏览器时间。对于 UTC,使用 :date 或 :date:iso |
上面的语法也适用于 ${__to}
。
您也可以在 URL 中使用此变量。例如,您可以将用户发送到显示从六小时前到现在的时间范围的仪表板:https://play.grafana.org/d/000000012/grafana-play-home?viewPanel=2&orgId=1?from=now-6h&to=now
$__interval
您可以使用 $__interval
变量作为按时间分组的参数(对于 InfluxDB、MySQL、Postgres、MSSQL)、日期直方图时间间隔(对于 Elasticsearch)或作为汇总函数参数(对于 Graphite)。
Grafana 会自动计算一个可在查询中用于按时间分组的时间间隔。当数据点多于图形上可显示的数据点时,可以通过按更大的时间间隔分组来提高查询效率。查看 3 个月的数据时,按 1 天分组比按 10 秒分组更高效。图形看起来相同,但查询更快。$__interval
是使用时间范围和图形宽度(像素数)计算得出的。
近似计算:(to - from) / resolution
例如,当时间范围为 1 小时且图形全屏时,时间间隔可能计算为 2m
- 数据点按 2 分钟间隔分组。如果时间范围为 6 个月且图形全屏时,则时间间隔可能是 1d
(1 天) - 数据点按天分组。
在 InfluxDB 数据源中,旧版变量 $interval
与此变量相同。应改用 $__interval
。
InfluxDB 和 Elasticsearch 数据源具有 按时间间隔分组 字段,用于硬编码时间间隔或设置 $__interval
变量的最小限制(通过使用 >
语法 -> >10m
)。
$__interval_ms
此变量是 $__interval
变量的毫秒表示形式,而不是时间间隔格式化字符串。例如,如果 $__interval
是 20m
,则 $__interval_ms
是 1200000
。
$__name
此变量仅在 Singlestat 面板中可用,并可在“选项”选项卡上的前缀或后缀字段中使用。该变量会被替换为系列名称或别名。
注意
从 Grafana 8.0 开始,不再提供 Singlestat 面板。
$__org
此变量是当前组织的 ID。${__org.name}
是当前组织的名称。
$__user
${__user.id}
是当前用户的 ID。${__user.login}
是当前用户的登录句柄。${__user.email}
是当前用户的电子邮件。
$__range
目前仅支持 Prometheus 和 Loki 数据源。此变量表示当前仪表板的时间范围。它通过 to - from
计算得出。它有一个毫秒表示形式($__range_ms
)和一个秒表示形式($__range_s
)。
$__rate_interval
目前仅支持 Prometheus 数据源。$__rate_interval
变量旨在用于 rate
函数。有关详细信息,请参阅 Prometheus 查询变量。
$__rate_interval_ms
此变量是 $__rate_interval
变量的毫秒表示形式,而不是时间间隔格式化字符串。例如,如果 $__rate_interval
是 20m
,则 $__rate_interval_ms
是 1200000
。
$timeFilter 或 $__timeFilter
$timeFilter
变量将当前选定的时间范围作为表达式返回。例如,时间范围间隔“最近 7 天”的表达式是 time > now() - 7d
。
这在多个地方使用,包括
- InfluxDB 数据源的 WHERE 子句。在查询编辑器模式下,Grafana 会自动将其添加到 InfluxDB 查询中。您可以在文本编辑器模式下手动添加它:
WHERE $timeFilter
。 - Azure Monitor 数据源中的 Log Analytics 查询。
- MySQL、Postgres 和 MSSQL 中的 SQL 查询。
$__timeFilter
变量在 MySQL 数据源中使用。
$__timezone
$__timezone
变量返回当前选定的时区,可以是 utc
或 IANA 时区数据库中的条目(例如,America/New_York
)。
如果当前选定的时区是 浏览器时间,Grafana 会尝试确定您的浏览器时区。
链式变量
链式变量,也称为链接变量或嵌套变量,是指在变量查询中包含一个或多个其他变量的查询变量。本节解释了链式变量的工作原理,并提供了使用链式变量的示例仪表板链接。
链式变量查询对于每个数据源都不同,但其前提对于所有数据源都是相同的。您可以在允许使用链式变量查询的任何数据源中使用它们。
可以创建非常复杂的链式模板化仪表板,深度可达 5 或 10 层。技术上,深度或复杂性没有限制,但链接越多,查询负载越大。
Grafana Play 仪表板示例
以下 Grafana Play 仪表板包含相当简单的链式变量,仅有两层深度。要查看变量及其设置,请点击 编辑,然后点击 设置;然后转到 变量 选项卡。这两个示例将在以下部分中展开解释。
示例解释
变量对于复用仪表板和动态更改仪表板中显示的内容非常有用。链式变量在过滤您看到的内容方面尤其有用。
在变量中创建父/子关系,类似于树形结构,您可以在其中选择不同级别的过滤器。
以下部分深入解释了上述仪表板中的链式示例,并在此基础上进行构建。虽然这些示例特定于数据源,但其概念可以广泛应用。
Graphite 示例
在此示例中,有多个应用程序。每个应用程序都有不同的服务器子集。它基于 Graphite Templated Nested。
现在,可以为每个指标源创建单独的变量,但那样就需要知道哪个服务器对应哪个应用程序。更好的解决方案是使用一个变量来过滤另一个。在本例中,当用户更改 app
变量的值时,它会改变 server
变量返回的下拉选项。这两个变量都使用了 Multi-value(多值)和 Include all option(包含所有选项)功能,使用户可以随时选择呈现的部分或全部选项。
app
变量
这个变量的查询语句基本意思是:“查找所有存在的应用程序。”
apps.*
返回的值有 backend
、country
、fakesite
和 All
。
server
变量
这个变量的查询语句基本意思是:“查找当前所选应用程序的所有服务器。”
apps.$app.*
如果用户选择 backend
,则查询语句变为
apps.backend.*
该查询返回所有与 backend
关联的服务器,包括 backend_01
、backend_02
等等。
如果用户选择 fakesite
,则查询语句变为
apps.fakesite.*
该查询返回所有与 fakesite
关联的服务器,包括 web_server_01
、web_server_02
等等。
更多变量
注意
这个示例是理论性的。示例中使用的 Graphite 服务器不包含 CPU 指标。
面板到此停止在两级,但可以继续深入。例如,如果想获取所选服务器的 CPU 指标,可以复制 server
变量并扩展其查询语句,使其变为
apps.$app.$server.cpu.*
这个查询语句基本意思是:“查找所选服务器的 CPU 指标。”
根据用户选择的变量选项,可能会得到如下查询语句:
apps.backend.backend_01.cpu.*
apps.{backend.backend_02,backend_03}.cpu.*
apps.fakesite.web_server_01.cpu.*
InfluxDB 示例
在本例中,有多个数据中心。每个数据中心包含不同的主机子集。此示例基于 InfluxDB Templated 面板。
在本例中,当用户更改 datacenter
变量的值时,它会改变 host
变量返回的下拉选项。host
变量使用了 Multi-value(多值)和 Include all option(包含所有选项)功能,用户可以随时选择呈现的部分或全部选项。datacenter
变量没有使用这两个功能,因此一次只能选择一个数据中心。
datacenter
变量
这个变量的查询语句基本意思是:“查找所有存在的数据中心。”
SHOW TAG VALUES WITH KEY = "datacenter"
返回的值有 America
、Africa
、Asia
和 Europe
。
host
变量
这个变量的查询语句基本意思是:“查找当前所选数据中心的所有主机。”
SHOW TAG VALUES WITH KEY = "hostname" WHERE "datacenter" =~ /^$datacenter$/
如果用户选择 America
,则查询语句变为
SHOW TAG VALUES WITH KEY = "hostname" WHERE "datacenter" =~ /^America/
该查询返回所有与 America
关联的服务器,包括 server1
、server2
等等。
如果用户选择 Europe
,则查询语句变为
SHOW TAG VALUES WITH KEY = "hostname" WHERE "datacenter" =~ /^Europe/
该查询返回所有与 Europe
关联的服务器,包括 server3
、server4
等等。
更多变量
注意
这个示例是理论性的。示例中使用的 InfluxDB 服务器不包含 CPU 指标。
面板到此停止在两级,但可以继续深入。例如,如果想获取所选主机的 CPU 指标,可以复制 host
变量并扩展其查询语句,使其变为
SHOW TAG VALUES WITH KEY = "cpu" WHERE "datacenter" =~ /^$datacenter$/ AND "host" =~ /^$host$/
这个查询语句基本意思是:“查找所选主机的 CPU 指标。”
根据用户选择的变量选项,可能会得到如下查询语句:
SHOW TAG VALUES WITH KEY = "cpu" WHERE "datacenter" =~ /^America/ AND "host" =~ /^server2/
SHOW TAG VALUES WITH KEY = "cpu" WHERE "datacenter" =~ /^Africa/ AND "host" =~ /^server/7/
SHOW TAG VALUES WITH KEY = "cpu" WHERE "datacenter" =~ /^Europe/ AND "host" =~ /^server3+server4/
最佳实践和技巧
以下实践使你的面板和变量更易于使用。
创建新的联动变量
- 变量链创建了父子依赖关系。可以将其想象成一个梯子或一棵树。
- 创建新的变量链的最简单方法是复制想要作为新变量基础的变量。在变量列表中,单击变量条目右侧的 Duplicate variable(复制变量)图标以创建副本。然后可以对父变量的查询进行添加。
- 以这种方式创建的新变量会出现在列表底部。可能需要将其拖动到列表中的其他位置,使其处于逻辑顺序。
变量顺序
可以通过单击每个条目右侧的向上和向下箭头来更改面板变量列表中的变量顺序。Grafana 会根据此列表从左到右排列变量下拉菜单,列表顶部的变量位于最左侧。
- 将没有依赖关系的变量列在顶部,在其子变量之前。
- 每个变量都应紧随其所依赖的变量。
- 请记住,UI 中没有指示哪些变量具有依赖关系。将变量按逻辑顺序排列,以便其他用户(以及自己)轻松使用。
复杂性考虑
变量中的依赖层数越多,更改变量后更新面板所需的时间越长。
例如,如果有一系列四个联动变量(国家、地区、服务器、指标),并且更改了根变量的值(国家),那么 Grafana 必须先运行所有依赖变量的查询,然后才能更新面板中的可视化。
使用正则表达式过滤变量
使用 Regex(正则表达式)查询选项,可以过滤变量查询返回的选项列表或修改返回的选项。
本页展示如何使用正则表达式过滤/修改变量下拉菜单中的值。
使用 Regex(正则表达式)查询选项,可以过滤变量查询返回的选项列表或修改返回的选项。更多信息请参阅 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
使用命名文本和值捕获组进行过滤和修改
使用命名捕获组,可以从变量查询返回的选项中捕获独立的“text”(文本)和“value”(值)部分。这使得变量下拉列表可以为每个可选值包含一个友好的名称。
例如,在查询 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
注意
仅支持
text
和value
捕获组名称。