Prometheus-PromQL常用函数了解

一、数据格式了解

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)

没有替换时
Prometheus-PromQL常用函数了解_第1张图片

替换之后
Prometheus-PromQL常用函数了解_第2张图片

你可能感兴趣的:(Prometheus,PromQL,Prometheus,查询)