Elasticsearch 数据流设置指南:从零开始构建时间序列数据管道
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
数据流概述
在 Elasticsearch 中,数据流(Data Stream)是一种专门为时间序列数据设计的抽象层,它简化了时间序列数据的管理。数据流由多个隐藏的后备索引(backing indices)组成,这些索引在后台自动管理,对外则表现为单一的写入入口。
数据流设置步骤
1. 创建索引生命周期策略(可选但推荐)
索引生命周期管理(ILM)策略可以帮助自动化管理数据流的后备索引。以下是一个典型的ILM策略示例:
PUT _ilm/policy/my-lifecycle-policy
{
"policy": {
"phases": {
"hot": { // 热阶段:数据最新且频繁访问
"actions": {
"rollover": {
"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"
}
}
},
"delete": { // 删除阶段
"min_age": "735d",
"actions": { "delete": {} }
}
}
}
}
2. 创建组件模板
组件模板是可重用的索引配置模块,通常我们会创建两个:
- 映射模板:定义字段类型和属性
- 设置模板:包含索引级别的配置
// 映射组件模板
PUT _component_template/my-mappings
{
"template": {
"mappings": {
"properties": {
"@timestamp": { // 必须包含的时间戳字段
"type": "date",
"format": "date_optional_time||epoch_millis"
},
"message": { // 使用wildcard类型处理日志消息
"type": "wildcard"
}
}
}
}
}
// 设置组件模板
PUT _component_template/my-settings
{
"template": {
"settings": {
"index.lifecycle.name": "my-lifecycle-policy" // 应用ILM策略
}
}
}
3. 创建索引模板
索引模板将组件模板组合起来,并指定数据流相关配置:
PUT _index_template/my-index-template
{
"index_patterns": ["my-data-stream*"], // 匹配数据流名称的模式
"data_stream": { }, // 启用数据流功能
"composed_of": ["my-mappings", "my-settings"], // 引用的组件模板
"priority": 500, // 优先级高于内置模板(200)
"_meta": {
"description": "我的时间序列数据模板"
}
}
4. 创建数据流
有两种方式创建数据流:
- 自动创建:通过索引文档自动创建
- 手动创建:使用API显式创建
// 自动创建方式(推荐)
POST my-data-stream/_doc
{
"@timestamp": "2099-05-06T16:21:15.000Z",
"message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}
// 手动创建方式
PUT _data_stream/my-data-stream
5. 数据流安全配置
为数据流配置适当的权限,确保只有授权用户/角色可以访问:
PUT _security/role/data_stream_role
{
"indices": [
{
"names": ["my-data-stream*"],
"privileges": ["create_index", "create_doc", "read", "delete"]
}
]
}
高级主题
从索引别名迁移到数据流
如果你之前使用索引别名管理时间序列数据,可以迁移到数据流:
// 假设已有别名my-time-series-data指向多个索引
POST _data_stream/_migrate/my-time-series-data
迁移后,原别名的索引将成为数据流的后备索引。
数据流管理操作
查看数据流信息:
GET _data_stream/my-data-stream
删除数据流(会删除所有后备索引):
DELETE _data_stream/my-data-stream
最佳实践
- 命名规范:使用一致的命名模式,如
<type>-<dataset>-<namespace>
- 字段映射:遵循Elastic Common Schema (ECS)规范
- 运行时字段:对于不确定的字段结构,考虑使用运行时字段
- 监控:定期检查数据流状态和ILM执行情况
通过以上步骤,你可以建立一个完整的时间序列数据处理管道,利用Elasticsearch的数据流功能实现高效、自动化的数据管理。
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考