背景
使用 ES 来存储日志型的数据时,需要定期归档日志,否则索引会过大导致无法接受新日志和查询速度过慢。
在 5.x 中,提供了一个 rollover 的 API,可以按照时间和日志量来归档日志。
入门示例
建立新索引
curl -H 'Content-Type: application/json' -XPUT "localhost:9200/logs-000001?pretty" -d ' { "aliases": { "logs_write": {} } } '
插入 1500 条数据
for (( i=1; i<=1500; i++ )) do echo $i curl -H 'Content-Type: application/json' -XPOST "localhost:9200/logs_write/tweet?pretty" -d ' { "user" : "abeffect-'${i}'", "post_date" : "2017-08-13T23:27:25", "message" : "from abeffect by flowaters" } ' done
插入的途中,执行归档指令 (下面中 logs 和 write 中有下划线,同时 rollover 前也有个下划线,Markdown 的排版比较难)
curl -H 'Content-Type: application/json' -XPOST "localhost:9200/logs_write/_rollover?pretty" -d ' { "conditions": { "max_age": "7d", "max_docs": 1000 } } '
查看索引
curl -s "localhost:9200/_cat/indices" | grep logs green open logs-000002 sa2QImSERD2DHC-zQLLaeA 5 1 199 0 261.5kb 168.1kb green open logs-000001 zFYr8Wf8SeexqxAphgzDAw 5 1 1301 0 541.7kb 260.1kb
可以看到索引自动切分成了两个索引
如上面示例,ES 可以自动识别*-加六个数字结尾*的索引,如 logs-000001
结尾的。
如果索引名称不符合以规则,又想用此功能。那么接着看。
自定义索引名称
在执行归纳指令的途中,通过参数来指定新索引的名称,如
curl -H 'Content-Type: application/json' -XPOST "localhost:9200/logs_write/_rollover/logs_20170813?pretty" -d' { "conditions": { "max_age": "7d", "max_docs": 300 } } '
其它特征
ES 的 rollover 还支持其它特征如下,详细内容请点击官方文档:
- 通过 date math 来指令归档的名称为日期相关内容
- 定义新索引的 settings
- 在真实跑之前,先 Dry run 一下
- 创建新索引后,是不是要 wait_for_active_shards
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于