菜单
Grafana Cloud Enterprise 开源

Graphite 模板变量

您可以使用变量来代替在指标查询中硬编码服务器、应用程序和传感器名称等详细信息。Grafana 在仪表盘顶部的下拉选择框中列出这些变量,帮助您更改仪表盘中显示的数据。Grafana 将此类变量称为模板变量。

有关模板和模板变量的介绍,请参阅模板添加和管理变量文档。

选择查询类型

Graphite 模板变量有三种查询类型

查询类型描述
默认查询使用 tags()tag_values()expand(<metric>) 等函数和指标。
值查询返回包含指标和函数的查询的所有值。
指标名称查询返回包含指标和函数的查询的所有名称。

使用标签变量

要使用标签值创建变量,请使用 Grafana 函数 tagstag_values

查询描述
tags()返回所有标签。
tags(server=~backend\*)仅返回与过滤器表达式匹配的时间序列中出现的标签。
tag_values(server)返回指定标签的标签值。
tag_values(server, server=~backend\*)返回在与这些表达式匹配的时间序列中出现的指定标签的过滤标签值。

多个过滤表达式和表达式可以包含其他变量。例如

tag_values(server, server=~backend\*, app=~${apps:regex})

有关详细信息,请参阅Graphite 关于标签自动完成 API 的文档

在标签查询中使用多值变量

标签查询中的多值变量使用变量的高级格式化语法:{var:regex}。非标签查询对多值变量使用默认的 glob 格式。

标签表达式示例

使用 regex 格式和 Equal Tilde 运算符 =~

text
server=~${servers:regex}

有关更多信息,请参阅高级变量格式选项

使用其他查询变量

编写查询时,使用 metric find 类型的查询。

例如,prod.servers.* 这样的查询将使用通配符位置中存在的所有可能值填充变量。

结果仅包含查询最后一级出现的所有可能值。要获取与查询匹配的完整指标名称,请使用 expand 函数:expand(*.servers.*)

比较展开式和非展开式指标搜索结果

展开式查询返回匹配指标的完整名称。结合正则表达式,您可以使用它提取指标名称的任何部分。相比之下,非展开式查询仅返回指标名称的最后部分,并且不允许您提取指标名称的其他部分。

考虑以下示例指标

  • prod.servers.001.cpu
  • prod.servers.002.cpu
  • test.servers.001.cpu

这些示例演示了展开式和非展开式查询如何获取指标名称的特定部分

非展开式查询结果展开式查询展开式结果
*prod, testexpand(*)prod, test
*.serversserversexpand(*.servers)prod.servers, test.servers
test.serversserversexpand(test.servers)test.servers
*.servers.*001,002expand(*.servers.*)prod.servers.001, prod.servers.002, test.servers.001
test.servers.*001expand(test.servers.*)test.servers.001
*.servers.*.cpucpuexpand(*.servers.*.cpu)prod.servers.001.cpu, prod.servers.002.cpu, test.servers.001.cpu

非展开式查询与展开式查询相同,只是带有一个匹配名称最后部分的 regex。

您还可以创建嵌套变量,其定义中使用其他变量。例如,apps.$app.servers.* 在其查询定义中使用了变量 $app

使用 __searchFilter 过滤查询变量结果

您可以在查询字段中使用 __searchFilter 根据用户在下拉选择框中输入的内容过滤查询结果。如果您没有输入任何内容,__searchFilter 的默认值为 *,当作为正则表达式的一部分使用时,其默认值为空白。

搜索过滤器示例

要将 __searchFilter 作为查询字段的一部分使用,以便在用户在下拉选择框中输入时能够搜索 server

查询

bash
apps.$app.servers.$__searchFilter

标签值

bash
tag_values(server, server=~${__searchFilter:regex})

选择变量语法

variable

Graphite 数据源支持两种变量语法,可用于查询字段

  • $<varname>,例如 apps.frontend.$server.requests.count,这种语法更易于阅读和编写,但不允许您在单词中间使用变量。
  • ${varname},例如 apps.frontend.${server}.requests.count,用于 my.server${serverNumber}.count 之类的表达式。

模板化仪表盘示例

要查看模板化仪表盘示例,请参阅嵌套式 Graphite 模板化仪表盘