前篇文件elk部署粗略的完成了部署,但是真正是批量使用的时候发现还是有很多不足,优化的点还是非常的多。
使用ElasticSearch时一般需要自己创建ElasticSearch的索引的Mapping,当索引非常多的时候,可能需要配置一个索引模板Template来对类似的索引做统一配置,让索引模板Template中配置匹配索引的规则,来确定该Template会被应用到哪些索引上。
Template配置方式
Logstash在整合ElasticSearch的时候,有三种方式可以来进行Template的配置。
使用ElasticSearch默认自带的索引模板
ElasticSearch默认自带了一个名字为”logstash”的模板,默认应用于Logstash写入数据到ElasticSearch使用,我们可以在通过es的api接口、或者在kibana dev tools窗口通过GET /_template/来进行查看
api 查看
1
2
3$ curl -XGET http://127.0.0.1:9200/_template -s | python -m json.tool
$ curl -XGET http://127.0.0.1:9200/_template?prettykibana 查看
优点: 最简单,无须任何配置
缺点: 无法自定义一些配置,例如:分词方式
在Logstash Indexer端自定义配置索引模板
Logstash的output插件中使用template指定本机器上的一个模板json文件路径,可以在json文件中设置对应的Template模板信息。前面的章节就使用的这种方式。
- 优点:配置简单
- 缺点:因为分散在Logstash Indexer机器上,维护起来比较麻烦
在ElasticSearch服务端自定义配置索引模板
由ElasticSearch负责加载模板。这种方式需要在ElasticSearch的集群中的config/templates路径下配置模板json。而且ElasticSearch提供了Restful API接口维护索引模板信息。
- 优点:维护比较容易,可动态更改,全局生效。
- 缺点:需要注意模板的命名规则,比较容易通过看Template名字就能够确定模板应用到哪些索引
三种索引方式都有优缺点;但是使用第三种方式是最好的,就像之前elk部署就使用的是第二种方式,然后是在用的时候发现,logstash是多台服务器,维护起来非常非常的麻烦。如果logstash 和ElasticSearch只有一台服务器,可以使用第二种方式,在Logstash Indexer端维护Template文件即可。
模版类型
ElasticSearch的模板类型主要由两种:静态模板和动态模板
静态模板
适合索引字段数据固定的场景,一旦配置完成,不能向里面加入多余的字段,否则会报错
- 优点:scheam已知,业务场景明确,不容易出现因字段随便映射从而造成元数据撑爆es内存,从而导致es集群全部宕机
- 缺点:字段数多的情况下配置稍繁琐,针对于每个索引可能需要的模板都不同,很有可能需要配置很多个模板
动态模板
适合字段数不明确,大量字段的配置类型相同的场景,可以按照类型规则动态添加新字段,新加字段不会报错。主要需要配置 dynamic_templates
。
- 优点:可动态添加任意字段,无须改动schema
- 缺点:无标准schema导致数据不规则,如果添加的字段非常多,有可能造成ES集群宕机
注: 模板在设置生效后,仅对ES集群中新建立的索引生效,而对已存在的索引及时索引名满足模板的匹配规则,也不会生效,因此如果需要改变现有索引的Mapping信息,仍需要在正确的Mapping基础上建立新的索引,并将数据从原索引拷贝至新索引,变更新索引别名为原索引这种方式来实现。
模板结构
模版的结构如elk部署里面所提到的。分四部分
- 通用设置: 主要是模板匹配索引的过滤规则,影响该模板对哪些索引生效;
- settings: 配置索引的公共参数,比如索引的replicas,以及分片数shards等参数;
- mappings: 最重要的一部分,在这部分中配置每个type下的每个field的相关属性,比如field类型(string,long,date等等),是否分词,是否在内存中缓存等等属性都在这部分配置;
- aliases: 索引别名,索引别名可用在索引数据迁移等用途上。
当我们在定制索引模版的时候,这时候我们需要参考研发给的日志标准和需要的日志标准格式,以及日志样本等,给出一些运维的见解。否则做出来的东西不一定满足需求,又要重新来做。着重参考如下:
- 是否存储
- 是否分词
- 以什么来建立索引
- 字段类型是什么
- 如何排序
- 字段数是否固定
结合这些,我们还可以参考词库的维护,ElasticSearch后期结构的变化调整,如果这些不考虑,在后期量起来以后,改动任何一项都需要去重新建立索引。是非常蛋疼的。
创建模版
这里采用第三种三种方式建立模版,登录kibana,在dev tools栏下面,删除默认的logstash-模版,然后创建一个logstash-的模版,这样当新的索引来了以后,就会加载这个模版。