aggregateWindow 做什么
aggregateWindow 按固定时间窗口把数据聚合起来:every 定义窗口长度,fn 指定聚合函数,createEmpty 决定没有数据的窗口是否补空值。它是把高频原始数据整理成图表可读曲线的核心函数,也是降采样任务里的主要构件。
基本信息
| 语法 | |> aggregateWindow(every: 5m, fn: mean, createEmpty: false) |
|---|---|
| 常用参数 | every、period、offset、fn(mean/max/min/sum/count/last)、createEmpty、timeSrc |
| 补值 | createEmpty: true 用空值补齐无数据窗口,时间轴更连续 |
| 窗口对齐 | 窗口按 UTC 对齐,需要本地零点对齐时用 offset 调整 |
| 输出时间戳 | timeSrc 决定结果时间取窗口起点还是结束时间 |
典型使用场景
- 把秒级原始指标聚合成 5 分钟曲线,降低绘图点数
- 降采样任务:每小时聚合均值与最大值写入另一个 bucket
- 跨主机汇总统计:先按标签分组再按窗口聚合
- 告警判定:在时间窗口内统计错误数量
- 补齐缺失窗口,避免图表时间轴出现断裂
常用写法
常用写法
from(bucket: "metrics")
|> range(start: -6h)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage")
|> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
|> yield(name: "cpu_5m_avg")
// 同时输出均值与最大值:两个分支各自 yield 并命名
from(bucket: "metrics")
|> range(start: -6h)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage")
|> aggregateWindow(every: 5m, fn: max)
|> yield(name: "cpu_5m_max")
// 按本地时区零点对齐窗口
from(bucket: "metrics")
|> range(start: -1d)
|> aggregateWindow(every: 1h, fn: mean, offset: -8h)参数与取舍
| 参数 | 作用 | 注意 |
|---|---|---|
| every | 窗口长度 | 小于原始采样间隔会出现锯齿 |
| fn | 聚合函数 | 常用 mean / max / min / sum / count / last |
| createEmpty | 空窗口是否补值 | 补值让曲线连续,但会增加返回点数 |
| offset | 窗口边界偏移 | 用于按本地零点对齐 |
| timeSrc | 结果时间戳取窗口起点或终点 | 影响图表上的点落在哪个位置 |
窗口按 UTC 对齐,需要本地零点对齐时用 offset 调整;跨夏令时的地区要确认对齐行为是否符合预期,否则按天聚合的边界会漂移。
同时输出多个聚合结果时要用多个分支分别 yield 并命名,否则结果会混在同一个表流里,上层无法区分哪个是均值、哪个是最大值。