跳到主要内容

PromQL标量函数

PromQL(Prometheus Query Language)是Prometheus中用于查询和分析时间序列数据的强大工具。在PromQL中,标量函数是一类用于处理单个时间序列或标量值的函数。它们通常用于对查询结果进行进一步的计算或转换。本文将详细介绍PromQL中的标量函数,并通过示例展示它们的实际应用。

什么是标量函数?

标量函数是PromQL中的一类函数,它们接受一个或多个标量值作为输入,并返回一个标量值作为输出。标量值是指单个数值,而不是时间序列。标量函数通常用于对查询结果进行数学运算、逻辑判断或类型转换。

常用的标量函数

以下是PromQL中一些常用的标量函数:

abs()

abs() 函数用于计算一个标量值的绝对值。

示例:

promql
abs(-10)

输出:

10

ceil()

ceil() 函数用于将一个标量值向上取整。

示例:

promql
ceil(3.14)

输出:

4

floor()

floor() 函数用于将一个标量值向下取整。

示例:

promql
floor(3.14)

输出:

3

round()

round() 函数用于将一个标量值四舍五入到指定的小数位数。

示例:

promql
round(3.14159, 2)

输出:

3.14

clamp_max()

clamp_max() 函数用于将一个标量值限制在指定的最大值以下。

示例:

promql
clamp_max(15, 10)

输出:

10

clamp_min()

clamp_min() 函数用于将一个标量值限制在指定的最小值以上。

示例:

promql
clamp_min(5, 10)

输出:

10

scalar()

scalar() 函数用于将一个单元素向量转换为标量值。如果向量包含多个元素,则返回 NaN

示例:

promql
scalar(up{instance="localhost:9090"})

输出:

1
备注

如果 up{instance="localhost:9090"} 返回多个时间序列,scalar() 函数将返回 NaN

实际应用场景

场景1:计算CPU使用率的百分比

假设我们有一个时间序列 cpu_usage,表示CPU的使用率(0到1之间)。我们可以使用 round() 函数将其转换为百分比,并四舍五入到两位小数。

promql
round(cpu_usage * 100, 2)

输出:

75.23

场景2:限制内存使用量

假设我们有一个时间序列 memory_usage,表示内存使用量(以MB为单位)。我们可以使用 clamp_max() 函数将其限制在1000MB以下。

promql
clamp_max(memory_usage, 1000)

输出:

1000

场景3:计算绝对误差

假设我们有两个时间序列 actual_valueexpected_value,我们可以使用 abs() 函数计算它们之间的绝对误差。

promql
abs(actual_value - expected_value)

输出:

5

总结

PromQL中的标量函数为处理单个时间序列或标量值提供了强大的工具。通过使用这些函数,我们可以对查询结果进行各种数学运算、逻辑判断和类型转换。本文介绍了一些常用的标量函数,并通过实际应用场景展示了它们的用法。

附加资源与练习

  • 练习1:使用 ceil()floor() 函数分别对 3.75.2 进行取整操作,并观察输出结果。
  • 练习2:编写一个PromQL查询,计算 http_requests_total 的增长率,并使用 round() 函数将结果四舍五入到两位小数。
  • 练习3:使用 clamp_min() 函数将 disk_usage 限制在500GB以上,并观察输出结果。

通过练习这些标量函数,您将更好地掌握PromQL中的标量计算技巧。