背景
基于ELK搭建的日志平台,前期匆忙建设过程中一些参数和设计未做过多的考虑,上线后就需要不断根据实际情况做调整,而一些调整限于ELK的一些特性,一旦操作不当就会出现丢数据、数据写入异常、数据查不到等情况。
因此如何在这种背景下,做到对使用方无感知的动态调整是我们所要实现的目标。本文更加注重实践而非深层次的理论讲解,有兴趣深入了解的可以自行研习。
总体架构
CASES
CASE1:按日/月生成索引
创建的nginx access_log索引,开始采集2周后,数据达到25G+(number_of_replicas=1,因此总体数据超过50G),如果不进行索引拆分,该索引将越来越大,最终会严重影响查询效率,并且一旦出现索引损坏造成的风险也更大。
通过配置logstash ouput 插件实现按照日期生成新索引:
output { elasticsearch { hosts => ["192.168.0.1:9200"] index => "php-nginx-log-%{+YYYY.MM.DD}" #按照天生成索引 }}
通过我们的配置,目前会存在2个index,分别为历史的php-nginx-log索引和以php-nginx-log.2019-01-15索引。
CASE2:Kibana查询所有数据
由于目前我们的索引不再是指定的具体索引,还是一类按照事先约定的命名格式索引集合,这时我们想要能够在Kibana查询数据时不受影响,能够正常查询到数据,此时主要有两种解决方式:
1、更改Kibana的Create index pattern,使用通配符关联出所有index
2、使用index aliases,详情:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/indices-templates.html
Elasticsearch的别名,就类似数据库的视图,别名不仅仅可以关联一个索引,它能聚合多个索引,下文还会提到别名的更重要的特性。
通过别名的方式是更加建议的方式。
POST /_aliases{ "actions" : [ { "add" : { "index" : "new_index1