欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PromQL查询

程序员文章站 2024-03-17 13:52:22
...

一、数据格式了解

exporter暴漏的数据以下边的方式进行呈现

# HELP node_filesystem_free_bytes Filesystem free space in bytes.  #解释
# TYPE node_filesystem_free_bytes gauge  #数据类型
node_filesystem_free_bytes{device="/dev/mapper/centos_test-  root",fstype="xfs",mountpoint="/"} 1.163782144e+10  #metric和对应的值
node_filesystem_free_bytes{device="/dev/sda1",fstype="xfs",mountpoint="/boot"} 7.6972032e+07
node_filesystem_free_bytes{device="rootfs",fstype="rootfs",mountpoint="/"} 1.163782144e+10
node_filesystem_free_bytes{device="tmpfs",fstype="tmpfs",mountpoint="/run"} 9.43960064e+08
node_filesystem_free_bytes{device="tmpfs",fstype="tmpfs",mountpoint="/run/user/0"} 1.90795776e+08
# HELP node_filesystem_readonly Filesystem read-only status.
# TYPE node_filesystem_readonly gauge
node_filesystem_readonly{device="/dev/mapper/centos_test-root",fstype="xfs",mountpoint="/"} 0
node_filesystem_readonly{device="/dev/sda1",fstype="xfs",mountpoint="/boot"} 0
node_filesystem_readonly{device="rootfs",fstype="rootfs",mountpoint="/"} 0
node_filesystem_readonly{device="tmpfs",fstype="tmpfs",mountpoint="/run"} 0
node_filesystem_readonly{device="tmpfs",fstype="tmpfs",mountpoint="/run/user/0"} 0

然后prometheus拉取瞬时的(那一刻的数据)exporter暴露的数据,以时间序列的格式存储在自身的tsdb(时间序列数据库)数据库,当在prometheus web查询时,获取的数据也是那一瞬间的数据,可称作瞬时向量。存储在tsdb的数据格式如下:

<--------------- metric ---------------------><-timestamp -><-value->
up{instance="192.168.71.21:9100",job="node_exporter"}@1600572300 =>1
up{instance="192.168.71.22:9100",job="node_exporter"}@1600572300 =>0
up{instance="localhost:9090",job="prometheus"}@1600572300 =>1

二、PromQL操作符

标签匹配(瞬时向量)

根据标签进行匹配,获取的值是那一瞬间的值

  1. = :根据label进行匹配。匹配device为/dev/mapper/centos_test-root的时间序列
node_filesystem_avail_bytes{device="/dev/mapper/centos_test-root"}
  1. != :正则,不等于
node_filesystem_avail_bytes{device!="/dev/mapper/centos_test-root"}
  1. ~ :label=~regx,正则匹配。匹配挂载点为/boot、/、/run的时间序列
node_filesystem_avail_bytes{mountpoint=~"/boot|/|/run"}
  1. ~! :非。匹配除了挂载点为/boot、/、/run的时间序列
node_filesystem_avail_bytes{mountpoint=~!"/boot|/|/run"}

范围查询(区间向量查询)

查询一定时间范围内的数据

  • []:时间范围选择.查看1分钟内所有时间点的剩余内存(这个时间点是由prometheus抓取数据的频率决定,这里定义的是每15秒抓取一次数据)
node_memory_MemFree_bytes{}[1m]

时间单位有:

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

时间位移查询

查询之前某个时间点的数据,也是瞬时向量

  • offset:位移操作符,metric{label=value} offset 1d。查询1分钟前的剩余内存
node_memory_MemFree_bytes{} offset 1m

数学运算符

  • + (加法)
  • - (减法)
  • * (乘法)
  • / (除法)
  • % (求余)
  • ^ (幂运算)

布尔运算

  • == (相等)
  • != (不相等)
  • (大于)

  • < (小于)
  • = (大于等于)

  • <= (小于等于)

布尔操作符,改变运算行为,使结果输出为1或0,符合运算就输出0,否则输出1

metric{label=value} > bool 100

集合运算符

  • vector1 and vector2
  • vector1 or vector2
  • vector1 unless vector2

操作符优先级

^
*, /, %
+, -
==, !=, <=, <, >=, >
and, unless
or

向量与向量之间的计算

  • ignoring:在匹配时忽略某些标签
  • on:将匹配限定在某些标签之内
  • group_left:如果左边标签多的话,也就是多对一,使用group_left
  • group_right:如果右边标签多的话,也就是一对多,使用group_right
  1. 一对一匹配(标签数量相同,排除不同的标签或限制指定的标签进行匹配)
    vector1 / ignoring(code) vector2
  2. 多对一匹配和一对多
    vector1 on(label) group_left vector2
    vector1 on(label) group_right vector2


node_filesystem_avail_bytes / ignoring(device,fstype,mountpoint) group_left up

三、PromQL聚合操作

  • sum (求和)
  • min (最小值)
  • max (最大值)
  • avg (平均值)
  • stddev (标准差)
  • stdvar (标准方差)
  • count (计数)
  • count_values (对value进行计数)
  • bottomk (后n条时序)
  • topk (前n条时序)
  • quantile (分位数)

1. 按照mode计算cpu平均使用时间

avg(node_cpu_seconds_total) by (mode)

2. 计算http请求数前5位的时间序列

topk(5,prometheus_http_requests_total)

四、PromQL内置函数

  • up:查看exporter状态,正常为1,异常为0
  • rate:计算增长率
  • irate:跟rate一样,但是irate是根据区间向量最后两个数据进行计算,更加灵敏
  • predict_linear:预测函数,根据简单线性回归进行计算。
  • label_replace:标签替换

1. 根据2小时内的数据,计算未来4个小时,磁盘剩余空间是否为0

predict_linear(node_filesystem_files_free{device="/dev/mapper/centos_test-root"}[2h],4*3600)<0

2. 标签替换

格式

label_replace(v,dest_label,dest_value,replace_label,regx)

没有替换时
PromQL查询

替换之后
PromQL查询