上篇blog说到采用logstash-input-jdbc将mysql数据同步到ES(http://www.cnblogs.com/jstarseven/p/7704893.html),但是这里有一个问题,即假如我不需要logstash自动对mysql数据提供的mapping模板怎么办,毕竟我的数据需要ik分词,同义词解析等。。。

这时候就需要用到logstash的template功能了 ,如果现在还不到logstash和logstash-input-jdbc的安装使用方式的建议先看上一篇文章。--------jstarseven

转载请注明原文出处:http://www.cnblogs.com/jstarseven/p/7707499.html

好的,首先看一下之前简单使用logstash-input-jdbc导入es的配置文件mysql.conf(一会配置template时候需要修改):

input {
stdin {
}
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test"
# 用户名密码
jdbc_user => "root"
jdbc_password => "123456"
# jar包的位置
jdbc_driver_library => "/usr/local/logstash-5.5.2/bin/config-mysql/mysql-connector-java-5.1.31.jar"
# mysql的Driver
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#statement_filepath => "config-mysql/test02.sql"
statement => "select * from my_into_es "
schedule => "* * * * *"
#索引的类型
type => "my_into_es_type"
}
} filter {
json {
source => "message"
remove_field => ["message"]
}
} output {
elasticsearch {
hosts => "127.0.0.1:9200"
# index名
index => "my_into_es_index"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}

  现在,我们来看template模板怎么用:

第一种采用我个人将它称为动态模板:dynamic_templates 可以做到对某种类型字段进行匹配mapping

1. 切换路径  cd  /usr/local/logstash-5.5.2 目录下

2. 新建template目录 mkdir template

3. cd template

4. 新建文件 logstash-ik.json

5. 编辑文件内容:

{
"template": "*",
"version": 50001,
"settings": {
"index.refresh_interval": "5s"
},
"mappings": {
"_default_": {
"_all": {
"enabled": true,
"norms": false
},
"dynamic_templates": [
{
"message_field": {
"path_match": "message",
"match_mapping_type": "string",
"mapping": {
"type": "text",
"norms": false
}
}
},
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "text",
"norms": false,
"analyzer": "ik_max_word",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
],
"properties": {
"@timestamp": {
"type": "date",
"include_in_all": false
},
"@version": {
"type": "keyword",
"include_in_all": false
}
}
}
}
}
~

6. cd /usr/local/logstash-5.5.2/bin/config-mysql

7.新建文件 mkdir mysql-ik-define.conf

文件内容:

input {
stdin {
}
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test"
# 用户名密码
jdbc_user => "root"
jdbc_password => "123456"
# jar包的位置
jdbc_driver_library => "/usr/local/logstash-5.5.2/bin/config-mysql/mysql-connector-java-5.1.31.jar"
# mysql的Driver
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#statement_filepath => "config-mysql/test02.sql"
statement => "select * from my_into_es_define"
schedule => "* * * * *"
#索引的类型
type => "into_es_type_define_ik"
}
} filter {
json {
source => "message"
remove_field => ["message"]
}
} output {
elasticsearch {
hosts => "127.0.0.1:9200"
# index名
index => "into_es_index_define_ik"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
template_overwrite => true
template => "/usr/local/logstash-5.5.2/template/logstash-ik.json"
}
stdout {
codec => json_lines
}
}

注释:上面标颜色的就是template的配置,其他基本不变

8. cd /usr/local/logstash-5.5.2/bin

9. 执行命令:./logstash -f config-mysql/mysql-ik-define.conf

观察日志:

10.我们拿ElasticSearch-head插件看一下新建好的mapping:

和我们预料的一样没有问题,数据也成功导入:

总结:这种配置方式个人觉得比较灵活可以对字段按类区分做mapping

第二种采用我个人将它称为静态模板(其实和上面的基本一致),就是template文件不一样,mapping针对每个字段写死就好:

1.在之前的template目录下新建logstash-ik-define.json文件:

