Prometheus(5)数据查询
Prometheus提供一个数据查询语言,名叫PromQL。
用户可以实时选择和聚合时间序列数据。
查询的结果可以是一个图标、表格或者可以被外部http接口调用数据。
查询类型
表达式可以查询下面四种类型。
瞬时向量(Instant vector)
某一个瞬间的指标量的值,比如直接查询node_network_receive_bytes_total
,可以得到两个网卡分别接收的数据量。
这些数据只是展示在查询的一瞬间,这两个指标分别对应的数值。
范围向量(Range vector)
表示一段时间内的样本数据。
比如最近1分钟网络接收字节数,node_network_receive_bytes_total[1m]
。
后面的[1m]
是限制区间时间范围,查询过去1分钟之内的数据。
因为我们在prometheus.yml
文件中,配置的抓取时间间隔为5秒,所以1分钟内,每一个指标的抓取数量都是12个。
标量(Scalar)
标量可以是一个整型数字,或者浮点数字,有时候为了可读性,会转化成一个非数字的字符串。
下面的值都是合法的。
1 | 23 |
比如计算当前所有网卡的接收字节数总量,sum(node_network_receive_bytes_total)
。
字符串(string)
表示一个简单的字符串,但是当前似乎没什么用。
时间选择
时间范围
因为数据是基于时间序列的,所以时间范围的筛选是里面非常重要的一个功能。
刚才在范围向量里面已经介绍了获取过去1分钟内的数据,是用[1m]
放在指标后面。
PromQL支持下面的这些时间单位:
- ms 毫秒
- s 秒
- m 分钟
- h 小时
- d 天
- w 周
- y 年
注意这里面没有月份这样的表示单位。
时间范围可以组合使用,比如:
1 | 1h30m // 一小时30分钟 |
时间位移
上面的时间范围都是基于当前时间向前推移的,如果我们想要获取一个小时之前的1分钟内的指标,就需要使用offset
关键字。
1 | node_network_receive_bytes_total[1m] offset 1h |
除了offset
关键字,PromQL提供了另外一个选项,用户可以指定特定的10位时间戳为当前时间获取数据,使用@
标识符。
2023-06-25 12:00:00
的时间戳为1687665600
,获取这个时刻的node_network_receive_bytes_total
指标。
1 | node_network_receive_bytes_total @ 1687665600 |