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 查询。