概述
MetricQL 提供了多种聚合函数,用于对时间序列数据进行聚合计算。这些函数可以帮助我们更好地理解和分析监控数据。
基本聚合函数
求和函数
sum()
:对时间序列数据进行求和。
- 示例:
sum(http_requests_total)
,计算所有实例的HTTP请求数总和。 - 带标签分组:
sum by(instance) (http_requests_total)
,按实例分组计算请求数总和。
平均值函数
avg()
:计算时间序列数据的平均值。
- 示例:
avg by(instance) (http_requests_total)
,按实例分组计算HTTP请求数的平均值。 - 全局平均值:
avg(http_requests_total)
,计算所有实例的平均请求数。
最大值函数
max()
:获取时间序列数据的最大值。
- 示例:
max(http_requests_total)
,获取所有实例中HTTP请求数的最大值。 - 带标签分组:
max by(instance) (http_requests_total)
,按实例分组获取最大请求数。
最小值函数
min()
:获取时间序列数据的最小值。
- 示例:
min(http_requests_total)
,获取所有实例中HTTP请求数的最小值。 - 带标签分组:
min by(instance) (http_requests_total)
,按实例分组获取最小请求数。
高级聚合函数
计数函数
count()
:计算时间序列的数量。
- 示例:
count(http_requests_total)
,统计所有实例的数量。 - 带标签分组:
count by(instance) (http_requests_total)
,按实例分组统计数量。
标准差函数
stddev()
:计算时间序列数据的标准差。
- 示例:
stddev(http_requests_total)
,计算所有实例请求数的标准差。 - 带标签分组:
stddev by(instance) (http_requests_total)
,按实例分组计算标准差。
分位数函数
quantile()
:计算时间序列数据的分位数。
- 示例:
quantile(0.95, http_requests_total)
,计算95分位数的请求数。 - 带标签分组:
quantile(0.95, http_requests_total) by (instance)
,按实例分组计算95分位数。
计数非零值
count_values()
:统计每个值的出现次数。
- 示例:
count_values("count", http_requests_total)
,统计每个请求数出现的次数。
使用技巧
组合使用:可以组合多个聚合函数,例如:
PLAINTEXT1
sum(rate(http_requests_total[5m])) by (instance)
标签过滤:可以在聚合前使用标签过滤:
PLAINTEXT1
sum(http_requests_total{status="200"}) by (instance)
时间范围:可以结合时间范围使用:
PLAINTEXT1
avg_over_time(http_requests_total[5m])
注意事项
- 聚合操作会丢失原始标签,除非使用
by
子句保留特定标签。 - 聚合函数通常与
rate()
或irate()
函数一起使用,以计算速率。 - 在大型监控系统中,聚合操作可能会消耗较多资源,需要合理使用。