logstash采集规范与elasticsearch的template 、mapping 详细介绍

logstash 采集 kafka 写入es 流程规范

请尊重知识产权,博客原文地址 http://blog.csdn.net/qq1032355091/article/details/79558649

本文主要介绍es 的 template和mapping 配置,通过logstash的采集流程规范,更加容易深入理解到底什么是template和mapping配置

背景知识

什么是mapping?

mapping定义了index中的每个type的每个字段的属性,主要是字段类型(integer,long,text,keyword,date,float,ip,geo)

什么是template?

如果用户每次新建一个索引的时候都需要手动创建mapping非常麻烦,es内部维护了template,template定义好了mapping,只要index的名称被template匹配到,那么该index的mapping就按照template中定义的mapping自动创建。而且template中定义了index的shard分片数量、replica副本数量等等属性。

 

logstash写入es建立mapping的3种方式:

logstash 写入 es,在es新建index的时候,新的index的mapping建立有3种方式:

1.  logstash内部自带默认template,通过该template去创建mapping。

2. es集群内部写入templatelogstash写入的时候不需要指定templateindex根据es集群内部存在的template自动匹配创建mapping

3.  logstash写入的时候通过template 属性指定本地磁盘template文件路径,logstash读取该文件来建立index的mapping。

 

根据实际经验,采取第二种方式,最稳定且最容易维护。

 

template结构

什么是动态模板?

首先有2个问题,如果一个index下有新的type写入,之前没有定义怎么办?如果一个type下有新的字段写入,之前没有定义怎么办?

如果一个index下有新的type写入,之前没有定义,则根据_default_定义的属性来匹配生成。如果一个type下有新的字段写入,之前没有定义,则根据该type下的dynamic_templates来匹配生成。

template定义了要匹配的索引名,例如httpinfo-2017-01-01该索引名就会被匹配到。

settings定义了索引的属性,包括分片数量、副本数量、写入flush时间间隔。

mappings定义了该index下每个type的属性,如果该index的某个type没有定义,则根据_default_定义的属性来匹配。

某个type定义了各个字段的类型属性,在properties,如果有字段没有在properties中定义属性,则根据dynamic_templates中定义的动态模板指定识别新字段的属性

采集操作流程

在测试es环境中做以下操作:

1.  编写template,写入es

复制附件中的template示例,修改其中标红的部分。

进入测试环境kibana界面http://131.23.41.128/app/kibana#/dev_tools/console?_g=()

在dev tools界面下使用put _template/[template名]{……}命令写入es

 

通过命令 get_template/[template名]查看是否写入template成功。如果template编写错误重新执行put命令覆盖即可

2.  编写采集脚本,使用测试group,采集kafka数据 ,使用rubydebug output输出,在控制台检查输出数据格式是否正确

input {

    kafka{

       group_id=> "bmkp_test_logstash_httpinfo_test001"

       topics=> "httpInfo"

       bootstrap_servers=> "10.0.23.17:9092"

       key_deserializer_class=> "org.apache.kafka.common.serialization.IntegerDeserializer"

       value_deserializer_class=> "org.apache.kafka.common.serialization.StringDeserializer"

       auto_offset_reset=> "earliest"

       client_id=> "httpinfo2testes"

       type=> "httpinfo"

    }

}

fiter {……}

output {

    if[type] == "httpinfo" {

       stdout {

           codec => rubydebug

       }

    }

}

 

3.  在采集脚本中添加elasticsearch output,仍然使用测试group名,运行logstash,检查测试环境elasticsearch中的数据是否正常

注意:elasticsearch output只需要指定

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值