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)

官方文档:链接

总结

目前有用过的查询语句就这些了,基本上够用了,其他的高级用法后续用到再总结。