PromQL基础语法(上)-数据类型、时序选择器、二元操作符【prometheus查询语句】
文章目录
1. 数据类型
1.1 Gauge(仪表盘)
详情见:《动手写prometheus的exporter-01-Gauge(仪表盘)》
1.2 Counter(计数器)
详情见:《动手写prometheus的exporter-02-Counter(计数器)》
1.3 HIstogram(直方图)
详情见:动手写prometheus的exporter-03-HIstogram(直方图)》
1.4 Summary(摘要)
详情见:《动手写prometheus的exporter-04-Summary(摘要)》
2. 时序选择器
2.1 瞬时向量选择器
- 简单示例
以下是一个端口存活的
probe_success
- 条件过滤
对于上边的结果,我们做一些过滤:
probe_success{group="http", job="http_hq_nginx", project="HQ-AllInOne-PC"}
2.2 区间向量选择器
- 时间单位
符号 | 说明 |
---|---|
s | 秒 |
m | 分 |
h | 小时 |
d | 天 |
w | 星期 |
y | 年 |
- 使用
system_mem_used_percent[60s]
- 有图有真相
2.3 偏移修饰器
- 瞬时向量的偏移修饰器
system_mem_used_percent offset 5m
- 区间向量的偏移修饰器
system_mem_used_percent[3m] offset 5m
3. 二元操作符
3.1 算术操作符
- 符号说明
符号 | 说明 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
^ | 幂 |
- 示例
system_mem_used{ident="10.10.239.31"}+ system_mem_free{ident="10.10.239.31"}- system_mem_total{ident="10.10.239.31"}
说明:
- prometheus的
system_mem_used
是free
命令的used
+buff/cache
- 以上: 使用的+空闲的=总数
3.2 匹配操作符
- 符号说明
符号 | 说明 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
=~ | 匹配正则 |
!~ | 匹配正则非 |
- 示例(比较判断)
如图可见 大于 80%的都被筛选出来
- 示例(正则匹配)
3.3 逻辑操作符
- 符号说明
符号 | 说明 |
---|---|
and | 和(交集) |
or | 或(并集) |
unless | 补集 |
- 示例(and | or)
system_mem_used_percent > 80 or system_mem_used_percent < 10
有图有真相
可见大于80% 和 小于 10%的都被筛选出来了。
- 示例 (unless)
(system_mem_used_percent >75) unless (system_mem_used_percent < 70 or system_mem_used_percent > 85 )
- 先计算
< 70%
or>85%
- 再计算unless 是第一步的补集,结果
70% <= x <= 85%
- 最后和 >75% 取交集,结果
75% < x < 85%
有图有真相:
- 优先级 (and > or)
and
优先级高于or
- 示例
system_mem_used_percent > 5 or system_mem_used_percent < 10 and system_mem_used_percent > 80
先计算and(结果是空),再计算 or(空和大于5%取or) ,因此结果是 >5
- 有图有真相
如图可见,大于5%的都被取出来了
- 先算or怎么办
用括号把先算的括起来,括号可以套括号
(system_mem_used_percent > 5 or system_mem_used_percent < 10 )and system_mem_used_percent > 80
括号里边计算or (结果0~100%),再计算括号外边 and,结果 >80%
- 有图有真相,验证结果
如下图,结果只有大于80%的几条结果
- 优先级(unless > or)
- 示例
system_mem_used_percent > 90 or system_mem_used_percent > 60 unless system_mem_used_percent > 70
计算说明:
- 先计算unless:
x >70
的补集是x <= 70
,结果跟x > 60
取交集 ,得60< x <=70
。- 再计算or:
x > 90
和60< x <=70
的交集,结果是:x > 90
∪60< x <=70
- 有图有真相,验证结果
- 如果要先计算or
(system_mem_used_percent > 90 or system_mem_used_percent > 60) unless system_mem_used_percent > 70
计算说明:
- 先计算括号里or:括号里结果为
>60%
- 再计算括号外unless:
>70%
的补集是<= 70%
,和>60%
取并集60< x <= 70%
- 有图有真相,结果验证
3.4 优先级
顺序 | 符号 |
---|---|
1 | ^ |
2 | *, /, % |
3 | +, - |
4 | ==, !=, <=, <, >=, > |
5 | and, unless |
6 | or |
接下来,《PromQL基础语法(下)》将讲述“聚合运算符”和“内置函数”