在Elasticsearch中,设置时间序列数据流(Time Series Data Stream,简称TSDS)是一种高效管理和存储时间序列数据的方法。时间序列数据是指按照时间顺序记录的数据点,例如传感器数据、日志数据或任何随时间变化的指标。TSDS通过优化索引结构和生命周期管理,帮助用户高效地存储、查询和分析这类数据。
以下是详细说明如何在Elasticsearch中设置TSDS的步骤和关键概念:
---
1.时间序列数据流(TSDS)的概念
时间序列数据流是Elasticsearch中的一种特殊数据流,专为处理时间序列数据设计。它通过以下方式优化性能和存储:
• 自动分片管理:TSDS会根据时间范围自动分片数据,确保每个分片只包含特定时间段的数据。
• 生命周期管理:通过索引生命周期管理(ILM),TSDS可以自动执行滚动(rollover)、压缩(shrink)和删除等操作。
• 优化查询性能:TSDS通过时间序列维度(`time_series_dimension`)和时间序列指标(`time_series_metric`)字段优化查询性能,确保快速检索。
---
2.设置TSDS的步骤
步骤1:检查先决条件
在开始设置TSDS之前,需要确保以下条件满足:
• Elasticsearch版本:确保使用的是支持TSDS的Elasticsearch版本(如8.x及以上)。
• 权限:用户需要具备以下权限:
• 集群权限:`manage_ilm`(管理索引生命周期策略)和`manage_index_templates`(管理索引模板)。
• 索引权限:`create_doc`和`create_index`(用于创建TSDS),以及`manage`权限(用于滚动TSDS)。
---
步骤2:创建索引生命周期策略(ILM)
索引生命周期管理(ILM)是Elasticsearch中用于自动化索引管理的工具。对于TSDS,建议使用ILM来管理其后端索引。生命周期策略定义了索引在不同阶段的行为,例如:
• Hot阶段:数据写入阶段,通常设置`rollover`操作,根据时间或大小滚动索引。
• Warm阶段:数据不再写入,但需要查询的阶段,通常执行压缩操作。
• Cold阶段:数据很少被访问,但需要保留的阶段,通常使用可搜索快照。
• Frozen阶段:数据被冻结,但仍可查询。
• Delete阶段:数据最终被删除。
以下是一个示例生命周期策略,适用于气象传感器数据:
```json
PUT _ilm/policy/my-weather-sensor-lifecycle-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "1d", // 每天滚动一次索引
"max_primary_shard_size": "50gb" // 每个分片最大50GB
}
}
},
"warm": {
"min_age": "30d",
"actions": {
"shrink": {
"number_of_shards": 1
},
"forcemerge": {
"max_num_segments": 1
}
}
},
"cold": {
"min_age": "60d",
"actions": {
"searchable_snapshot": {
"snapshot_repository": "found-snapshots"
}
}
},
"frozen": {
"min_age": "90d",
"actions": {
"searchable_snapshot": {
"snapshot_repository": "found-snapshots"
}
}
},
"delete": {
"min_age": "735d",
"actions": {
"delete": {}
}
}
}
}
}
```
---
步骤3:创建索引模板
索引模板定义了TSDS的结构,包括字段映射、索引设置和生命周期策略。以下是创建索引模板的关键点:
• 索引模式:定义匹配TSDS名称的模式,例如`metrics-weather_sensors-*`。
• 启用数据流:设置`data_stream`为`{}`以启用数据流。
• 字段映射:
• 维度字段:标记为`time_series_dimension`的字段,用于分片路由。
• 指标字段:标记为`time_series_metric`的字段,用于存储实际数据。
• 索引设置:
• 设置`index.mode`为`time_series`。
• 指定生命周期策略名称(`index.lifecycle.name`)。
• 优先级:设置优先级高于200,以避免与内置模板冲突。
以下是一个示例索引模板:
```json
PUT _index_template/my-weather-sensor-index-template
{
"index_patterns": ["metrics-weather_sensors-*"],
"data_stream": {},
"template": {
"settings": {
"index.mode": "time_series",
"index.lifecycle.name": "my-weather-sensor-lifecycle-policy"
},
"mappings": {
"properties": {
"sensor_id": {
"type": "keyword",
"time_series_dimension": true
},
"location": {
"type": "keyword",
"time_series_dimension": true
},
"temperature": {
"type": "half_float",
"time_series_metric": "gauge"
},
"humidity": {
"type": "half_float",
"time_series_metric": "gauge"
},
"@timestamp": {
"type": "date"
}
}
}
},
"priority": 500,
"_meta": {
"description": "Template for my weather sensor data"
}
}
```
---
步骤4:创建TSDS
创建TSDS可以通过以下两种方式:
1. 自动创建:通过向TSDS名称发送索引请求,Elasticsearch会自动根据索引模板创建TSDS。
```json
PUT metrics-weather_sensors-dev/_doc
{
"@timestamp": "2099-05-06T16:21:15.000Z",
"sensor_id": "HAL-000001",
"location": "plains",
"temperature": 26.7,
"humidity": 49.9
}
```
2. 手动创建:使用`_data_stream`API直接创建TSDS。
```json
PUT _data_stream/metrics-weather_sensors-dev
```
---
步骤5:保护TSDS
为了确保数据安全,可以使用Elasticsearch的安全功能(如角色和权限)控制对TSDS的访问。授予对TSDS的权限会自动授予对其后端索引的相同权限。
---
3.将现有数据流转换为TSDS
如果已经有一个普通数据流,可以通过以下步骤将其转换为TSDS:
1. 编辑现有的索引生命周期策略、组件模板和索引模板,以支持TSDS。
2. 手动滚动数据流的写入索引,确保其后端索引的`index.mode`设置为`time_series`。
```json
POST metrics-weather_sensors-dev/_rollover
```
---
4.组件模板和`index.mode`设置
如果使用组件模板,需要注意以下几点:
• 组件模板中的映射和设置需要独立有效。
• 如果定义了`index.routing_path`,则其引用的字段需要定义在启用了`time_series_dimension`属性的同一个组件模板中。
• `index.mode`设置为`time_series`时,`index.routing_path`会自动根据`time_series_dimension`字段配置。
---
5.总结
通过上述步骤,您可以高效地设置和管理时间序列数据流(TSDS)。TSDS通过优化索引结构和生命周期管理,显著提升了时间序列数据的存储效率和查询性能。它特别适用于需要处理大量时间序列数据的场景,例如物联网传感器数据、日志数据或监控指标。
---
希望这些内容能够帮助您更好地理解和设置Elasticsearch中的时间序列数据流(TSDS)。