跳到主要内容

PromQL数据类型

PromQL(Prometheus Query Language)是用于查询和分析Prometheus时间序列数据的强大工具。要有效地使用PromQL,首先需要理解其支持的数据类型。PromQL主要支持三种数据类型:标量(Scalar)向量(Vector)字符串(String)。本文将详细介绍这些数据类型,并通过实际案例展示它们的应用。

1. 标量(Scalar)

标量是PromQL中最简单的数据类型,表示一个单一的数值。标量没有时间维度,通常用于表示计算结果或常量值。

示例

promql
42

上述代码表示一个标量值 42。标量通常用于数学运算或比较操作中。

实际应用

假设我们有一个查询,计算某个时间序列的平均值:

promql
avg(http_requests_total)

如果 http_requests_total 的平均值为 42,那么查询结果将返回标量 42

2. 向量(Vector)

向量是PromQL中最常用的数据类型,表示一组时间序列。每个时间序列由一组时间戳和对应的值组成。向量可以分为两种类型:即时向量(Instant Vector)范围向量(Range Vector)

2.1 即时向量(Instant Vector)

即时向量表示在某个特定时间点的时间序列数据。每个时间序列包含一个时间戳和一个值。

示例

promql
http_requests_total{job="api-server"}

上述查询返回一个即时向量,包含所有 job="api-server"http_requests_total 时间序列在当前时间点的值。

2.2 范围向量(Range Vector)

范围向量表示在某个时间范围内的时间序列数据。每个时间序列包含多个时间戳和对应的值。

示例

promql
http_requests_total{job="api-server"}[5m]

上述查询返回一个范围向量,包含所有 job="api-server"http_requests_total 时间序列在过去5分钟内的值。

实际应用

假设我们想要计算过去5分钟内 http_requests_total 的增长率:

promql
rate(http_requests_total{job="api-server"}[5m])

rate() 函数需要一个范围向量作为输入,并返回一个即时向量,表示每秒钟的请求增长率。

3. 字符串(String)

字符串是PromQL中的另一种数据类型,通常用于标签值或注释。虽然字符串在PromQL中不常用于计算,但在某些情况下(如标签匹配)非常有用。

示例

promql
"api-server"

上述代码表示一个字符串 "api-server"。字符串通常用于标签匹配或注释中。

实际应用

假设我们想要查询所有 job 标签值为 "api-server" 的时间序列:

promql
http_requests_total{job="api-server"}

在这个查询中,"api-server" 是一个字符串,用于匹配 job 标签的值。

总结

PromQL支持三种主要的数据类型:标量、向量和字符串。标量表示单一的数值,向量表示一组时间序列,字符串用于标签值或注释。理解这些数据类型是编写有效PromQL查询的基础。

在实际应用中,标量通常用于计算结果,即时向量用于表示当前时间点的数据,范围向量用于表示一段时间内的数据,而字符串则用于标签匹配。

附加资源

练习

  1. 编写一个PromQL查询,计算过去10分钟内 http_requests_total 的总和。
  2. 使用 rate() 函数计算过去5分钟内 http_requests_total 的增长率。
  3. 查询所有 job 标签值为 "api-server" 的时间序列,并返回它们的当前值。

通过完成这些练习,你将更好地理解PromQL数据类型及其在实际查询中的应用。