使用InfluxDB降采样数据
InfluxDB 任务最常见的用例之一是对数据进行降采样,以减少随着时间的推移数据收集所占用的整体磁盘空间。 在之前版本的 InfluxDB 中,持续查询承担了这个角色。
这篇文章介绍了创建一个连续查询任务,该任务通过在时间窗口内聚合数据来对数据进行降采样,然后将聚合值存储在新的桶中。
要求
要执行下采样任务,您需要以下内容:
一个“源”桶
从中查询数据的桶。
一个“目的地”存储桶
一个单独的桶,用于存储聚合的、降采样的数据。
某种类型的聚合
要对数据进行降采样,必须以某种方式进行聚合。您使用的具体聚合方法取决于您的具体用例,但示例包括均值、中位数、顶部、底部等。查看 Flux 的聚合函数 以获取更多信息和想法。
示例下采样任务脚本
下面的示例任务脚本是数据下采样的一种非常基本的形式,执行以下操作:
- 定义一个名为“cq-mem-data-1w”的任务,该任务每周运行一次。
- 定义一个
data变量,该变量表示system-data这个桶中mem测量的过去2周的所有数据。 - 使用
aggregateWindow()函数将数据分成1小时的时间窗口,并计算每个时间窗口的平均值。 - 将聚合数据存储在
system-data-downsampled存储桶下的my-org组织中。
// Task Options
option task = {name: "cq-mem-data-1w", every: 1w}
// Defines a data source
data = from(bucket: "system-data")
|> range(start: -duration(v: int(v: task.every) * 2))
|> filter(fn: (r) => r._measurement == "mem")
data
// Windows and aggregates the data in to 1h averages
|> aggregateWindow(fn: mean, every: 1h)
// Stores the aggregated data in a new bucket
|> to(bucket: "system-data-downsampled", org: "my-org")
再一次,这是一个非常基础的示例,但它应该为您提供一个基础, 以构建更复杂的下采样任务。
添加您的任务
一旦您的任务准备好了,请参见 Create a task 以获取有关将其添加到 InfluxDB 的信息。
需要考虑的事项
- 如果数据可能会晚到,请在您的任务选项中指定一个足够长的
offset以考虑迟到的数据。 - 如果在具有有限保留期的桶上运行任务,请安排任务在保留期结束之前运行,以便在超出保留期的数据被丢弃之前,让下采样任务完成。