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 |
时序查询 | metric,label 或两者 | 返回与输入数据关联的时序数据列表。 | /api/v1/series |
经典查询 | 经典查询字符串 | 已废弃,经典版变量查询编辑器。使用以下语法输入包含查询类型的字符串:label_values(<metric>, <label>) | 全部 |
有关*指标名称*、*标签名称*和*标签值*的详细信息,请参阅 Prometheus 文档。
查询选项
在查询变量类型下,您可以设置以下查询选项
| 选项 | 描述 |
|---|---|
| 数据源 | 从下拉列表中选择您的数据源。 |
| 选择查询类型 | 选项包括 default、value 和 metric 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
我们建议在 rate 和 increase 函数中使用 $__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 查询。



