时间序列选择器
瞬时向量选择器
瞬时向量选择器允许在给定的时间戳上选择一组时间序列和每个样本的单个采样值,返回值中只会包含该时间序列中的最新的一个样本值。
当我们直接使用监控指标名称查询时,可以查询包含该 metric 名称的所有时间序列。以下两种表达方式是等同的:
http_requests_total
http_requests_total{}
该表达式会返回指标名称为 http_requests_total 的所有时间序列。
http_requests_total{code="200",handler="alerts",instance="localhost:9090",job="prometheus",method="get"}=(20889@1518096812.326)
http_requests_total{code="200",handler="graph",instance="localhost:9090",job="prometheus",method="get"}=(21287@1518096812.326)
通过在花括号 {} 中添加逗号分隔的标签匹配器列表,可以进一步过滤这些时间序列。
如果我们只需要查询所有 http_requests_total 时间序列中满足标签 job 为 prometheus 且 group 为 canary 的时间序列,可以使用如下表达式。
http_requests_total{job="prometheus",group="canary"}
PromQL 还支持用户根据时间序列的标签匹配模式来对时间序列进行过滤,目前主要支持两种匹配模式:完全匹配和正则匹配。
通过使用 label=value 可以选择那些标签满足表达式定义的时间序列
反之使用 label!=value 则可以根据标签匹配排除时间序列
使用 label=~regx 表示选择那些标签符合正则表达式定义的时间序列
反之使用 label!~regx 进行排除
例如,如果想查询多个环节下的时间序列序列可以使用如下表达式:
http_requests_total{environment=~"staging|testing|development",method!="GET"}
在标签匹配中如果指定标签值为空,会匹配所有不包含该标签的时间序列,同一标签名称可有多个匹配器。
向量选择器必须指定一个名称或至少一个与空字符串不匹配的标签匹配器。
以下表达式是非法的,
相反,这些表达式是有效的,因为它们都有一个与空标签值不匹配的选择器。
{job=~".+"}
{job=~".*",method="get"}
标签匹配还以使用内部的 __name__ 标签应用到 metric 名称,如 http_requests_total 等同于{__name__=”http_requests_total”},
下面的表达式会筛选出所有以 job:开头的 metric,
另外 metric 名称不能包含以下关键字:bool,on,ignoring,group_left 和 group_right 可使用如下方式代替,
Prometheus 中的所有正则表达式都使用 RE2 syntax.RE2 syntax:
https://github.com/google/re2/wiki/Syntax