TSDS 指南
编辑TSDS 指南编辑
此页面介绍如何在集成包中启用 TSDS 功能。有关 TSDS 的完整信息,请参阅 Elasticsearch 文档中的 时间序列数据流。
在本文件中,您可以找到
背景编辑
时间序列是特定实体的一系列观测值。TSDS 通过将数据共同定位并优化存储和聚合以利用这种共同定位,从而在 elasticsearch 中启用面向列的功能。
集成是 Elasticsearch 输入数据的主要来源之一。可以通过在包的 fields.yml
和 manifest.yml
文件中进行微小更改来在集成包上启用 TSDS。
为度量数据集启用 TSDS 的步骤编辑
类型为 logs
的数据流被排除在 TSDS 迁移之外。
步骤 1:设置维度字段编辑
每个属于唯一标识文档的字段集的字段都是一个维度。有关更多详细信息,请参阅 维度。
要将字段设置为维度,只需将其映射中添加 dimension: true
- name: ApiId type: keyword dimension: true
类型为 flattened 的字段不能选择为维度字段。如果选择的维度字段过长或类型为 flattened,请考虑对该字段的值进行哈希处理,并将结果用作维度。 指纹处理器 可用于此目的。
您可以在 Oracle 集成 TSDS 启用示例 中找到一个示例
重要注意事项
-
数据流可以拥有的维度字段数量有限制。默认情况下,此值为
21
。您可以通过更改index.mapping.dimension_fields.limit
来调整此限制elasticsearch: index_template: settings: index.mapping.dimension_fields.limit: 32 # Defaults to 21
- 维度键的硬限制为 512b。如果达到此限制,则会拒绝文档。
- 维度值的硬限制为 1024b。如果达到此限制,则会拒绝文档。
ECS 字段编辑
有些字段是每个包的一部分,并且是成为维度字段的潜在候选字段
-
host.name
-
service.address
-
agent.id
-
container.id
对于能够在本地和公共云环境中运行(通过部署在公共云虚拟机上)的产品,建议将下面列出的 ECS 字段注释为维度字段
-
host.name
-
service.address
-
container.id
-
cloud.account.id
-
cloud.provider
-
cloud.region
-
cloud.availability_zone
-
agent.id
-
cloud.instance.id
对于在 AWS、Azure 和 GCP 等云提供商中作为托管服务运行的产品,建议将下面列出的字段标记为维度字段
-
cloud.account.id
-
cloud.region
-
cloud.availability_zone
-
cloud.provider
-
agent.id
请注意,对于某些包,其中一些字段没有任何值,因此请确保只使用必要的字段。
集成特定字段编辑
files.yml
文件包含特定于集成数据流的字段映射。如果 ECS 中的维度字段集不足以创建唯一的 _tsid
,则可能需要将其中一些字段设置为维度。
建议在维度注释之前添加内联注释,详细说明选择特定字段作为维度字段的理由
``` - name: wait_class type: keyword # Multiple events are generated based on the values of wait_class. Hence, it is a dimension dimension: true description: Every wait event belongs to a class of wait events. ```
步骤 2:为度量字段设置类型编辑
度量是包含数值测量值以及基于这些测量值的聚合和/或降采样值的字段。用正确的度量类型注释每个度量。 当前支持的值 是 gauge
、counter
和 null
。
向字段添加度量类型的示例
- name: compactions_failed type: double metric_type: counter description: | Counter of TSM compactions by level that have failed due to error.
某些聚合函数不支持某些 metric_type
值。在这种情况下,请重新检查您选择的 metric_type
是否确实适合该字段。如果有效,请在 elastic/elasticsearch 中创建一个问题,说明用例。
步骤 3:更新 Kibana 版本编辑
在包的 manifest.yml
文件中将 kibana.version
修改为至少 8.8.0
conditions: kibana.version: "^8.8.0"
步骤 4:启用 time_series
索引模式编辑
如所示,将更改添加到数据流的 manifest.yml
文件中以启用时间序列索引模式
elasticsearch: index_mode: "time_series"
测试编辑
- 如果维度数量不足,我们将丢失数据。考虑使用 TSDS 迁移测试工具包 来测试这一点。
- 验证仪表板是否正确呈现数据。如果某些可视化不起作用,请考虑迁移到 Lens。请记住,当字段具有度量类型
counter
时,某些聚合函数不受支持,例如avg()
。将此类聚合函数替换为支持的聚合类型,例如max()
或min()
。
最佳实践编辑
故障排除编辑
丢弃的文档编辑
如果在启用 TSDS 后发现指标数据正在从索引中删除,则 TSDS 迁移测试工具包 可以用作有用的调试工具。
冲突的字段类型编辑
具有冲突字段类型的字段不会被视为维度。在将字段定义为维度字段之前,请解决字段类型歧义。
写入索引的识别编辑
当数据流的映射发生修改时,索引滚动会发生,并且会在数据流下创建一个新索引。即使存在新索引,数据也会继续写入旧索引,直到时间戳与新创建索引的 index.time_series.start_time
相匹配。
Kibana 的 增强请求 是为了指示写入索引。在此之前,请参考索引的 index.time_series.start_time,并将其与当前时间进行比较,以识别写入索引。
如果您发现此错误(供参考,请参阅 集成问题 #7345 和 elasticsearch PR #98518)
... (status=400): {"type":"illegal_argument_exception","reason":"the document timestamp [2023-08-07T00:00:00.000Z] is outside of ranges of currently writable indices [[2023-08-07T08:55:38.000Z,2023-08-07T12:55:38.000Z]]"}, dropping event!
考虑
-
为每个数据流定义
look_ahead
或look_back_time
。例如elasticsearch: index_mode: "time_series" index_template: settings: index.look_ahead_time: "10h"
使用此更新包不会导致数据流自动滚动。您必须手动执行此操作。
- 更新被拒绝的文档的
timestamp
。 - 找到无需延迟即可接收文档的修复方法。