Elasticsearch中经常会遇到有些日志增量非常快,几天就几百G,虽然ES查个10亿级别的数据也能秒出,但是“柴多米多架不住日子多”啊,时间一长,这种有大量日志的索引查询会变得很慢,实际上这种索引的查询热点分布也是满足二八定律,也就是80%查询是对近期日志的查询,20%的是查询很久之前的历史,因此为了优化对近期日志查询的速度,可以利用Elasticsearch中的rollover接口功能来滚动存储日志,从而达到优化日志查询效率的目的,也方便了对老旧日志数据的管理。rollover功能是先创建一个带别名的索引,然后设定一定的规则,当满足该设定规则(比如间隔了一段时间或者日志大小超过一定阈值后)的时候,Elasticsearch会自动建立新的索引,别名也会自动切换指向新的索引,这样相当于在物理层面自动建立了索引的分区功能,当查询数据落在一段时间内时,会到一个相对小的索引中查询,相对所有日志都在一个大索引里的情况,显然也就加快了查询的效率,下面我们来看看rollover怎么建立。
一、建立索引模板
rollover会滚动建立索引,新建立的索引默认会是indexname-000001......这样的模式,因此,要想新建立的索引具有相同的mapping,那就需要先建立索引模板,建立模板最好使用cerebro插件进行(当然如果DSL熟悉的话,用DSL也是可以的),如下图:
这里我们创建了一个以kfjk-*为匹配模式的索引模板,并在模板中建立好对应的mapping,别名如下:
二