加载中

设置数据流

在 Elastic Stack 和 Elastic Cloud Serverless 中设置数据流的过程非常相似,都是利用各自的 API。然而,由于 Serverless 提供了内置的 数据流生命周期 机制和保留设置,您不需要像在 Elastic Stack 部署中那样配置索引生命周期管理 (ILM) 选项。

要设置数据流,请执行以下步骤

  1. 创建索引生命周期策略
  2. 创建组件模板
  3. 创建索引模板
  4. 创建数据流
  5. 保护数据流

您还可以 将索引别名转换为数据流

重要提示

如果您使用 Fleet、Elastic Agent 或 Logstash,请跳过本教程。它们都会为您设置数据流。

对于 Fleet 和 Elastic Agent,请参阅 适用于 Fleet 的 Elastic Agent 数据流。对于 Logstash,请参阅 elasticsearch output 插件的 数据流设置

虽然是可选的,但我们建议在 Elastic Stack 部署中使用索引生命周期管理 (ILM) 功能,以自动管理您的数据流的支持索引 (backing indices)。ILM 需要一个索引生命周期策略。

Serverless 项目中更简单的生命周期管理

ILM 允许您根据性能需求和保留要求自动转换数据层中的索引。这使您能够在硬件成本和性能之间取得平衡。ILM 在 Serverless 中不可用,在 Serverless 中性能优化是自动的。相反,数据流生命周期 可作为数据管理选项使用。

在 Kibana 中创建索引生命周期策略

  1. 使用导航菜单或全局搜索字段转到 Index Lifecycle Policies 管理页面。
  2. 点击 Create policy

您还可以使用 创建生命周期策略 API

				PUT _ilm/policy/my-lifecycle-policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_primary_shard_size": "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": {}
        }
      }
    }
  }
}
		

数据流需要一个匹配的索引模板。在大多数情况下,您可以使用一个或多个组件模板来组合此索引模板。您通常为映射和索引设置使用单独的组件模板。这使您能够在多个索引模板中重用组件模板。

创建组件模板时,请包含

  • 用于 @timestamp 字段的 datedate_nanos 映射。如果您不指定映射,Elasticsearch 会将 @timestamp 映射为具有默认选项的 date 字段。
  • index.lifecycle.name 索引设置中的生命周期策略。
提示

映射字段时,请使用 弹性通用模式 (ECS)。ECS 字段默认与多个 Elastic Stack 功能集成。

如果您不确定如何映射字段,请使用 运行时字段 在搜索时从 非结构化内容 中提取字段。例如,您可以将日志消息索引到 wildcard 字段,稍后在搜索过程中从该字段提取 IP 地址和其他数据。

在 Kibana 中创建组件模板

  1. 使用导航菜单或全局搜索字段转到 Index Management 页面。
  2. 索引模板 (Index Templates) 选项卡中,点击 创建组件模板 (Create component template)

使用 API 创建组件模板

要为映射创建组件模板,请使用此请求

				PUT _component_template/my-mappings
					{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date",
          "format": "date_optional_time||epoch_millis"
        },
        "message": {
          "type": "wildcard"
        }
      }
    }
  },
  "_meta": {
    "description": "Mappings for @timestamp and message fields",
    "my-custom-meta-field": "More arbitrary metadata"
  }
}
		

要为索引设置创建组件模板,请使用此请求

				PUT _component_template/my-settings
					{
  "template": {
    "settings": {
      "index.lifecycle.name": "my-lifecycle-policy"
    }
  },
  "_meta": {
    "description": "Settings for ILM",
    "my-custom-meta-field": "More arbitrary metadata"
  }
}
		

使用您的组件模板来创建索引模板。指定

  • 一个或多个与数据流名称匹配的索引模式。我们建议使用我们的 数据流命名方案
  • 模板已启用数据流。
  • 任何包含您的映射和索引设置的组件模板。
  • 高于 200 的优先级,以避免与内置模板冲突。请参阅 避免索引模式冲突

在 Kibana 中创建索引模板

  1. 使用导航菜单或全局搜索字段转到 Index Management 页面。
  2. 在“索引模板”(Index Templates)选项卡中,点击“创建模板”(Create template)。

使用 API 创建索引模板

包含 data_stream 对象以启用数据流

				PUT _index_template/my-index-template
					{
  "index_patterns": ["my-data-stream*"],
  "data_stream": { },
  "composed_of": [ "my-mappings", "my-settings" ],
  "priority": 500,
  "_meta": {
    "description": "Template for my time series data",
    "my-custom-meta-field": "More arbitrary metadata"
  }
}
		
提示

您也可以直接在 Kibana 的 流 (Streams) UI 中创建经典流。这提供了一种比下面描述的多步骤基于 API 的方法更简单的替代方案。

索引请求 将文档添加到数据流中。这些请求必须使用 op_typecreate。文档必须包含 @timestamp 字段。

要自动创建数据流,请提交指向数据流名称的索引请求。此名称必须与您的索引模板的其中一个索引模式匹配。

				PUT my-data-stream/_bulk
					{ "create":{ } }
{ "@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" }
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:25:42.000Z", "message": "192.0.2.255 - - [06/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" }
				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"
}
		

您也可以使用 API 手动创建数据流

				PUT _data_stream/my-data-stream
		

创建后,您可以从 索引管理 (Index Management) 视图查看和管理此数据流及其他数据流。有关详细信息,请参阅 管理数据流

使用 索引权限 来控制对数据流的访问。授予数据流的权限也会授予其支持索引的相同权限。

有关示例,请参阅 数据流权限

在 Elasticsearch 7.9 之前,您通常使用带有写索引的索引别名来管理时间序列数据。数据流取代了此功能,需要的维护更少,并能自动与 数据层 集成。

您可以使用 API 将带有写索引的索引别名转换为同名的数据流

在转换过程中,别名的索引会成为流的隐藏支持索引。别名的写索引会成为流的写索引。该流仍然需要一个启用了数据流的匹配索引模板。

				POST _data_stream/_migrate/my-time-series-data
		

您可以使用 Kibana UI(可视化概览)或 API(原始 JSON)查看关于每个数据流的元数据。

在 Kibana 中获取关于数据流的信息

  1. 使用导航菜单或全局搜索字段转到 Index Management 页面。
  2. 数据流 (Data Streams) 选项卡中,点击数据流的名称。
提示

您也可以使用 流 (Streams) 页面查看数据流的详细信息。流 (Streams) 页面提供了一个用于在 Kibana 中管理数据的集中式界面。选择一个流以查看其详细信息。

您也可以使用 API 来获取此信息

				GET _data_stream/my-data-stream
		

您可以通过 Kibana UI 或 API 删除数据流及其支持索引。要完成此操作,您需要针对该数据流拥有 delete_index 安全权限

在 Kibana 中删除数据流及其支持索引

  1. 使用导航菜单或全局搜索字段转到 Index Management 页面。
  2. 数据流 (Data Streams) 视图中,点击垃圾桶图标。只有当您拥有该数据流的 delete_index 安全权限时,该图标才会显示。

您也可以使用 API 删除数据流

				DELETE _data_stream/my-data-stream
		
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.