{
"template": "*",
"version": 50001,
"settings": {
"index.refresh_interval": "5s"
},
"mappings": {
"into_es_type_define" :{
"properties": {
"ct": {
"type": "date"
},
"@timestamp": {
"include_in_all": false,
"type": "date"
},
"@version": {
"include_in_all": false,
"type": "keyword"
},
"name": {
"norms": false,
"analyzer": "ik_max_word",
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"id": {
"type": "long"
},
"type": {
"norms": false,
"analyzer": "ik_max_word",
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"age": {
"type": "long"
},
"desc": {
"norms": false,
"analyzer": "ik_max_word",
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"ut": {
"type": "date"
}
}
}
}
}

2.修改上述 mysql-ik-define.conf文件里面的index,type,和template部分应用模板文件即可

3.执行命令:./logstash -f config-mysql/mysql-ik-define.conf

4.查看head里面的mapping新建情况和template文件中mapping保持一致:

5.数据也成功同步:

总结:template模板使用

1.静态模板 :
                     适合索引字段数据固定的场景,一旦配置完成,不能向里面加入多余的字段,否则会报错
                     优点:scheam已知,业务场景明确,不容易出现因字段随便映射从而造成元数据撑爆es内存,从而导致es集群全部宕机
                     缺点:字段数多的情况下配置稍繁琐

1.动态模板 :
      适合字段数不明确,大量字段的配置类型相同的场景,多加字段不会报错
                     优点:可动态添加任意字段,无须改动scheaml,
                     缺点:如果添加的字段非常多,有可能造成es集群宕机

定制索引模板,是搜索业务中一项比较重要的步骤,需要注意的地方有很多,比如:
       (1)字段数固定吗
       (2)字段类型是什么
       (3)分不分词
       (4)索引不索引
       (5)存储不存储
       (6)排不排序
       (7)是否加权
除了这些还有其他的一些因素,比如,词库的维护改动,搜索架构的变化等等。
如果前提没有充分的规划好,后期改变的话,改动其中任何一项,都需要重建索引,这个代价是非常大和耗时的,尤其是在一些数据量大的场景中


-END-

logstash使用template提前设置好maping同步mysql数据到Elasticsearch5.5.2的更多相关文章

  1. 使用Logstash来实时同步MySQL数据到ES

    上篇讲到了ES和Head插件的环境搭建和配置,也简单模拟了数据作测试 本篇我们来实战从MYSQL里直接同步数据 一.首先下载和你的ES对应的logstash版本,本篇我们使用的都是6.1.1 下载后使 ...

  2. centos7配置Logstash同步Mysql数据到Elasticsearch

    Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中.个人认为这款插件是比较稳定,容易配置的使用Logstash之前,我们得明确 ...

  3. 使用logstash同步MySQL数据到ES

    使用logstash同步MySQL数据到ES 版权声明:[分享也是一种提高]个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的. https:// ...

  4. Logstash使用jdbc_input同步Mysql数据时遇到的空时间SQLException问题

    今天在使用Logstash的jdbc_input插件同步Mysql数据时,本来应该能搜索出10条数据,结果在Elasticsearch中只看到了4条,终端中只给出了如下信息 [2017-08-25T1 ...

  5. 推荐一个同步Mysql数据到Elasticsearch的工具

    把Mysql的数据同步到Elasticsearch是个很常见的需求,但在Github里找到的同步工具用起来或多或少都有些别扭. 例如:某记录内容为"aaa|bbb|ccc",将其按 ...

  6. Centos8 部署 ElasticSearch 集群并搭建 ELK,基于Logstash同步MySQL数据到ElasticSearch

    Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podm ...

  7. logstash同步mysql数据失败

      问题描述 前提: 项目采用Elasticsearch提供搜索服务,Mysql提供存储服务,通过Logstash将Mysql中数据同步到Elasticsearch. 问题: 使用logstash-j ...

  8. 实战ELK(6)使用logstash同步mysql数据到ElasticSearch

    一.准备 1.mysql 我这里准备了个数据库mysqlEs,表User 结构如下 添加几条记录 2.创建elasticsearch索引 curl -XPUT 'localhost:9200/user ...

  9. 【记录】ELK之logstash同步mysql数据到Elasticsearch ,配置文件详解

    本文出处:https://my.oschina.net/xiaowangqiongyou/blog/1812708#comments 截取部分内容以便学习 input { jdbc { # mysql ...

随机推荐

  1. asp.net文件上传下载

    泽优大文件上传产品测试 泽优大文件上传控件up6,基于php开发环境测试. 开发环境:HBuilder 服务器:wamp64 数据库:mysql 可视化数据库编辑工具:Navicat Premium ...

  2. (转)什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?

    转自:http://www.cnblogs.com/haofaner/articles/2288968.html 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服务 ...

  3. (转)私有代码存放仓库 BitBucket介绍及入门操作

    转自:http://blog.csdn.net/lhb_0531/article/details/8602139 私有代码存放仓库 BitBucket介绍及入门操作 分类: 研发管理2013-02-2 ...

  4. Eclipse添加servlet-api.jar库的引用

    右键Application-->Properties-->Java Build Path-->Libraries-->Add External JARs-->servle ...

  5. springboot工程读取配置文件application.yml的写法18045

    现在流行springboot框架的项目,里面的默认配置文件为application.yml,我们怎样读取这个配置文件呢? 先贴上我得配置文件吧 目录结构 里面内容 1 写读取配置文件的工具类 @Con ...

  6. bzoj2879(动态加边费用流)

    参考题解:http://blog.csdn.net/yxuanwkeith/article/details/52254602 //开始跑费用流用的dijkstra,一直错,后来发现动态加边后我不会处理 ...

  7. centos修改主机名命令

    centos修改主机名命令   需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常.首先切换到root用户.    vi / ...

  8. Eclipse怎么全局搜索和替换(整个项目)

    我们用Eclipse编程,有时候需要将整个项目的某个字符串替换成其他的.那么我们该怎么操作呢?请接着往下看! 一,我们首先打开Eclipse,单击要替换字符串的项目 二,按下组合键:ctrl + H, ...

  9. 《mysql必知必会》学习_第11章_20180801_欢

    第11章:使用数据处理函数. P69 文本处理函数,upper()函数把文本变成大写字体. select vend_name,upper(vend_name) as vend_name_upcase ...

  10. 集成算法(chapter 7 - Hands on machine learning with scikit learn and tensorflow)

    Voting classifier 多种分类器分别训练,然后分别对输入(新数据)预测/分类,各个分类器的结果视为投票,投出最终结果: 训练: 投票: 为什么三个臭皮匠顶一个诸葛亮.通过大数定律直观地解 ...