ES5.x 的新特征——rollover

本贴最后更新于 2447 天前,其中的信息可能已经时移世改

背景

使用 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 还支持其它特征如下,详细内容请点击官方文档

  1. 通过 date math 来指令归档的名称为日期相关内容
  2. 定义新索引的 settings
  3. 在真实跑之前,先 Dry run 一下
  4. 创建新索引后,是不是要 wait_for_active_shards
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 269 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...