这个文档仅供参考, 这里先举几个容易上手的例子。
表达式语言数据类型
在Prometheus的表达式语言中,任何表达式或者子表达式都可以归为四种类型:
- 瞬时向量 - 它是指在同一时刻,抓取的所有度量指标数据。这些度量指标数据的key都是相同的,也即相同的时间戳。
range vector
范围向量 - 它是指在任何一个时间范围内,抓取的所有度量指标数据。scalar
标量 - 一个简单的浮点值string
字符串 - 一个当前没有被使用的简单字符串
依赖于使用场景(例如:图表 vs. 表格),根据用户所写的表达式,仅仅只有一部分类型才适用这种表达式。例如:瞬时向量类型是唯一可以直接在图表中使用的。
字符串
字符串可以用单引号、双引号或者反引号表示
PromQL遵循与Go相同的转义规则。在单引号,双引号中,反斜杠成为了转义字符,后面可以跟着a, b, f, n, r, t, v或者\。 可以使用八进制(\nnn)或者十六进制(\xnn, \unnnn和\Unnnnnnnn)提供特定字符。
在反引号内不处理转义字符。与Go不同,Prom不会丢弃反引号中的换行符。例如:
浮点数
标量浮点值可以直接写成形式-[.(digits)]。
-2.43
即时向量选择器
瞬时向量选择器可以对一组时间序列数据进行筛选,并给出结果中的每个结果键值对(时间戳-样本值): 最简单的形式是,只有一个度量名称被指定。在一个瞬时向量中这个结果包含有这个度量指标名称的所有样本数据键值对。
下面这个例子选择所有时间序列度量名称为http_requests_total
的样本数据:
http_requests_total
通过在度量指标后面增加{}一组标签可以进一步地过滤这些时间序列数据。
http_requests_total{job=”prometheus”,group=”canary”}
可以采用不匹配的标签值也是可以的,或者用正则表达式不匹配标签。标签匹配操作如下所示:
!=
: 不等于给定的标签值=~
: 正则表达匹配给定的标签值- : 给定的标签值不符合正则表达式
例如:度量指标名称为http_requests_total
,正则表达式匹配标签environment
为staging, testing, development
的值,且http请求方法不等于GET
。
匹配空标签值的标签匹配器也可以选择没有设置任何标签的所有时间序列数据。正则表达式完全匹配。
向量选择器必须指定一个度量指标名称或者至少不能为空字符串的标签值。以下表达式是非法的:
{job=~”.*”} #Bad!
上面这个例子既没有度量指标名称,标签选择器也可以正则匹配空标签值,所以不符合向量选择器的条件
相反地,下面这些表达式是有效的,第一个一定有一个字符。第二个有一个有用的标签method
{job=~”.+”} # Good!{job=~”.*”, method=”get”} # Good!
标签匹配器能够被应用到度量指标名称,使用__name__
标签筛选度量指标名称。例如:表达式http_requests_total
等价于{__name__="http_requests_total"}
。 其他的匹配器,如:= ( !=, =~, !~)
都可以使用。下面的表达式选择了度量指标名称以job:
开头的时间序列数据:
{name=~”^job:.*”} #
范围向量选择器
范围向量类似瞬时向量, 不同在于,它们从当前实例选择样本范围区间。在语法上,时间长度被追加在向量选择器尾部的方括号[]中,用以指定对于每个样本范围区间中的每个元素应该抓取的时间范围样本区间。
s
- secondsm
- minutes- - hours
d
- daysw
- weeks
在下面这个例子中, 选择过去5分钟内,度量指标名称为http_requests_total
, 标签为job="prometheus"
的时间序列数据:
偏移修饰符
这个offset
偏移修饰符允许在查询中改变单个瞬时向量和范围向量中的时间偏移
例如,下面的表达式返回相对于当前时间的前5分钟时的时刻, 度量指标名称为http_requests_total
的时间序列数据:
http_requests_total offset 5m
注意:offset
偏移修饰符必须直接跟在选择器后面,例如:
sum(http_requests_total{method=”GET”} offset 5m) // GOOD.
然而,下面这种情况是不正确的
sum(http_requests_total{method=”GET”}) offset 5m // INVALID.
offset偏移修饰符在范围向量上和瞬时向量用法一样的。下面这个返回了相对于当前时间的前一周时,过去5分钟的度量指标名称为http_requests_total
的速率:
操作符
Prometheus支持二元和聚合操作符。详见
Prometheus提供了一些函数列表操作时间序列数据。详见表达式语言函数
陷阱
插值和陈旧
如果5分钟内,没有获取到任何的时间序列数据,则这个时间戳不会存在。那么在图表中看到的数据都是在当前时刻5分钟前的数据。