使用 InfluxDB 降采样数据
InfluxDB 任务最常见的用例之一是降采样数据,以随着时间的推移减少数据收集所造成的总体磁盘使用量。在以前版本的 InfluxDB 中,连续查询承担了这一角色。
本文档逐步介绍如何创建类似于连续查询的任务,该任务通过在时间窗口内聚合数据,然后将聚合值存储到新的 Bucket 中来降采样数据。
要求
要执行降采样任务,您需要以下内容
“源” Bucket
从中查询数据的 Bucket。
“目标” Bucket
用于存储聚合的、降采样数据的单独 Bucket。
某种类型的聚合
要降采样数据,必须以某种方式对其进行聚合。您使用的具体聚合方法取决于您的具体用例,但示例包括平均值、中位数、顶部、底部等。查看 Flux 的聚合函数 以获取更多信息和想法。
降采样任务脚本示例
下面的示例任务脚本是一种非常基本的数据降采样形式,它执行以下操作
- 定义一个名为“cq-mem-data-1w”的任务,该任务每周运行一次。
- 定义一个
data
变量,该变量表示来自system-data
Bucket 的mem
测量中的过去 2 周的所有数据。 - 使用
aggregateWindow()
函数 将数据窗口化为 1 小时间隔,并计算每个间隔的平均值。 - 将聚合的数据存储在
my-org
组织下的system-data-downsampled
Bucket 中。
// 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")
同样,这是一个非常基本的示例,但它应该为您构建更复杂的降采样任务提供基础。
添加您的任务
一旦您的任务准备就绪,请参阅 创建任务 以获取有关将其添加到 InfluxDB 的信息。
需要考虑的事项
- 如果数据可能延迟到达,请在您的任务选项中指定一个
offset
,其长度足以考虑延迟数据。 - 如果针对具有有限保留期的 Bucket 运行任务,请安排任务在保留期结束之前运行,以便降采样任务在保留期之外的数据被删除之前完成。
此页是否对您有帮助?
感谢您的反馈!