时间序列数据流
时序数据流 (TSDS) 是一种专为索引指标数据而优化的数据流。TSDS 可帮助您将一系列数据点作为一个整体进行分析。
TSDS 还可以帮助您更高效地存储指标数据。在我们的基准测试中,存储在 TSDS 中的指标数据比常规数据流占用的磁盘空间少 70%。具体效果因数据集而异。
在设置时序数据流之前,请确保您熟悉常规数据流概念。
指标由数据点-时间戳对组成,由维度字段标识,可用于聚合查询。常规数据流和时序数据流都可以存储指标数据。
如果您通常以近乎实时的方式并按 @timestamp 顺序将指标数据添加到 Elasticsearch,请选择时序数据流。对于其他带时间戳的数据(例如日志或追踪),请使用日志数据流或常规数据流。
为确保 TSDS 适合您的使用场景,请查看本页面上关于与常规数据流的区别列表。
时序是针对特定实体的一系列观测值。这些观测值共同让您可以随时间推移跟踪实体的变化。例如,时序可以跟踪
- 计算机的 CPU 和磁盘使用率
- 股票价格
- 来自气象传感器的温度和湿度读数
与常规数据流相比,TSDS 使用了一些特定于时序的附加字段:维度字段和指标字段,以及一个内部 _tsid 元数据字段。
维度字段通常对应于您所测量的项目的特征。例如,与同一个气象传感器相关的文档可能具有相同的 sensor_id 和 location 值。
Elasticsearch 使用维度和时间戳来生成时序文档的 _id 值。具有相同维度和时间戳的两个文档被视为重复项。重复项在摄取期间会被拒绝,并返回 409 Conflict 状态。
要将字段标记为维度,请将布尔值 time_series_dimension 映射参数设置为 true。以下字段类型支持 time_series_dimension 参数
若要处理 flattened 字段,请使用 time_series_dimensions 参数将字段数组配置为维度。有关详细信息,请参阅 flattened。
您还可以通过使用直通 (pass-through) 字段来简化维度定义。
指标是随时间变化的数值测量值。TSDS 中的文档通常包含一个或多个指标字段。
要将字段标记为指标,请使用 time_series_metric 映射参数。此参数确保数据以适合时序分析的最佳方式进行存储。time_series_metric 的有效值为 counter(计数器)、gauge(仪表)和 histogram(直方图)
counter- 一种跟踪随时间累积的值的指标。例如,重启服务进程时重置的错误计数或已完成任务的计数。默认情况下,计数器使用累积时间属性,但也支持增量时间属性。所有数字字段类型都支持计数器。
gauge- 一种表示可以任意增加或减少的单个数值的指标。例如,温度或可用磁盘空间。所有数字字段类型和
aggregate_metric_double(用于下采样期间的内部使用,很少由用户填充)都支持仪表 (gauge)。 histogram- 一种跟踪数值分布(如延迟或大小分布)的指标。
histogram、tdigest和exponential_histogram支持直方图。默认情况下,直方图使用增量时间属性,但exponential_histogram也支持累积时间属性。
_tsid 是根据文档维度自动生成的对象。它旨在供 Elasticsearch 内部使用,因此在大多数情况下,您无需直接操作它。_tsid 字段的格式可能会发生变化。
时序数据流的工作方式与常规数据流类似,但有一些关键区别:
时序索引模式:TSDS 的匹配索引模板必须包含一个
data_stream对象,并将index.mode设置为time_series。此选项可启用大多数与 TSDS 相关的功能。字段:在 TSDS 中,每个文档包含
后端索引:TSDS 使用时间绑定索引,将同一时间段的数据存储在同一个后端索引中。
基于维度的路由:路由逻辑使用维度字段将时序的所有数据点映射到同一个分片,从而提高存储效率和查询性能。重复的数据点会被拒绝。
排序:TSDS 使用内部索引排序,按
_tsid和@timestamp对分片段进行排序,以实现更好的压缩。时序数据流不使用index.sort.*设置。Source 字段:TSDS 使用合成
_source,因此受到应用于_source字段的一些限制和修改约束。文档值跳过器 (Doc values skippers):TSDS 在其 _tsid、@timestamp、维度 和 指标 字段上启用了文档值跳过器。由于tsid和@timestamp是索引排序的一部分,跳过器允许 {{es}} 避免为这些字段构建后端索引,从而降低磁盘使用率并提高摄取速度。序列号被禁用:TSDS 默认禁用序列号,以大幅提高存储效率(最高可达 2 倍)。 当禁用序列号时,乐观并发控制将被禁用,导致 update-by-query 和 delete-by-query 操作以较弱的一致性执行。这些功能通常与时序工作负载无关,但如果您的应用程序需要它们,可以通过在相关 TSDS 的索引模板中设置
index.disable_sequence_numbers: false来恢复序列号。
您可以使用 ES|QL TS 命令来查询时序数据流。TS 命令针对高效处理时序数据进行了优化,并支持将时序聚合函数与窗口配合使用。
- 尝试快速入门进行实践介绍
- 设置时间序列数据流
- 使用 OpenTelemetry 协议 (OTLP) 摄取数据
- 使用 Prometheus 远程写入摄取数据
- 了解指标时间属性(增量与累积)
- 了解下采样 (downsampling) 以减少存储空间占用