【Elasticsearch】Set up a data stream 创建data stream

在 Elasticsearch 中,数据流(Data Stream)是一种用于管理时间序列数据的高级功能,它通过自动管理索引的生命周期和版本控制,简化了大规模时间序列数据的存储和查询。以下是结合上述翻译内容,对 Elasticsearch 中设置数据流的详细步骤和概念的总结:


1.数据流的概念

数据流是一种用于管理时间序列数据的结构,它通过一个或多个后端索引来存储数据。数据流的主要优势包括:

• 自动生命周期管理:通过索引生命周期管理(ILM)策略,自动处理索引的滚动、压缩和删除。

• 简化索引管理:自动管理索引的版本,无需手动创建或管理索引。

• 无缝集成:与 Elasticsearch 的数据层(如热、温、冷、冻结层)无缝集成。


2.设置数据流的步骤

步骤 1:创建索引生命周期策略(ILM Policy)

索引生命周期策略用于定义索引在不同阶段的行为,例如滚动(rollover)、压缩(shrink)、合并(forcemerge)和删除(delete)。生命周期策略是可选的,但强烈推荐使用,因为它可以自动化管理数据流的后端索引。

生命周期策略通常包含以下阶段:

• Hot(热)阶段:存储最新数据,支持快速写入和查询。

• Warm(温)阶段:数据不再频繁更新,但仍然需要查询。

• Cold(冷)阶段:数据很少被查询,但需要保留。

• Frozen(冻结)阶段:数据被冻结,仅支持搜索。

• Delete(删除)阶段:数据被永久删除。

示例生命周期策略:

```json

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": {}

}

}

}

}

}

```


步骤 2:创建组件模板(Component Templates)

组件模板是用于定义索引模板的构建块,通常包含映射(mappings)和索引设置(settings)。组件模板可以被多个索引模板复用,提高配置的灵活性。

• 映射组件模板:定义字段的映射,例如`@timestamp`和`message`。

• 设置组件模板:定义索引的生命周期策略和其他设置。

示例组件模板:

```json

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"

}

}

PUT _component_template/my-settings

{

"template": {

"settings": {

"index.lifecycle.name": "my-lifecycle-policy"

}

},

"_meta": {

"description": "Settings for ILM"

}

}

```


步骤 3:创建索引模板(Index Template)

索引模板用于定义数据流的结构,包括索引模式、组件模板和数据流配置。索引模板必须启用数据流,并指定与数据流名称匹配的索引模式。

示例索引模板:

```json

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"

}

}

```


步骤 4:创建数据流

数据流可以通过以下两种方式创建:

  1. 自动创建:通过向数据流名称发送索引请求来自动创建数据流。

  2. 手动创建:使用`PUT _data_stream/<name>`API 显式创建数据流。

示例:

```json

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" }

```


步骤 5:保护数据流

使用索引权限控制对数据流的访问。授予对数据流的权限等同于授予对其后端索引的相同权限。


步骤 6:管理数据流

• 获取数据流信息:使用`GET _data_stream/<name>`API 获取数据流的详细信息。

• 删除数据流:使用`DELETE _data_stream/<name>`API 删除数据流及其后端索引。


3.数据流的优势

• 自动化管理:通过 ILM 策略自动处理索引的生命周期。

• 灵活的查询:支持对所有后端索引的统一查询。

• 高效存储:通过压缩和快照功能优化存储成本。

• 无缝集成:与 Elastic Stack 的其他组件(如 Kibana、Logstash)无缝集成。


4.注意事项

• 数据流的名称必须与索引模板中的索引模式匹配。

• 数据流的生命周期策略必须在索引模板中指定。

• 数据流的后端索引是隐藏的,用户不能直接对其进行操作。


通过以上步骤,您可以高效地设置和管理 Elasticsearch 中的数据流,从而更好地处理大规模时间序列数据。

在 Elasticsearch 中,数据流(Data Stream)的访问控制是通过索引权限(Index Privileges)实现的。这种机制确保了对数据流的访问权限管理既灵活又安全。以下是关于如何使用索引权限控制对数据流的访问,以及授予数据流权限与授予其后端索引权限之间的关系的详细说明:


1.数据流与后端索引的关系

