PromQL数据类型
PromQL(Prometheus Query Language)是用于查询和分析Prometheus时间序列数据的强大工具。要有效地使用PromQL,首先需要理解其支持的数据类型。PromQL主要支持三种数据类型:标量(Scalar)、向量(Vector) 和 字符串(String)。本文将详细介绍这些数据类型,并通过实际案例展示它们的应用。
1. 标量(Scalar)
标量是PromQL中最简单的数据类型,表示一个单一的数值。标量没有时间维度,通常用于表示计算结果或常量值。
示例
42
上述代码表示一个标量值 42
。标量通常用于数学运算或比较操作中。
实际应用
假设我们有一个查询,计算某个时间序列的平均值:
avg(http_requests_total)
如果 http_requests_total
的平均值为 42
,那么查询结果将返回标量 42
。
2. 向量(Vector)
向量是PromQL中最常用的数据类型,表示一组时间序列。每个时间序列由一组时间戳和对应的值组成。向量可以分为两种类型:即时向量(Instant Vector) 和 范围向量(Range Vector)。
2.1 即时向量(Instant Vector)
即时向量表示在某个特定时间点的时间序列数据。每个时间序列包含一个时间戳和一个值。
示例
http_requests_total{job="api-server"}
上述查询返回一个即时向量,包含所有 job="api-server"
的 http_requests_total
时间序列在当前时间点的值。
2.2 范围向量(Range Vector)
范围向量表示在某个时间范围内的时间序列数据。每个时间序列包含多个时间戳和对应的值。
示例
http_requests_total{job="api-server"}[5m]
上述查询返回一个范围向量,包含所有 job="api-server"
的 http_requests_total
时间序列在过去5分钟内的值。
实际应用
假设我们想要计算过去5分钟内 http_requests_total
的增长率:
rate(http_requests_total{job="api-server"}[5m])
rate()
函数需要一个范围向量作为输入,并返回一个即时向量,表示每秒钟的请求增长率。
3. 字符串(String)
字符串是PromQL中的另一种数据类型,通常用于标签值或注释。虽然字符串在PromQL中不常用于计算,但在某些情况下(如标签匹配)非常有用。
示例
"api-server"
上述代码表示一个字符串 "api-server"
。字符串通常用于标签匹配或注释中。
实际应用
假设我们想要查询所有 job
标签值为 "api-server"
的时间序列:
http_requests_total{job="api-server"}
在这个查询中,"api-server"
是一个字符串,用于匹配 job
标签的值。
总结
PromQL支持三种主要的数据类型:标量、向量和字符串。标量表示单一的数值,向量表示一组时间序列,字符串用于标签值或注释。理解这些数据类型是编写有效PromQL查询的基础。
在实际应用中,标量通常用于计算结果,即时向量用于表示当前时间点的数据,范围向量用于表示一段时间内的数据,而字符串则用于标签匹配。
附加资源
练习
- 编写一个PromQL查询,计算过去10分钟内
http_requests_total
的总和。 - 使用
rate()
函数计算过去5分钟内http_requests_total
的增长率。 - 查询所有
job
标签值为"api-server"
的时间序列,并返回它们的当前值。
通过完成这些练习,你将更好地理解PromQL数据类型及其在实际查询中的应用。