Prometheus PromQL入门使用指南

本文档是Prometheus PromQL的入门指南,涵盖了查询Prometheus的基础知识,如字面量、时间序列选择器、运算符、函数等。通过示例解释了如何选择和聚合时间序列数据,包括即时向量选择器、范围向量选择器、时间持续时间和各种运算符的用法。还介绍了如何避免慢查询和过载,以及函数和聚合运算的应用,帮助用户深入理解Prometheus监控和数据查询。
摘要由CSDN通过智能技术生成

Prometheus PromQL入门使用指南

源自专栏《docker常用命令系列&&k8s系列目录导航

查询Prometheus

示例

Prometheus提供了一种名为PromQL(Prometheus Query Language)的功能性查询语言,使用户能够实时选择和聚合时间序列数据。表达式的结果可以显示为图形,可以在Prometheus的表达式浏览器中查看为表格数据,也可以通过HTTP API被外部系统消费。

表达语言数据类型

在Prometheus的表达语言中,表达式或子表达式可以评估为以下四种类型之一:

  • Instant vector:包含每个时间序列的单个样本,所有样本共享相同的时间戳
  • Range vector:包含每个时间序列随时间变化的一系列数据点
  • Scalar:简单的数值浮点值
  • String:简单的字符串值,目前未使用

根据用例(例如绘制图形与显示表达式的输出),只有一些类型作为用户指定表达式的结果是合法的。例如,仅返回即时向量的表达式是唯一可以绘制的类型。

字面量

字符串字面量

字符串字面量使用单引号、双引号或反引号指定

PromQL遵循与Go相同的转义规则。在单引号或双引号中的字符串字面量中,反斜杠开始一个转义序列,然后可能跟着a、b、f、n、r、t、v或\。可以使用八进制(\nnn)或十六进制(\xnn、\unnnn和\Unnnnnnnn)记法提供特定字符。

相反,反引号指定的字符串字面量中不解析转义字符。重要的是,与Go不同,Prometheus不会丢弃反引号内的换行符。

示例:

"this is a string"
'these are unescaped: \n \\ \t'
`these are not unescaped: \n ' " \t`

浮点数字面量

标量浮点值可以以整数浮点数的文字形式编写,格式为(空格仅用于更好的可读性):

[-+]?(
      [0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?
    | 0[xX][0-9a-fA-F]+
    | [nN][aA][nN]
    | [iI][nN][fF]
)

示例:

23
-2.43
3.4e-9
0x8f
-Inf
NaN

时间序列选择器

时间序列选择器负责选择时间序列和原始或推断的样本时间戳和值。

时间序列选择器不应与较高级别的即时查询和范围查询概念混淆,这些查询可以执行时间序列选择器。即时查询将在某一时间点评估给定的选择器,但范围查询将在最小时间戳和最大时间戳之间的多个不同时间点评估选择器。

即时向量选择器

即时向量选择器允许选择一组时间序列,并在给定时间戳(时间点)上为每个时间序列选择单个样本值。在最简单的形式中,仅指定一个指标名称,这会导致包含具有此指标名称的所有时间序列的即时向量元素。

此示例选择所有具有http_requests_total指标名称的时间序列:

http_requests_total

可以进一步通过在花括号({})中附加逗号分隔的标签匹配器列表来对这些时间序列进行筛选

此示例仅选择具有http_requests_total指标名称且作业标签设置为prometheus以及组标签设置为canary的时间序列:

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

还可以对标签值进行负匹配或根据正则表达式匹配标签值。存在以下标签匹配操作符:

  • =:选择与提供的字符串完全相等的标签。
  • !=:选择与提供的字符串不相等的标签。
  • =~:选择与提供的字符串进行正则匹配的标签。
  • !~:选择与提供的字符串不进行正则匹配的标签。
  • 正则表达式完全锚定。对于env="foo"的匹配,将被视为env=“^foo$”。

例如,此选择所有属于staging、testing和development环境以及非GET方法的http_requests_total时间序列。

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

还匹配空标签值的标签匹配器也会选择所有未设置特定标签的时间序列。可以为同一标签名称设置多个匹配器

例如,给定数据集:

http_requests_total
http_requests_total{replica="rep-a"}
http_requests_total{replica="rep-b"}
http_requests_total{environment="development"}

查询http_requests_total{environment=“”}将匹配并返回:

http_requests_total
http_requests_total{replica="rep-a"}
http_requests_total{replica="rep-b"}

并排除:

http_requests_total{environment="development"}

可以为同一标签名称使用多个匹配器;它们都必须通过才能返回结果。

查询:

http_requests_total{replica!="rep-a",replica=~"rep.*"}

然后将匹配:

http_requests_total{replica="rep-b"}

向量选择器必须指定名称至少一个不匹配空字符串的标签匹配器。以下表达式是非法的:

{job=~".*"} # 错误!

相反,这些表达式是有效的,因为它们都具有不匹配空标签值的选择器。


                
  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Prometheus PromQLPrometheus Query Language)是用于查询和分析 Prometheus 时间序列数据的查询语言。它提供了丰富的功能和表达能力,使用户能够根据自己的需求灵活地检索、聚合和计算指标数据。 PromQL 支持以下主要操作: 1. 选择时间序列:通过指定指标名称和一组标签来选择特定的时间序列。例如,`http_requests_total{job="api-server", status="200"}` 选择 `http_requests_total` 指标的 `job` 标签值为 "api-server" 且 `status` 标签值为 "200" 的时间序列。 2. 聚合操作:可以对选择的时间序列进行各种聚合操作,如求和、平均值、最大值、最小值等。例如,`sum(http_requests_total)` 对 `http_requests_total` 指标的所有时间序列进行求和。 3. 算术操作:可以对选择的时间序列进行加减乘除等算术运算。例如,`http_requests_total{job="api-server"} - http_errors_total{job="api-server"}` 计算 `http_requests_total` 和 `http_errors_total` 之间的差值。 4. 函数操作:PromQL 提供了许多内置函数,如 `rate()`、`increase()`、`irate()` 等,用于计算速率和增长率等指标。例如,`rate(http_requests_total{job="api-server"}[5m])` 计算 `http_requests_total` 指标的 5 分钟速率。 5. 筛选操作:可以使用一些条件和操作符对时间序列进行筛选和过滤。例如,`http_requests_total > 100` 筛选出 `http_requests_total` 指标值大于 100 的时间序列。 通过组合和嵌套这些操作,用户可以编写复杂的查询语句来获取所需的指标数据,并支持可视化和告警等应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值