data stream 允许跨多个仅追加的时间序列索引,同时为请求提供单个命名资源。数据流非常适合日志、事件、指标和其他持续生成的数据。
为什么需要 data stream?
单纯 ILM 方案管理时间序列索引较繁琐,需要使用别名,多次操作。使用 data stream 可以简化操作
适合场景
数据流非常适合日志、事件、指标和其他持续生成的数据。
符合如下特点:
优点
缺点
需要@timestamp
时间字段,无法对后备索引进行 clone, close, freeze, shrink 和 split ,不适合频繁删除、更新的业务场景。
data stream 不支持单条删除或单条更新数据,只支持:update_by_query 以及 delete_by_query
索引名为固定格式:.ds-<data-stream>-<yyyy.MM.dd>-<generation>
要使用 data stream 需要进行至少两步操作:
第一步:创建 ILM
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
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
PUT _data_stream/my-data-stream
注意:使用 bulk 写入数据的时候,不要使用index
,使用create
。例如:
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" }