📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

数据流(Data Stream)是 Easysearch 中专门用于管理时间序列数据(如日志、事件和指标)的机制。数据流内部由多个底层索引组成,支持自动滚动(rollover)和生命周期管理。

API #

PUT /_data_stream/{name}

API 的作用 #

创建数据流用于存储时间序列数据。数据流的主要特点包括:

  • 自动滚动管理:当满足特定条件(如文档数量、大小或时间)时,自动创建新的后备索引
  • 简化操作:无需直接管理多个索引,统一通过数据流进行读写
  • 优化查询:自动按时间顺序组织数据,提高时间范围查询的性能
  • 生命周期管理:支持根据时间策略自动管理数据保留

创建数据流后会自动初始化第一个底层索引,名称格式为 .ds-{name}-000001

API 的参数 #

路由参数 #

参数类型是否必需描述
namestring必需数据流的名称,必须是有效的索引名称格式

查询字符串参数 #

参数类型是否必需默认值描述
master_node_timeouttime可选30s等待主节点响应的超时时间。如果在指定时间内主节点未响应,操作将失败
timeouttime可选30s等待操作完成确认的超时时间
prettyboolean可选-格式化 JSON 输出
formatstring可选json指定响应格式(如 json、yaml)

使用前准备 #

在创建数据流之前,必须先创建相应的索引模板,模板中需要包含 data_stream 配置对象。

索引模板示例 #

PUT /_index_template/my-data-stream-template
{
  "index_patterns": ["my-data-stream*"],
  "data_stream": {},
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 1
    },
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "message": {
          "type": "text"
        }
      }
    }
  }
}

重要说明:

  • 数据流必须包含一个时间戳字段(默认是 @timestamp
  • 索引模板的 index_patterns 必须与数据流名称匹配

请求示例 #

# 创建数据流
PUT /_data_stream/my-data-stream

# 带超时参数的创建请求
PUT /_data_stream/logs-nginx?master_node_timeout=60s&timeout=50s

响应示例 #

成功响应 #

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "my-data-stream"
}

错误响应 #

当缺少名称参数时:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "name is missing"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "name is missing"
  },
  "status": 400
}

注意事项 #

  1. 数据流名称必须与索引模板匹配:创建数据流前需要确保有匹配的索引模板,否则会失败
  2. 时间戳字段:写入数据流的文档必须包含时间戳字段
  3. 不支持请求体:创建数据流 API 不使用请求体,所有配置通过索引模板定义
  4. 底层索引命名:创建后自动生成第一个后备索引,名称格式为 .ds-{name}-000001
  5. 不可更新:数据流创建后无法修改,只能删除后重新创建

相关文档 #