promql学习总结
- 一、promql是什么?
- 二、语法实践
- 概念对比
- 操作实践
- 1. 查询表所有数据
- 2. 条件查询
- 标签等于用法
- 标签正则表达式用法
- 查询时的and与or
- 查询距现在某时长内增加数量
- 查询范围的值
- 查询某个时间段的增长值
- prometheus支持的聚合函数列表
- 总结
一、promql是什么?
promql是prometheus的查询语法,在这里简单描述下自己用过的语句语法。
二、语法实践
概念对比
名词 | prometheus | mysql |
表格 | metrics | table |
字段 | labelName【标签】 | field |
值 | labelValue | value |
操作实践
1. 查询表所有数据
sql:select * from action_statistics
prometheus:action_statistics
2. 条件查询
操作符 | 作用 |
= | 选择与提供的字符串完全相等的标签。 |
!= | 选择不等于提供的字符串的标签。 |
=~ | 选择与提供的字符串进行正则表达式匹配的标签。 |
!~ | 选择与提供的字符串不匹配的标签。 |
== | 值等于 |
!= | 值不等于 |
‘>’ | 值大于 |
< | 值小于 |
‘>=’ | 值大于或等于 |
<= | 值小于或等于 |
标签等于用法
查询张三看了哪些活动,时间点与次数。
sql:select * from action_statistics where user_name='张三' and action_type='查看活动'
prometheus:action_statistics{user_name='张三',action_type='查看活动'}
标签正则表达式用法
查询姓张的看了哪些活动,时间点与次数。
sql:select * from action_statistics where user_name like '张%' and action_type='查看活动'
prometheus:action_statistics{user_name=~'张.*',action_type='查看活动'}
查询时的and与or
查询姓张或者姓李的用户
sql:select * from user where user_name like '张%' or user_name like '李%'
prometheus:user{user_name=~'张.*'} or user{user_name=~'李.*'}
查询距现在某时长内增加数量
查询1天内开业活动页面有哪些人点击action_statistics{action_type="查看活动",action_context="开业活动"}[1d]
[1d] 表示一天内,下面是支持的单位,但是该用法不支持用来统计数量
ms- 毫秒
s- 秒
m- 分钟
h- 小时
d- 天 - 假设一天总是24h
w- 周 - 假设一周总是7d
y- 年 - 假设一年总是365d
查询10分钟前的1天内开业活动页面有哪些人点击action_statistics{action_type="查看活动",action_context="开业活动"}[1d] offset 10m
offset 将时间点往前偏移一段时间
查询范围的值
查询查看活动大于10次的用户
sql:select sum(action_num) num,user_name from action_statistics where action_type='查看活动' group by action_user_id having num>10
prometheus:sum(action_statistics{action_type='查看活动'}) by (action_user_id) >10
sum:将值累加
by:同步标签进行分组
count:统计数量
查询某个时间段的增长值
查询查看活动功能6月11号,不同用户使用过了多少次,并且降序排序,取前10个用户
sql:select sum(action_num) num from action_statistics where action_type='查看活动' and time between 1654876800 and 1654963199 group by action_user_id order by num desc limit 10
prometheus:topk(10,sort_desc(sum(action_statistics {action_type='查看活动"} @1654963199) by (action_user_id) -sum(action_statistics {action_type="查看活动"} @1654876800) by (action_user_id)))
topk:取前几位
sort_desc:降序排序
sort:升序排序
@:指定某个时间点 promehteus是将值一直累加的,所以需要将结束时间点的值减去开始时间点的值 得出时间段内的值
prometheus支持的聚合函数列表
sum(计算尺寸总和)
min(选择最小尺寸)
max(选择最大尺寸)
avg(计算尺寸的平均值)
group(结果向量中的所有值均为 1)
stddev(计算尺寸上的总体标准差)
stdvar(计算维度上的总体标准方差)
count(计算矢量中的元素数)
count_values(计算具有相同值的元素数)
bottomk(按样本值计算的最小 k 个元素)
topk(按样本值计算的最大 k 个元素)
quantile(计算φ分位数 (0 ≤ φ ≤ 1)
官方文档:链接
总结
目前有用过的查询语句就这些了,基本上够用了,其他的高级用法后续用到再总结。