promql语法

ads

PromQL 的语法很有意思。

一、背景

最近在使用 grafana 来制作系统的各种指标看板。

其中一个重要的指标来源是监控系统,监控系统对外的提供的API 是 PromQL 语法的接口。

所以就有必要学习一下 PromQL 的语法。


二、Prometheus

Prometheus 是一个开源系统监控和警报工具包,拥有非常活跃的开发者和用户社区。


Prometheus 提供的数据查询语言被称为 PromQL,全称是 Prometheus Query Language,可以用来查询筛选与聚合时间序列数据。


三、数据类型

PromQL 中有四种数据类型。


1)Instant vector,即时向量,每个时间点的数据序列。

2)Range vector,范围向量,按时间范围聚合的数据序列如每分钟聚合

3)Scalar,标量,一个浮点数。

4)String 字符串,未使用。


四、时间序列选择器

简单的理解,带筛选条件的 API,可以返回带数据的时间序列。


1)Instant vector selectors 即时向量

筛选出所有满足条件的时间序列结果。

例如:http_requests_total 查询所有时间的请求数据。


2)筛选条件

使用{}进行筛选。

例如 http_requests_total{job="prometheus",group="canary"}

具体语法如下

  1. = 标签完全匹配

  2. != 标签不匹配

  3. =~ 标签正则匹配

  4. !~ 标签正则不匹配

其中正则是完全匹配,即 env=~"foo" 等价于 env=~"^foo$"


3)Range Vector Selectors 范围向量

筛选出指定时间维度的时间序列结果。

例如默认数据上报的粒度是秒粒度,我们希望得到每分钟的访问量,这个时候就需要使用1分钟这个时间范围来查询数据。

语法:http_requests_total{job="prometheus"}[1m]


4) Time Durations 时间

时间单位有下面这些

  1. ms - milliseconds 毫秒

  2. s - seconds

  3. m - minutes 分钟

  4. h - hours 小时

  5. d - days

  6. w - weeks

  7. y - years

时间支持组合,但是单位必须从大到小,例如1h30m


5)Offset modifier 偏移修正

监控系统的数据可能会有延迟,这个时候就需要对时间校准,防止画出来的曲线最新的时间掉零。

例如 http_requests_total offset 5m 拉取 5分钟之前的数据。


注意事项:时间修正必须与 Selectors 在一起使用,函数运算之后,就不能使用时间修正了。


五、运算符

数据筛选出来后,可以使用内置的运算符进行运算。


1)二元运算符

  1. +

  2. -

  3. *

  4. /

  5. %

  6. ^


二元算术运算符可以在标量与标量之间、向量与标量之间、向量与向量之间运算。

两个标量之间运算之后,结果还是标量。

瞬时向量和标量运算时,标量会与向量的每个数据样本的值进行运算,结果还是一个瞬时向量。

两个向量之间运算,两个向量会按标签进行匹配,匹配的进行运算,形成匹配的结果集。


2)集合运算符

集合之间的运算如下

  1. and 交集

  2. or 并集

  3. unless 差集


3)聚合运算

Prometheus 支持很多内置聚合运算符,可用于聚合单个即时向量的元素,从而生成具有聚合值的较少元素的新向量。

  1. sum 计算维度上的和

  2. min 计算维度上的最小值

  3. max 计算维度上的最大值

  4. avg 计算维度上的平均值

  5. count 计数

  6. count_values 计算相同值的个数

  7. bottomk 最小的 k 个值

  8. topk 最大的 k 个元素

  9. quantile 计算维度上的 φ 分位数


维度选择有两种

  1. without 排除维度

  2. by 选择维度


样例如下,维度选择可以放在前面,也可以放在后面。

  1. # 除了 instance 标签,按其他标签分组求和。

  2. sum without (instance) (http_requests_total)

  3. sum (http_requests_total) without (instance)

  4. # 对 application 和 group 标签分组求和

  5. sum by (application, group) (http_requests_total)

  6. sum (http_requests_total) by (application, group)

  7. # 不分组,求和

  8. sum(http_requests_total)

六、函数

Prometheus 还提供了很多函数可以使用。

  1. abs 绝对值

  2. ceil 四舍五入

  3. changes 差值向量

  4. floor 向下取整

  5. label_replace 修改标签的值

  6. round(v, scalar) scalar 的倍数进行四舍五入

  7. sort 排序

  8. sort_desc 逆序

  9. avg_over_time 指定区间内所有点的平均值

  10. min_over_time 指定区间内所有点的最小值

  11. max_over_time 指定区间内所有点的最大值

  12. sum_over_time 指定区间内所有值的总和

  13. quantile_over_time 指定区间内的值的 φ 分位数

七、实战

通过 Stat Chat 展示总核数。


通过 Pie Chat 展示各集群的流量分布。


通过 Time series 展示 QPS 与 CPU 的曲线图。


通过 Bar gauge 查看各模块的实时负载。


通过 Table 查看各个核心业务的 QPS、成功率、负载、同比环比数据。


八、最后

PromQL 的语法还算简单,grafana 就相当复杂了。

后面有机会,分享一下如何使用 grafana 画出上面的些曲线与图像。

《完》

-EOF-

题图:来自朋友圈。

上篇文章:腾讯招聘:一起维护几百万qps的系统

  • 一个免费体验的 chatGPT 网站


最后编辑于:2024/1/9 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com