PromQL 是 Prometheus 内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并且被广泛应用在 Prometheus 的日常应用当中,包括对数据查询、可视化、告警处理当中。可以这么说,PromQL 是 Prometheus 所有应用场景的基础,理解和掌握 PromQL 是 Prometheus 入门的第一课。
up
在 prometheus 的 graph 界面执行单独的一条语句 up ,可以查询到所有监控实例的状态,为1则正在被监控,为0,实例状态故障
瞬时向量与范围向量
瞬时向量:获取当前最新的查询数据,也就是直接执行指标名称查询出来的数据即为当前瞬时向量数据
范围向量:获取某个范围时间段指标的查询数据,范围向量一般用来计算平均值。
条件过滤,比如获取某台节点的空闲 cpu,也可以直接在花括号后接时间范围
常用操作符
类似这种操作符,在每个语言中几乎都可以包含
类型 | 操作符 |
---|---|
比较操作符 | = != > < >= <= |
算术操作符 | + - * / |
正则匹配操作符 | = ! |
聚合操作符 | sum():求和 max():最大值 min():最小值 avg():平均值 count():统计数量 |
逻辑操作符 | and or |
比较操作符
如:以上查询空闲cpu,以下的语句则是查询非空闲cpu的监控数据
node_cpu_seconds_total{instance="192.168.1.11:9100",mode!="idle"}
算术操作符
用来计算一些资源使用率,cpu 使用率,内存使用率,硬盘使用率等
如:5分钟内cpu的平均使用率
# 5分钟之内192.168.1.11节点,空闲cpu的使用
node_cpu_seconds_total{instance="192.168.1.11:9100",mode="idle"}[5m]
# 5分钟之内192.168.1.11节点,空闲cpu的使用的变化速率
irate(node_cpu_seconds_total{instance="192.168.1.11:9100",mode="idle"}[5m])
**函数 irate()**:通过 irate 函数绘制的图标能够更好的反应样本数据的瞬时变化状态,计算指标在一定时间间隔内的变化速率
聚合操作符
以上的数值是 4 核cpu的空闲cpu,如果要获取到这台机器,cpu的使用率,就应该从平均值下手
avg(irate(node_cpu_seconds_total{instance="192.168.1.11:9100",mode="idle"}[5m]))
值为 0.86 ,对于计算使用率来说,我们需要的是百分比的数据会更加直观一点,加入算术操作符,将该值乘100,并用100减去这个数值,将会得到的是这台机器5分钟内cpu的使用率
100 - avg(irate(node_cpu_seconds_total{instance="192.168.1.11:9100",mode="idle"}[5m])) * 100
正则匹配操作符
其实基本上正则的使用和 LogQL 的语法是一致的:
https://www.feiyiblog.com/2021/10/11/Loki%E7%9A%84LogQL%E6%9F%A5%E8%AF%A2%E8%AF%AD%E6%B3%95/
这里以 dashboard 里面的一个 sql 为例
node_filesystem_avail_bytes{instance=~"$node",mountpoint="$maxmount",fstype=~"ext4|xfs"}
fstype=~"ext4|xfs"
这部分使用了正则
逻辑操作符
用的比较少,遇到再说吧~