data stream 允许跨多个仅追加的时间序列索引,同时为请求提供单个命名资源。数据流非常适合日志、事件、指标和其他持续生成的数据。
为什么需要 data stream?
单纯 ILM 方案管理时间序列索引较繁琐,需要使用别名,多次操作。使用 data stream 可以简化操作
适合场景
数据流非常适合日志、事件、指标和其他持续生成的数据。
符合如下特点:
优点
- 管理时序数据更方便
- 不需要使用别名,避免 rollover 别名滚动出错问题
- 删除 index,data stream 都不会影响 ds 设置,重新写入即可
缺点
需要@timestamp
时间字段,无法对后备索引进行 clone, close, freeze, shrink 和 split ,不适合频繁删除、更新的业务场景。
data stream 不支持单条删除或单条更新数据,只支持:update_by_query 以及 delete_by_query
索引名为固定格式:.ds-<data-stream>-<yyyy.MM.dd>-<generation>
使用
要使用 data stream 需要进行至少两步操作:
第一步:创建 ILM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| PUT _ilm/policy/my-lifecycle-policy { "policy": { "phases": { "hot": { "min_age": "0ms", "actions": { "set_priority": { "priority": 100 }, "rollover": { "max_primary_shard_size": "25gb", "max_age": "1d" } } }, "delete": { "min_age": "7d", "actions": { "delete": { "delete_searchable_snapshot": true } } } } } }
|
第二步:创建 template
可以单独使用 index template,或者使用 component templates+index template
这里 demo 仅使用 index template
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| PUT _index_template/my-index-template { "index_patterns": [ "my-data-stream*" ], "data_stream": {}, "template": { "settings": { "index": { "lifecycle": { "name": "my-lifecycle-policy" }, "routing": { "allocation": { "total_shards_per_node": "3" } }, "mapping": { "nested_fields": { "limit": "10" }, "nested_objects": { "limit": "100" }, "depth": { "limit": "5" }, "total_fields": { "limit": "100" } }, "number_of_shards": "1", "number_of_replicas": "1" } }, "mappings": { "dynamic": "true", "dynamic_templates": [ { "strings": { "match_mapping_type": "string", "mapping": { "type": "keyword" } } } ], "date_detection": false, "properties": { "@timestamp": { "type": "date" }, "flag": { "type": "boolean" }, "message": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "moreInfo": { "type": "object", "enabled": false } } } }, "priority": 500 }
|
第三步:创建 data stream(此步可以省略)
直接往 template 定义的 index patterns 中写入数据就可以完成自动创建 data stream。
或者使用创建 api
1
| PUT _data_stream/my-data-stream
|
注意:使用 bulk 写入数据的时候,不要使用index
,使用create
。例如:
1 2 3 4 5
| 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" }
|