数据流
如果用户正在将连续生成的时间序列数据(如日志、事件和指标)摄取到 UDB-SX 中,用户可能会遇到文档数量迅速增长且无需更新旧文档的场景。
管理时间序列数据的典型工作流包括多个步骤,例如创建滚动索引别名、定义写索引以及为后备索引定义通用映射和设置。
数据流简化了这一过程,并强制采用最适合时间序列数据的设置,例如主要设计用于仅追加数据,并确保每个文档都有时间戳字段。
数据流在内部由多个后备索引组成。搜索请求会路由到所有后备索引,而索引请求会路由到最新的写索引。ISM 策略允许用户自动处理索引滚动或删除。
数据流入门
步骤 1:创建索引模板
要创建数据流,首先需要创建一个索引模板,将一组索引配置为数据流。data_stream 对象表示它是数据流而不是常规索引模板。索引模式与数据流的名称匹配:
PUT _index_template/logs-template
{
"index_patterns": [
"my-data-stream",
"logs-*"
],
"data_stream": {},
"priority": 100
}
在这种情况下,每个摄取的文档都必须有一个 @timestamp 字段。
用户也有能力在 data_stream 对象中将用户自己的自定义时间戳字段定义为属性。也可以在这里添加索引映射和其他设置,就像用户对常规索引模板所做的那样。
PUT _index_template/logs-template-nginx
{
"index_patterns": "logs-nginx",
"data_stream": {
"timestamp_field": {
"name": "request_time"
}
},
"priority": 200,
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
}
}
}
在这种情况下,logs-nginx 索引同时匹配 logs-template 和 logs-template-nginx 模板。当出现平局时,UDB-SX 选择具有更高优先级值的匹配索引模板。
步骤 2:创建数据流
创建索引模板后,用户可以创建数据流。 用户可以使用数据流 API 显式创建数据流。数据流 API 初始化第一个后备索引:
PUT _data_stream/logs-redis
PUT _data_stream/logs-nginx
用户也可以直接开始摄取数据,而无需创建数据流。
因为我们有一个匹配的索引模板带有 data_stream 对象,UDB-SX 会自动创建数据流:
POST logs-staging/_doc
{
"message": "login attempt failed",
"@timestamp": "2013-03-01T00:00:00"
}
要查看特定数据流的信息:
GET _data_stream/logs-nginx
示例响应
{
"data_streams": [
{
"name": "logs-nginx",
"timestamp_field": {
"name": "request_time"
},
"indices": [
{
"index_name": ".ds-logs-nginx-000001",
"index_uuid": "LhpVRV7XRP66m2OteznaRg"
}
],
"generation": 1,
"status": "GREEN",
"template": "logs-template-nginx"
}
]
}
用户可以看到时间戳字段的名称、后备索引列表以及用于创建数据流的模板。用户还可以看到数据流的健康状况,它代表其所有后备索引的最低状态。
要查看有关数据流的更多洞察,请使用 _stats 端点:
GET _data_stream/logs-nginx/_stats
示例响应
{
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"data_stream_count": 1,
"backing_indices": 1,
"total_store_size_bytes": 208,
"data_streams": [
{
"data_stream": "logs-nginx",
"backing_indices": 1,
"store_size_bytes": 208,
"maximum_timestamp": 0
}
]
}
要查看所有数据流的信息,请使用以下请求:
GET _data_stream
步骤 3:将数据摄取到数据流
要将数据摄取到数据流,用户可以使用常规索引 API。确保用户索引的每个文档都有一个时间戳字段。如果用户尝试摄取一个没有时间戳字段的文档,用户会收到一个错误。
POST logs-redis/_doc
{
"message": "login attempt",
"@timestamp": "2013-03-01T00:00:00"
}
步骤 4:搜索数据流
用户可以像搜索常规索引或索引别名一样搜索数据流。 搜索操作适用于所有后备索引(流中存在的所有数据)。
GET logs-redis/_search
{
"query": {
"match": {
"message": "login"
}
}
}
示例响应
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": ".ds-logs-redis-000001",
"_id": "aYBUupoBk4dTBbWdR2_h",
"_score": 0.2876821,
"_source": {
"message": "login attempt",
"@timestamp": "2013-03-01T00:00:00"
}
}
]
}
}
步骤 5:滚动数据流
滚动操作创建一个新的后备索引,该索引成为数据流的新写索引。
要对数据流执行手动滚动操作:
POST logs-redis/_rollover
示例响应
{
"acknowledged": true,
"shards_acknowledged": true,
"old_index": ".ds-logs-redis-000001",
"new_index": ".ds-logs-redis-000002",
"rolled_over": true,
"dry_run": false,
"conditions": {}
}
如果用户现在对 logs-redis 数据流执行 GET 操作,用户会看到代 ID 从 1 增加到 2。
用户还可以设置 索引状态管理(ISM)策略 来自动化数据流的滚动过程。 ISM 策略在后备索引创建时应用于它们。当用户将策略与数据流关联时,它仅影响该数据流的未来后备索引。
用户也无需提供 rollover_alias 设置,因为 ISM 策略从后备索引中推断此信息。
步骤 6:在 UDB-SX 仪表板中管理数据流
要从 UDB-SX 仪表板管理数据流,请打开 UDB-SX 仪表板,选择 索引管理,选择 索引 或 策略管理索引。
用户会看到一个用于数据流的切换开关,可以用来显示或隐藏属于数据流的索引。
当用户启用此开关时,用户会看到一个数据流多选下拉菜单,可以用来过滤数据流。 用户还会看到一个数据流列,显示包含索引的数据流名称。

用户可以选择一个或多个数据流,并对它们应用 ISM 策略。用户也可以对任何单独的后备索引应用策略。
用户可以像对常规索引或索引别名一样对数据流执行可视化。
步骤 7:删除数据流
删除操作首先删除数据流的后备索引,然后删除数据流本身。
要删除数据流及其所有隐藏的后备索引:
DELETE _data_stream/<name_of_data_stream>
用户可以使用通配符删除多个数据流。
我们建议使用 ISM 策略从数据流中删除数据。