跳到主要内容

PromQL聚合函数

PromQL(Prometheus Query Language)是Prometheus的查询语言,用于从时间序列数据库中提取和分析数据。聚合函数是PromQL中非常重要的功能,它们允许我们对时间序列数据进行分组和计算,从而生成更有意义的指标。

什么是聚合函数?

聚合函数是一组用于对时间序列数据进行汇总计算的函数。它们可以将多个时间序列数据合并为一个或多个新的时间序列数据。常见的聚合操作包括求和、平均值、最大值、最小值等。

常见的聚合函数

PromQL提供了多种聚合函数,以下是一些常用的聚合函数:

  • sum(): 对时间序列数据进行求和。
  • avg(): 计算时间序列数据的平均值。
  • min(): 获取时间序列数据中的最小值。
  • max(): 获取时间序列数据中的最大值。
  • count(): 计算时间序列数据的数量。
  • stddev(): 计算时间序列数据的标准差。
  • stdvar(): 计算时间序列数据的方差。

使用聚合函数

基本语法

聚合函数的基本语法如下:

promql
<聚合函数>(<表达式> [by|without (<标签列表>)])
  • <聚合函数>: 使用的聚合函数,如 sumavg 等。
  • <表达式>: 需要聚合的时间序列数据。
  • by|without (<标签列表>): 可选参数,用于指定分组方式。by 表示按指定标签分组,without 表示排除指定标签。

示例1:求和

假设我们有以下时间序列数据:

promql
http_requests_total{method="GET", status="200"} 100
http_requests_total{method="GET", status="404"} 20
http_requests_total{method="POST", status="200"} 50

我们可以使用 sum() 函数对所有请求进行求和:

promql
sum(http_requests_total)

输出结果:

promql
170

示例2:按标签分组求和

如果我们想按 method 标签对请求进行分组求和,可以使用 by 参数:

promql
sum(http_requests_total) by (method)

输出结果:

promql
{method="GET"} 120
{method="POST"} 50

示例3:计算平均值

我们可以使用 avg() 函数计算请求的平均值:

promql
avg(http_requests_total) by (method)

输出结果:

promql
{method="GET"} 60
{method="POST"} 50

实际应用场景

场景1:监控HTTP请求的总数

假设我们正在监控一个Web应用的HTTP请求总数,我们可以使用 sum() 函数来计算所有请求的总数:

promql
sum(http_requests_total)

场景2:按状态码分组计算请求的平均响应时间

如果我们想按状态码分组计算请求的平均响应时间,可以使用 avg() 函数:

promql
avg(http_response_time_seconds) by (status)

场景3:计算CPU使用率的最大值

在监控系统资源时,我们可能需要计算CPU使用率的最大值:

promql
max(cpu_usage) by (instance)

总结

PromQL的聚合函数是分析和汇总时间序列数据的强大工具。通过使用这些函数,我们可以轻松地对数据进行分组、求和、计算平均值等操作,从而生成更有意义的指标。掌握这些函数的使用方法,将有助于我们更好地理解和分析监控数据。

附加资源

练习

  1. 使用 sum() 函数计算所有HTTP请求的总数。
  2. 使用 avg() 函数按 method 标签计算请求的平均响应时间。
  3. 使用 max() 函数计算每个实例的CPU使用率的最大值。

通过完成这些练习,你将更好地理解PromQL聚合函数的使用方法。