添加变量
下表列出了 Grafana 附带的变量类型。
变量类型 | 描述 |
---|---|
查询 | 查询生成的值列表,例如指标名称、服务器名称、传感器 ID、数据中心等。添加查询变量。 |
自定义 | 使用逗号分隔列表手动定义变量选项。添加自定义变量。 |
文本框 | 显示带有可选默认值的自由文本输入字段。添加文本框变量。 |
常量 | 定义隐藏常量。添加常量变量。 |
数据源 | 快速更改整个仪表板的数据源。添加数据源变量。 |
间隔 | 间隔变量表示时间跨度。添加间隔变量。 |
Ad hoc 过滤器 | 自动添加到数据源(仅限 Prometheus、Loki、InfluxDB 和 Elasticsearch)的所有指标查询中的键/值过滤器。添加 Ad hoc 过滤器。 |
全局变量 | 内置变量,可在查询编辑器中的表达式中使用。请参阅全局变量。 |
链式变量 | 变量查询可以包含其他变量。请参阅链式变量。 |
输入常规选项
您必须为您创建的任何类型的变量输入常规选项。要创建变量,请按照以下步骤操作
单击仪表板右上角的 编辑。
单击 设置。
转到 变量 选项卡。
单击 添加变量,或者如果已存在变量,则单击 + 新建变量。
在 选择变量类型 下拉列表中选择一个选项。
输入变量的 名称。
(可选)在 标签 字段中,输入变量下拉列表的显示名称。
如果您不输入显示名称,则下拉列表标签将为变量名称。
选择 在仪表板上显示 选项
- 标签和值 - 变量下拉列表显示变量 名称 或 标签 值。这是默认设置。
- 值: 变量下拉列表仅显示选定的变量值和一个向下箭头。
- 无: 仪表板上不显示变量下拉列表。
单击以下链接之一以完成添加您选择的变量类型的步骤
添加查询变量
查询变量使您能够编写数据源查询,该查询可以返回指标名称、标签值或键的列表。例如,查询变量可能返回服务器名称、传感器 ID 或数据中心的列表。变量值会随着它们使用数据源查询动态获取选项而更改。
查询变量通常仅支持字符串。如果您的查询返回数字或任何其他数据类型,您可能需要将它们转换为字符串以用作变量。例如,对于 Azure 数据源,您可以使用 tostring
函数来实现此目的。
查询表达式可以包含对其他变量的引用,从而有效地创建链接变量。 Grafana 会检测到这一点,并在其中一个链接变量更改时自动刷新变量。
注意
每个数据源的查询表达式都不同。有关更多信息,请参阅您的数据源的文档。
在页面的 查询选项 部分下,在 数据源 下拉列表中选择目标数据源。
您还可以单击 打开高级数据源选择器 以查看更多选项,包括添加数据源(仅限管理员)。有关数据源的更多信息,请参阅添加数据源。
在 查询类型 下拉列表中,选择以下选项之一
- 标签名称
- 标签值
- 指标
- 查询结果
- 系列查询
- 经典查询
在 查询 字段中,输入查询。
- 查询字段因您的数据源而异。某些数据源具有自定义查询编辑器。
- 每个数据源都定义了如何提取变量值。典型的实现方式是将数据源响应返回的每个字符串值用作变量值。请务必仔细检查数据源的文档。
- 某些数据源允许您为值提供自定义“显示名称”。例如,PostgreSQL、MySQL 和 Microsoft SQL Server 插件通过在结果中查找名为
__text
和__value
的字段来处理此问题。其他数据源可能会查找text
和value
或使用不同的方法。始终记得仔细检查数据源的文档。 - 如果您在单个输入字段查询编辑器中需要更多空间,请将光标悬停在字段右下角的线条上,然后向下拖动以展开。
(可选)在 Regex 字段中,键入正则表达式以过滤或捕获数据源查询返回的名称的特定部分。要查看示例,请参阅使用正则表达式过滤变量。
在 排序 下拉列表中,选择要在下拉列表中显示的值的排序顺序。默认选项 禁用 表示使用数据源查询返回的选项顺序。
在 刷新 下,选择变量应何时更新选项
- 在仪表板加载时 - 每次仪表板加载时查询数据源。这会减慢仪表板加载速度,因为变量查询需要在仪表板初始化之前完成。
- 在时间范围更改时 - 每次仪表板加载以及仪表板时间范围更改时查询数据源。如果您的变量选项查询包含时间范围过滤器或依赖于仪表板时间范围,请使用此选项。
(可选)在选择选项部分中配置设置
- 多值 - 允许同时选择多个值。
- 包含全部选项 - 启用包含所有变量的选项。
在 值预览 部分中,Grafana 显示当前变量值的列表。查看它们以确保它们与您的预期相符。
单击 保存仪表板。
单击 返回仪表板 和 退出编辑。
添加自定义变量
对于不更改的值(例如数字或字符串),请使用自定义变量。
例如,如果您有永不更改的服务器名称或区域名称,则您可能希望将它们创建为自定义变量,而不是查询变量。因为它们不会更改,所以您可以在链式变量中使用它们,而不是其他查询变量。这将减少在更新链式变量时 Grafana 必须发送的查询数量。
在页面的 自定义选项 部分下,在 逗号分隔的值 字段中,以逗号分隔列表的形式输入此变量的值。
您可以包括数字、字符串或以空格和冒号分隔的键/值对。例如,
key1 : value1,key2 : value2
。(可选)在选择选项部分中配置设置
- 多值 - 允许同时选择多个值。
- 包含全部选项 - 启用包含所有变量的选项。
在 值预览 部分中,Grafana 显示当前变量值的列表。查看它们以确保它们与您的预期相符。
单击 保存仪表板。
单击 返回仪表板 和 退出编辑。
添加文本框变量
文本框变量显示带有可选默认值的自由文本输入字段。这是最灵活的变量,因为您可以输入任何值。如果您有高基数的指标,或者您想同时更新仪表板中的多个面板,请使用此类型的变量。
有关基数的更多信息,请参阅什么是基数峰值以及它们为何重要?
(可选)在页面的 文本选项 部分下,在 默认值 字段中,输入变量的默认值。
如果您在此字段中不输入任何内容,则 Grafana 将显示一个空文本框,供用户在其中键入文本。
单击 保存仪表板。
单击 返回仪表板 和 退出编辑。
添加常量变量
常量变量使您能够定义隐藏常量。这对于您想要共享的仪表板的指标路径前缀非常有用。当您导出仪表板时,常量变量将转换为导入选项。
常量变量不灵活。每个常量变量仅保存一个值,除非您更新变量设置,否则无法更新该值。
当您有需要在查询中包含但又不想在每个查询中重新键入的复杂值时,常量变量非常有用。例如,如果您有一个名为 i-0b6a61efe2ab843gg
的服务器路径,则可以用名为 $path_gg
的变量替换它。
添加数据源变量
数据源变量使您能够快速更改整个仪表板的数据源。如果您有多个数据源实例(可能在不同的环境中),它们非常有用。
在页面的 数据源选项 部分下,在 类型 下拉列表中,选择变量的目标数据源。
(可选)在 实例名称过滤器 中,输入正则表达式过滤器,用于筛选变量值下拉列表中要从中选择的数据源实例。
将此字段留空以显示所有实例。
(可选)在选择选项部分中配置设置
- 多值 - 允许同时选择多个值。
- 包含全部选项 - 启用包含所有变量的选项。
在 值预览 部分中,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
选项添加到列表中,请选中 自动选项 复选框。如果启用此选项,则会显示另外两个选项
- 步长计数 - 选择将当前时间范围划分多少次以计算值,类似于 最大数据点数 查询选项。例如,如果当前可见的时间范围为 30 分钟,则
auto
间隔会将数据分组为 30 个一分钟的增量。默认值为 30 步。 - 最小间隔 - 步长计数间隔不划分时间的最小阈值。继续 30 分钟的示例,如果最小间隔设置为 2 分钟,则 Grafana 会将数据分组为 15 个两分钟的增量。
- 步长计数 - 选择将当前时间范围划分多少次以计算值,类似于 最大数据点数 查询选项。例如,如果当前可见的时间范围为 30 分钟,则
在 值预览 部分中,Grafana 显示当前变量值的列表。查看它们以确保它们与您的预期相符。
单击 保存仪表板。
单击 返回仪表板 和 退出编辑。
间隔变量示例
以下示例显示了 Graphite 函数中的模板变量 myinterval
summarize($myinterval, sum, false)
以下示例显示了更复杂的 Graphite 示例,来自 Graphite 模板嵌套请求面板
groupByNode(summarize(movingAverage(apps.$app.$server.counters.requests.count, 5), '$interval', 'sum', false), 2, 'sum')
添加 Ad hoc 过滤器
Ad hoc 过滤器是可用的最复杂和最灵活的变量选项之一。此变量不是常规的变量选项列表,而是允许您构建仪表板范围的 Ad hoc 查询。
Ad hoc 过滤器允许您添加标签/值过滤器,这些过滤器会自动添加到使用指定数据源的所有指标查询中。与其他变量不同,您不在查询中使用 Ad hoc 过滤器。相反,您可以使用 Ad hoc 过滤器为现有查询编写过滤器。
注意
并非所有数据源都支持 Ad hoc 过滤器。支持 Ad hoc 过滤器的数据源示例包括 Prometheus、Loki、InfluxDB 和 Elasticsearch。
要创建 Ad hoc 过滤器,请按照以下步骤操作
在页面的 Ad hoc 选项 部分下,在 数据源 下拉列表中选择目标数据源。
您还可以单击 打开高级数据源选择器 以查看更多选项,包括添加数据源(仅限管理员)。有关数据源的更多信息,请参阅添加数据源。
(可选)要以逗号分隔值 (CSV) 的形式提供过滤器维度,请打开 使用静态键维度 开关,然后在提供的空间中输入值。
单击 保存仪表板。
输入仪表板更改的可选描述,然后单击 保存。
单击 返回仪表板 和 退出编辑。
现在您可以在仪表板上过滤数据。
配置变量选择选项
选择选项 是您可以用来管理变量选项选择的功能。所有选择选项都是可选的,并且默认情况下处于关闭状态。
多值变量
内插选择多个值的变量很棘手,因为它不清楚如何将多个值格式化为在变量使用的给定上下文中有效的字符串。 Grafana 尝试通过允许每个数据源插件告知模板内插引擎对多个值使用哪种格式来解决此问题。
注意
变量上的 自定义全部值 选项必须为空,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 执行此自动正则表达式转义和格式化,则必须执行以下操作之一
- 关闭多值或包含全部选项选项。
- 使用 原始变量格式。
包含全部选项
Grafana 向变量下拉列表中添加一个 All
选项。如果用户选择此选项,则会选中所有变量选项。
自定义全部值
仅当选择包含全部选项时,此选项才可见。
在自定义全部值字段中输入正则表达式、glob 或 Lucene 语法,以定义 All
选项的值。
默认情况下,All
值包含组合表达式中的所有选项。这可能会变得非常长,并可能导致性能问题。有时,最好指定自定义全部值,例如通配符正则表达式。
为了在自定义全部值选项中使用自定义正则表达式、glob 或 Lucene 语法,它永远不会被转义,因此您必须考虑什么才是数据源的有效值。
全局变量
Grafana 具有全局内置变量,可在查询编辑器的表达式中使用。本主题按字母顺序列出并定义了这些变量。这些变量在查询、仪表板链接、面板链接和数据链接中非常有用。
$__dashboard
此变量是当前仪表板的名称。
$__from
和 $__to
Grafana 有两个内置时间范围变量:$__from
和 $__to
。默认情况下,它们当前始终插值为 epoch 毫秒,但您可以控制日期格式。
语法 | 示例结果 | 描述 |
---|---|---|
${__from} | 1594671549254 | Unix 毫秒时间戳 |
${__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 秒时间戳 |
${__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),或用作 summarize 函数参数(对于 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 面板中可用,并且可以在“选项”选项卡上的前缀或后缀字段中使用。该变量将替换为序列名称或别名。
注意
Singlestat 面板从 Grafana 8.0 开始不再可用。
$__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 模板化嵌套。
现在,您可以为每个指标源创建单独的变量,但是您必须知道哪个服务器与哪个应用程序关联。更好的解决方案是使用一个变量来过滤另一个变量。在此示例中,当用户更改 app
变量的值时,它会更改 server
变量返回的下拉选项。这两个变量都使用多值选项和包含全部选项,使用户能够随时选择呈现的部分或全部选项。
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 模板化 仪表板。
在此示例中,当用户更改 datacenter
变量的值时,它会更改 host
变量返回的下拉选项。host
变量使用多值选项和包含全部选项,允许用户随时选择呈现的部分或全部选项。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/
最佳实践和技巧
以下实践使您的仪表板和变量更易于使用。
创建新的链接变量
- 链接变量创建父/子依赖关系。您可以将它们设想为阶梯或树。
- 创建新的链式变量的最简单方法是复制要作为新变量基础的变量。在变量列表中,单击变量条目右侧的复制变量图标以创建副本。然后,您可以添加到父变量的查询中。
- 以这种方式创建的新变量会显示在列表的底部。您可能需要将其拖动到列表中的不同位置,以使其具有逻辑顺序。
变量顺序
您可以通过单击每个条目右侧的向上和向下箭头来更改仪表板变量列表中的变量顺序。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
使用命名文本和值捕获组进行过滤和修改
使用命名捕获组,您可以从变量查询返回的选项中捕获单独的“文本”和“值”部分。这允许变量下拉列表包含每个可选值的友好名称。
例如,当查询 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
捕获组名称。