菜单
Grafana Cloud 企业版 开源

Prometheus 模板变量

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

有关模板和模板变量的介绍,请参阅模板化以及添加和管理变量

使用查询变量

您可以使用多种不同的变量类型,但类型为 Query 的变量将向 Prometheus 查询指标列表、标签、标签值、查询结果或时序数据。

选择 Prometheus 数据源查询类型并输入所需参数

查询类型输入(* 必需)描述使用的 API 端点
标签名称metric返回所有匹配指定 metric 正则表达式的标签名称列表。/api/v1/labels
标签值label*,metric返回所有指标或可选指标中 label 的标签值列表。/api/v1/label/label/values 或 /api/v1/series
指标metric返回所有匹配指定 metric 正则表达式的指标列表。/api/v1/label/__name__/values
查询结果query返回 query 的 Prometheus 查询结果列表。/api/v1/query
时序查询metriclabel 或两者返回与输入数据关联的时序数据列表。/api/v1/series
经典查询经典查询字符串已废弃,经典版变量查询编辑器。使用以下语法输入包含查询类型的字符串:label_values(<metric>, <label>)全部

有关*指标名称*、*标签名称*和*标签值*的详细信息,请参阅 Prometheus 文档

查询选项

在查询变量类型下,您可以设置以下查询选项

选项描述
数据源从下拉列表中选择您的数据源。
选择查询类型选项包括 defaultvaluemetric name。每种查询类型对应不同的 Prometheus 端点。
正则表达式可选,如果您想提取时序名称或指标节点的一部分。
排序默认是 disabled。选项包括 alphabetical(字母顺序)、numerical(数字顺序)和 alphabetical case-sensitive(字母顺序,区分大小写)。
刷新何时更新变量的值。选项包括 On dashboard load(仪表盘加载时)和 On time range change(时间范围改变时)。

选择选项

以下选择选项可用

  • 多值 - 勾选此选项以同时选择多个值。

  • 包含所有选项 - 勾选此选项以包含所有变量。

使用间隔和范围变量

您可以在查询变量中使用一些全局内置变量,例如 $__interval$__interval_ms$__range$__range_s$__range_ms。有关详细信息,请参阅全局内置变量label_values 函数不支持查询,因此您可以结合使用 query_result 函数和这些变量来过滤变量查询。

请确保将变量的 refresh 触发器设置为 On Time Range Change(时间范围改变时),以便在更改仪表盘上的时间范围时获得正确的实例。

示例

根据仪表盘中显示的时间范围内平均 QPS 填充包含最繁忙的 5 个请求实例的变量

Query: query_result(topk(5, sum(rate(http_requests_total[$__range])) by (instance)))
Regex: /"([^"]+)"/

使用 $__range_s 填充一个变量,该变量包含在仪表盘中显示的时间范围内处于特定状态的实例

Query: query_result(max_over_time(<metric>[${__range_s}s]) != <state>)
Regex:

使用 $__rate_interval

我们建议在 rateincrease 函数中使用 $__rate_interval,而不是 $__interval 或固定间隔值。因为 $__rate_interval 总是至少是抓取间隔 (Scrape interval) 值的四倍,所以可以避免 Prometheus 特有的问题。

例如,与其使用

rate(http_requests_total[5m])

rate(http_requests_total[$__interval])

我们推荐您使用

rate(http_requests_total[$__rate_interval])

$__rate_interval 的值定义为 max($__interval + *抓取间隔*, 4 * *抓取间隔*),其中*抓取间隔*是“最小步长”设置(也称为 query*interval,这是每个 PromQL 查询的设置),如果设置了的话。否则,Grafana 将使用 Prometheus 数据源的“抓取间隔”设置。

面板中的“最小间隔”设置受分辨率设置影响,因此对*抓取间隔*没有任何影响。

有关详细信息,请参阅Grafana 博客

选择变量语法

Prometheus 数据源支持在 Query 字段中使用两种变量语法

  • $<varname>,例如 rate(http_requests_total{job=~"$job"}[$_rate_interval]),这种语法更易读写,但不允许在单词中间使用变量。
  • [[varname]],例如 rate(http_requests_total{job=~"[[job]]"}[$_rate_interval])

如果您启用了*多值*或*包含所有值*选项,Grafana 会将标签从纯文本转换为兼容正则表达式的字符串,这要求您使用 =~ 而不是 =

使用即席过滤器变量类型

Prometheus 支持特殊的即席过滤器变量类型,您可以使用它动态指定任意数量的标签/值过滤器。这些过滤器会自动应用于您的所有 Prometheus 查询。