背景
使用 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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于