Elasticsearch 数据流设置指南:从零开始构建时间序列数据管道

Elasticsearch 数据流设置指南:从零开始构建时间序列数据管道

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. 创建组件模板

组件模板是可重用的索引配置模块,通常我们会创建两个:

  1. 映射模板:定义字段类型和属性
  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. 创建数据流

有两种方式创建数据流:

  1. 自动创建:通过索引文档自动创建
  2. 手动创建:使用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

最佳实践

  1. 命名规范:使用一致的命名模式,如<type>-<dataset>-<namespace>
  2. 字段映射:遵循Elastic Common Schema (ECS)规范
  3. 运行时字段:对于不确定的字段结构,考虑使用运行时字段
  4. 监控:定期检查数据流状态和ILM执行情况

通过以上步骤,你可以建立一个完整的时间序列数据处理管道,利用Elasticsearch的数据流功能实现高效、自动化的数据管理。

elasticsearch elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邬祺芯Juliet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值