prometheus学习2:PromQL

PromQL是Prometheus的核心查询语言,用于检索监控数据。本文涵盖了标签过滤、范围查询与时间位移、聚合函数、内置函数、数学运算、比较运算及集合运算等内容,帮助读者全面了解PromQL的使用技巧。

PromQL是Prometheus内置的监控数据查询语言。

根据标签过滤

直接使用监控指标名称查询时,可以查询该指标下的所有时间序列。如:

http_requests_total

等同于:

http_requests_total{}

该表达式会返回指标名称为http_requests_total的所有时间序列:

http_requests_total{code="200",handler="alerts",instance="localhost:9090",job="prometheus",method="get"}=(20889@1518096812.326)
http_requests_total{code="200",handler="graph",instance="localhost:9090",job="prometheus",method="get"}=(21287@1518096812.326)

可以根据时间序列的标签匹配模式进行过滤,目前主要支持两种匹配模式:

  • 完全匹配(label=valuelabel!=value
  • 正则匹配(label=~valuelabel!~value

例如,需要查询所有http_requests_total时间序列中满足标签instancelocalhost:9090的时间序列:

http_requests_total{instance="localhost:9090"}

例如,查询多个环境下的时间序列序列可以使用如下表达式:

http_requests_total{environment=~"staging|testing|development",method!="GET"}

范围查询与时间位移

例如,通过以下表达式可以选择以当前时间为基准的最近5分钟内的所有样本数据:

http_request_total{}[5m]

除了使用m表示分钟以外,PromQL的时间范围选择器支持其它时间单位:

  • s - 秒
  • m - 分钟
  • h - 小时
  • d - 天
  • w - 周
  • y - 年

以上范围查询是基于当前时间的。如果我们想查询5分钟前的瞬时样本数据,或昨天一天的区间内的样本数据呢? 这个时候我们就可以使用offset位移操作:

http_request_total{} offset 5m
http_request_total{}[1d] offset 1d

聚合函数

包括有:

  • min (最小值)
  • max (最大值)
  • avg (平均值)
  • sum (求和)
  • stddev (标准差)
  • stdvar (标准差异)
  • count (计数)
  • count_values (对value进行计数)
  • bottomk (后n条时序)
  • topk (前n条时序)
  • quantile (分布统计)

如果需要整个应用的HTTP请求总量,可以:

sum(http_requests_total)

without用于从计算结果中移除列举的标签,而保留其它标签,by则正好相反:

sum(http_requests_total) without (instance)

等价于

sum(http_requests_total) by (code,handler,job,method)

获取HTTP请求数前5位的时序样本数据,可以使用表达式:

topk(5, http_requests_total)

内置函数

例如查看 http_requests_total 5分钟内,平均每秒数据:

rate(http_requests_total[5m])

数学运算

PromQL支持的所有数学运算符如下所示:

  • + (加法)
  • - (减法)
  • * (乘法)
  • / (除法)
  • % (求余)
  • ^ (幂运算)

例如,我们可以通过指标node_memory_free_bytes_total获取当前主机可用的内存空间大小,其样本单位为Bytes,如果换算为MB作为单位:

node_memory_free_bytes_total / (1024 * 1024)

比较运算

支持的比较运算符有 ==,!=,>,<,>=,<=, 例如http_requests_total 结果中大于 100 的数据:

http_requests_total > 100

集合运算

Prometheus支持以下集合运算符:

  • and (并且)
  • or (或者)
  • unless (排除)

例如http_requests_total结果中等于 5 或者 2 的数据:

http_requests_total == 5 or http_requests_total == 2

参考学习资料:https://yunlzheng.gitbook.io/prometheus-book/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值