数据流是一个逻辑结构,用于管理时间序列数据。它通过一个或多个后端索引来存储数据。这些后端索引是隐藏的,用户通常不会直接与它们交互。相反,所有对数据流的操作(如写入、查询)都会自动映射到相应的后端索引。

由于数据流的后端索引是隐藏的,直接管理这些索引的权限是不现实的。因此,Elasticsearch 提供了一种机制,允许通过管理数据流的权限来间接控制对后端索引的访问。


2.索引权限的作用

Elasticsearch 提供了多种索引权限,用于控制用户对索引的操作。这些权限包括:

• `read`:允许用户读取索引中的数据。

• `write`:允许用户向索引中写入数据。

• `delete`:允许用户删除索引中的文档。

• `create_index`:允许用户创建新的索引。

• `delete_index`:允许用户删除索引。

• `manage`:允许用户管理索引的设置(如生命周期策略)。

对于数据流,这些权限同样适用。当您授予用户对数据流的某种权限时,Elasticsearch 会自动将这些权限映射到数据流的后端索引。


3.授予数据流权限

要授予用户对数据流的权限,可以通过角色(Role)和角色映射(Role Mapping)来实现。角色定义了用户可以执行的操作,而角色映射将角色分配给用户或用户组。

示例:授予对数据流的读写权限

假设您有一个数据流`my-data-stream`,并希望授予用户`john_doe`对该数据流的读写权限。以下是具体步骤:

  1. 创建角色:定义角色的权限。

```json

PUT /_security/role/my_data_stream_role

{

"indices": [

{

"names": ["my-data-stream"],

"privileges": ["read", "write"]

}

]

}

```

  1. 映射角色到用户:将角色分配给用户。

```json

PUT /_security/user/john_doe

{

"roles": ["my_data_stream_role"]

}

```

权限的传递

当用户`john_doe`被授予对`my-data-stream`的读写权限时,Elasticsearch 会自动将这些权限映射到数据流的后端索引。这意味着:

• 用户可以读取和写入数据流中的数据。

• 用户可以读取和写入数据流的后端索引中的数据。


4.权限的等价性

授予用户对数据流的权限等同于授予其后端索引的相同权限。这种等价性体现在以下几个方面:

• 读取权限:用户可以查询数据流中的数据,这等同于查询后端索引中的数据。

• 写入权限:用户可以向数据流中写入数据,这等同于向后端索引写入数据。

• 删除权限:用户可以删除数据流中的文档,这等同于删除后端索引中的文档。

• 管理权限:用户可以管理数据流的设置(如生命周期策略),这等同于管理后端索引的设置。

这种设计使得用户无需直接与后端索引交互,同时确保了权限管理的一致性和安全性。


5.注意事项

• 数据流的隐藏性:后端索引是隐藏的,用户无法直接访问或管理它们。所有操作都通过数据流的 API 进行。

• 权限的粒度:虽然数据流的权限会映射到后端索引,但您仍然可以通过更细粒度的权限控制(如字段级权限)来进一步限制用户对数据的访问。

• 角色管理:建议通过角色管理权限,而不是直接为用户分配权限。这样可以更灵活地管理权限,并减少管理成本。


总结

在 Elasticsearch 中,通过索引权限控制对数据流的访问是一种高效且安全的方法。授予用户对数据流的权限等同于授予其后端索引的相同权限。这种机制不仅简化了权限管理,还确保了数据流和后端索引的一致性。通过合理配置角色和权限,您可以灵活地控制用户对数据流的访问,同时保护数据的安全性。

相关推荐
m0_748256141 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
risc1234562 小时前
【Elasticsearch】使用ILM自动化滚动操作
elasticsearch
risc1234563 小时前
【Elasticsearch】索引生命周期管理操作之Allocate(分配)
elasticsearch
ADFVBM3 小时前
重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客4 小时前
使用 Elasticsearch 进行集成测试初始化数据时的注意事项
大数据·数据库·elasticsearch·搜索引擎·集成测试·可用性测试
risc1234564 小时前
【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。
elasticsearch
道法自然,人法天4 小时前
探索Elasticsearch:文档的CRUD
大数据·elasticsearch·搜索引擎
木木与代码(接项目)4 小时前
Git常用命令
chrome·git·elasticsearch
一直在路上的码农4 小时前
ES时序数据库的性能优化
运维·elasticsearch·性能优化·时序数据库