首页/数据/NoSQL 速查/InfluxDB 2.x 定时降采样任务

InfluxDB 2.x 定时降采样任务

Task 是 2.x 内置的定时 Flux 任务:用 option task 声明周期,每次执行读取上一窗口数据聚合并写入低精度 bucket,实现自动降采样。

NoSQL 速查数据更新于 2026-10-13

内置定时任务做什么

InfluxDB 2.x 的 Task 是内置的定时 Flux 任务:用 option task 声明名称、周期与偏移,每次执行读取上一个窗口的数据,聚合后写入低精度 bucket。它是官方推荐的降采样方式,不需要额外部署定时脚本与调度器。

窗口与幂等性

任务每次只处理一个周期的窗口,写入时保留原测量与标签,同一时间点重复执行会覆盖成相同内容,所以重跑是幂等的。但任务停摆期间的历史窗口不会自动补算,恢复后低精度数据会留下缺口,需要时得手工回填。

基本信息

声明option task = {name: "cpu-downsample", every: 1h, offset: 5m}
聚合aggregateWindow(every: 1h, fn: mean, createEmpty: false)
写出to(bucket: "downsampled", org: "my-org")
管理influx task create / list / run,执行记录用 influx task log 查看
适用版本InfluxDB 2.x

示例

示例
option task = {name: "cpu-downsample", every: 1h, offset: 5m}

from(bucket: "metrics")
  |> range(start: -task.every)
  |> filter(fn: (r) => r._measurement == "cpu")
  |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
  |> to(bucket: "downsampled", org: "my-org")

// 只保留需要的列,避免把无用字段一起放大到低精度 bucket
// |> keep(columns: ["_time", "_measurement", "_field", "_value", "host"])

典型使用场景

  • 降低高精度数据的保留压力:原始数据短期保留,降采样长期保存
  • 加速长周期看板:查询低精度数据而不是扫描全部原始点
  • 跨 bucket 归档:把小时聚合结果写进长期 bucket
  • 指标预计算:把均值、最大值等常用聚合提前算好
  • 采集与查询解耦:写入高峰与看板查询互不影响

要素与注意

要素作用注意
option task声明任务名与周期名称重复会创建失败
every执行周期与聚合窗口保持一致
offset相对周期起点的偏移等上游数据落盘后再执行
range(start: -task.every)处理窗口只看过去一个周期,缺口不自动补
aggregateWindow窗口聚合createEmpty: false 跳过空窗口
写入降采样 bucket 的结果保留原测量与标签,同一时间点重复执行得到相同内容,任务重跑是幂等的,不必担心重复写导致数据翻倍。
任务停摆期间的历史窗口不会自动补算,恢复后低精度数据会留下缺口;需要时用同样的聚合逻辑手工回填对应的 range,并核对补算结果与实时任务输出是否一致。
offset 的作用是让任务在上游数据落盘之后再执行:采集器与任务周期相近且不留偏移时,最后一个窗口的数据可能还没写完就被聚合,低精度结果会系统性偏低。

易错点

  • range(start: -task.every) 只看过去一个周期,任务停摆后产生的历史缺口不会自动补
  • 聚合结果写入低精度 bucket 时应去掉不需要的字段,避免把无用列一起放大存储
  • every 与 aggregateWindow 的窗口设置不一致会让写入点错位或重复统计
  • 任务失败后不查日志就重复创建,可能出现同名冲突或多个任务同时往一个 bucket 写

数据来源与参考

  • InfluxData Docs: Process data with tasks
  • InfluxData Docs: Downsample data
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