Promsql语法用法

Prometheus 提供了一种功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据。表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部系统通过 HTTP API 调用。

时间序列过滤器

选择指标名称为 http_requests_total 的所有时间序列:

http_requests_total

可以通过向花括号 {} 里附加一组标签来进一步过滤时间序列。例如:选择指标名称为 http_requests_total,job 标签值为 prometheus,group 标签值为 canary 的时间序列

http_requests_total{job="prometheus",group="canary"}

PromQL 还支持用户根据时间序列的标签匹配模式来对时间序列进行过滤,目前主要支持两种匹配模式:完全匹配和正则匹配。总共有以下几种标签匹配运算符

= : 选择与提供的字符串完全相同的标签。
!= : 选择与提供的字符串不相同的标签。
=~ : 选择正则表达式与提供的字符串(或子字符串)相匹配的标签。
!~ : 选择正则表达式与提供的字符串(或子字符串)不匹配的标签。

例如:选择指标名称为 http_requests_total,环境为 staging、testing 或 development,HTTP 方法不为 GET 的时间序列

http_requests_total{environment=~"staging|testing|development",method!="GET"}

我们还可以使用内置的 __name__ 标签来指定监控指标名称。
例如:表达式 http_requests_total 等效于 {name=“http_requests_total”}

这样的方式也支持正则。以下表达式表示选择指标名称以 http_requests 开头的所有指标:

{__name__=~"http_requests.*"}

区间向量过滤器

区间向量与瞬时向量的工作方式类似,唯一的差异在于在区间向量表达式中我们需要定义时间选择的范围,时间范围通过时间范围选择器 [] 进行定义,以指定应为每个返回的区间向量样本值中提取多长的时间范围。

时间范围通过数字来表示,单位可以使用以下其中之一的时间单位:

s - 秒
m - 分钟
h - 小时
d - 天
w - 周
y - 年

例如:选择在过去 5 分钟内指标名称为 http_requests_total,job 标签值为 prometheus 的所有时间序列:

we select all the values we have recorded within the last 5 minutes for all time series that have the metric name http_requests_total and a handler label set to prometheus:

http_requests_total{handler="prometheus"}[5m]

Promsql语法用法_第1张图片
step=5m 表示取数据的间隔为5分钟一次
这里的5m即为下面所说的duration format

step=: Query resolution step width in duration format or float number of seconds.

时间位移操作

在瞬时向量表达式或者区间向量表达式中,都是以当前时间为基准。如果我们想查询5分钟前的瞬时样本数据,或昨天一天的区间内的样本数据呢? 这个时候我们就可以使用位移操作,位移操作的关键字为offset。

以下表达式返回相对于当前查询时间过去 5 分钟的 http_requests_total 值:

http_requests_total offset 5m

你可能感兴趣的:(Promethues应用)