logstash详解

        前篇文件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?pretty
  • kibana 查看
    img

  • 优点: 最简单,无须任何配置

  • 缺点: 无法自定义一些配置,例如:分词方式

在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-的模版,这样当新的索引来了以后,就会加载这个模版。

坚持原创技术分享,您的支持将鼓励我继续创作!
0%