降采样概念
本页介绍了降采样的核心概念。
降采样仅适用于时间序列数据流。
时间序列是针对特定实体随时间观测的一系列观测值。观测到的样本可以表示为连续函数,其中时间序列维度保持不变,而时间序列指标随时间变化。
在时间序列数据流中,每个时间戳都会创建一个单独的文档。该文档包含不可变的时间序列维度,以及指标名称和值。单个时间戳可以存储多个时间序列维度和指标。
对于最新数据,指标序列通常具有较短的采样时间间隔,以针对需要高数据分辨率的查询进行优化。
降采样通过将原始时间序列替换为具有更高采样间隔的数据流以及数据的统计表示,来减少较旧、访问频率较低的数据的存储占用。例如,如果原始指标样本每 10 秒采集一次,您可以选择随着数据老化将采样粒度降低为每小时一次。或者,您可以选择将冷归档数据的粒度降低为每月或更低。
降采样应用于 TSDS 的各个后备索引。降采样操作会遍历源时间序列索引并执行以下步骤:
为每组具有匹配
_tsid值(时间序列维度字段)的文档创建一个新文档,并将其归类到对应于特定时间间隔的存储桶中。例如,包含每 10 秒采样一次指标的 TSDS 索引可以降采样为每小时索引。给定小时间隔内的所有文档都会被汇总并存储为降采样索引中的单个文档。
对于每个新文档,将所有时间序列维度从源索引复制到目标索引。TSDS 中的维度是常量,因此此步骤每个存储桶仅执行一次。
对于所有其他字段,将最新值复制到目标索引。
用降采样索引替换原始索引,然后删除原始索引。
新的降采样索引是在原始索引的数据层上创建的,并继承了原始设置,例如分片和副本数量。
您可以对降采样索引进行降采样。后续的降采样间隔必须是前一次降采样操作所用间隔的倍数。
降采样支持两种将同一存储桶中的多个值简化为单个代表性结果的方法:
last_value:仅存储存储桶中每个指标的最新值。此方法最能减少存储占用,但也会降低数据准确性。它适用于所有指标类型。 aggregate存储每个存储桶中值的统计摘要。此方法比last_value保留了更多信息,但需要更多存储空间。它适用于每种指标类型,具体如下:gauge字段- 以
aggregate_metric_double存储min、max、sum和value_count。
- 以
counter字段histogram字段将各个直方图合并为一个直方图,保留字段类型。
支持所有三种直方图字段类型:
histogram、tdigest和exponential_histogram。histogram和tdigest字段类型使用 T-Digest 算法进行合并。保留指标的时间属性。对于累积直方图,Elasticsearch 使用与累积计数器相同的算法。
对降采样索引进行降采样时,请使用与源索引相同的降采样方法。
目标降采样索引使用与源索引相同的字段映射,但有一个例外:time_series_metric: gauge 字段映射为 aggregate_metric_double。
aggregate_metric_double 可用于 max、min、sum、value_count 和 avg 聚合,而不会损失精度。
aggregate_metric_double 的降采样仪表盘(gauge)仍可在其他操作中用作 double,但精度会降低。在这种情况下,每个降采样间隔的平均值将用作单个代表值。