ELK增量同步数据【MySql->ES】

news/2025/1/15 15:11:39/

一、前置条件

        1.  linux,已经搭建好的logstash+es+kibana【系列版本7.0X】,es 的plugs中安装ik分词器

ES版本:

 Logstash版本:

 (以上部署,都是运维同事搞的,我不会部署,同事给力)

二、编写Logstash.sh 执行文件

1、在Logstash安装目录下【/usr/share/logstash】,新建XX.sh,内容如下:

/usr/share/logstash/bin/logstash --path.data /usr/share/logstash/case-conf -e 'input {jdbc {jdbc_driver_library => "/var/local/logstash/etc/lib/mysql-connector-java-8.0.15.jar"jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_connection_string => "jdbc:mysql://IP:端口号/数据库?serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&characterEncoding=utf8&useSSL=false&tinyInt1isBit=false"jdbc_user => "用户名"jdbc_password => "密码"schedule => "* * * * *"use_column_value => truetracking_column => "update_at"tracking_column_type => "numeric"last_run_metadata_path => "/usr/share/logstash/case-last"
statement_filepath => "/usr/share/logstash/case_.sql"}
}output {elasticsearch {hosts => ["es1:9206","es2:9207","es3:9208"]action=>"index"index => "case"document_id => "%{case_id}"template => "/usr/share/logstash/template-case.json"template_name=>"template-case.json"template_overwrite=>true}
}'

2. 在Logstash安装目录下【/usr/share/logstash】,新建case.sql文件:查询字段,根据业务要求书写,不需要全字段查询

SELECT * FROM 表名称 where update_at > :sql_last_value

where条件中的,update_at 是表更新时间,与case.sh 中的 tracking_column 强关联;默认logstash 每分钟执行一次case.sql ,执行后会生成一个case-last文件,里面记录最后一次执行时间;

3.  关于output,配置项,使用了自定义创建索引的模板方式,在表中有数据为前提,执行case.sh 会用到模板创建索引;如果不配置,es会默认给创建mapping,默认的话,分词都是英文分词器; 执行效果如下:sh  case.sh后:

 注意细节: 

output {
  elasticsearch {
    hosts => []
    action=>"index"
    index => "case"   //索引名称
    document_id => "%{case_id}"  //动态数据,数据ID
    template => "/usr/share/logstash/template-case.json"   //模板文件路径
    template_name=>"template-case.json"            //模板名称
    template_overwrite=>true                                 
    }
}

4. 在Logstash安装目录下【/usr/share/logstash】,新建template-case.json,内容如下:

{"template" : "case*","settings" : {"index.refresh_interval" : "5s","number_of_replicas":"1","number_of_shards":"1"},"mappings": {"date_detection": false,"numeric_detection": false,"dynamic_templates": [{"integers": {"match_mapping_type": "long","mapping": {"type": "integer"}}},{"strings": {"match_mapping_type": "string","unmatch": "*_en","mapping": {"type": "text","analyzer":"ik_max_word","search_analyzer": "ik_smart","fields": {"raw": {"type":  "keyword","ignore_above": 100}}}}}]}
}

注意:

1、模板名称和case.sh 中的index 匹配;模板中的名称后必须带个*:  "template" : "case*",

2、模板比较简单,关闭了日期动态检测和数字格式动态检测;不然创建索引的时候格式会乱;尤其是日期;比如数据库中字段是varchar,但是存的是yyyy-MM-dd hh:mm:ss 日期格式的话,es创建索引是date格式的;

    "date_detection": false,
    "numeric_detection": false,

3、string格式的字段,默认给转出text, 并且使用ik分词器;排除了_en结尾的字段,存英文的字段建表的时候注意下,使用默认分词就好;

   "unmatch": "*_en"

三、Kibana验证

1、GET case_/_mapping:

{"case" : {"mappings" : {"dynamic_templates" : [{"integers" : {"match_mapping_type" : "long","mapping" : {"type" : "integer"}}},{"strings" : {"unmatch" : "*_en","match_mapping_type" : "string","mapping" : {"analyzer" : "ik_max_word","fields" : {"raw" : {"ignore_above" : 100,"type" : "keyword"}},"search_analyzer" : "ik_smart","type" : "text"}}}],"date_detection" : false,"numeric_detection" : false,"properties" : {"@timestamp" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"@version" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"apply_education" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},  "apply_major_en" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"apply_school_name" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"apply_school_name_en" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"begin_learn_time_at" : {"type" : "integer"},"case_id" : {"type" : "integer"},     "case_result_time_at" : {"type" : "integer"},"country_name" : {"type" : "text","fields" : {"raw" : {"type" : "keyword","ignore_above" : 100}},"analyzer" : "ik_max_word","search_analyzer" : "ik_smart"},"school_id" : {"type" : "integer"},"update_at" : {"type" : "integer"}}}}
}

查看,映射字段是否满足要求;

2.  验证分词结果:

GET lcase/_analyze
{
  "field": "apply_education",
  "text": "马斯特里赫特大学" 
}

分词结果:

{"tokens" : [{"token" : "马斯特里赫特","start_offset" : 0,"end_offset" : 6,"type" : "CN_WORD","position" : 0},{"token" : "马斯","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 1},{"token" : "特里","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 2},{"token" : "赫","start_offset" : 4,"end_offset" : 5,"type" : "CN_CHAR","position" : 3},{"token" : "特大","start_offset" : 5,"end_offset" : 7,"type" : "CN_WORD","position" : 4},{"token" : "大学","start_offset" : 6,"end_offset" : 8,"type" : "CN_WORD","position" : 5}]
}

验证完成;

四、相关资料

1. Elastic:开发者上手指南_elastic.show_Elastic 中国社区官方博客的博客-CSDN博客

2. Mutate filter plugin | Logstash Reference [8.8] | Elastic


http://www.ppmy.cn/news/660400.html

相关文章

如何选择一个合适的网格来进行网格收敛研究

一、几何单元的类型 目前有四种不同的三维单元类型:四面体、六面体、棱柱,以及金字塔形:可以任意组合这四种单元来对任何三维模型进行网格剖分。 二、不同几何单元适用范围 1、四面体单元 四面体单元是 COMSOL 中大部分物理场的缺省单元类型…

使用kubeadm创建集群

server2 kubeadm config print init-defaults #查看默认配置信息默认从k8s.gci.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库: kubeadm config images list --image-repository registry.aliyuncs.com/google_containers #列出所需…

Python CGI编程详细步骤,和说说我踩的坑!!

最近在学python,刚接触python高级编程-gci编程,照着网上的资料去配置文件 ,但是其中遇到了很多问题,可以说一天都呆坑里,特记录下这些,总结下,也以便帮小伙伴们解决问题。 我参考的是这篇文章:…

走进GBase 8s之接口管理工具(一)开发接口(2)

ADO.NET GBase 8s ADO.NET 是一个提供.NET应用程序与GBase数据库之间方便、高效、安全交互的接口程序,使用100%纯C#编写,并继承了Microsoft ADO.NET类。开发人员可以使用任何一种.NET开发语言(C#、VB.NET、F#)通过GBase ADO.NET操…

Powershell入门语法

Powershell简介 由于cmd功能比较小,所以windows上诞生了新的shell类型。powershell有很多版本。不同版本的操作系统内置的powershell版本也不一样。可以升级。 $PSVersionTable:查看powershell版本。 PS C:\Users\JYT> $PSVersionTableName …

androi的AT指令

一、大概的一些AT指令 网络收集的AT指令 1、ATCGMI: 请求得到移动设备生产厂商的标识。2、ATCGMM: 请求得到移动设备模块的标识。3、ATCGMR: 请求得到改订的系统版本,修改级别和日期,以及其他相关内容。4、ATCGSN&…

美国GCI布线产品介绍(下)

室内大对数铜缆&#xff1a; <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /> <?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /> l 24AWG 线规大对数铜缆&#xff0c; 适用于语音主干应用…

如约停车(GCI)项目总结

今天开始第二版开发&#xff0c;先总结如下&#xff1a; 一、明确需求&#xff0c;这其实也就是常说的解决问题的思路之一。 Android开发人员通常都是根据由设计师设计好原型图和效果图进行开发&#xff0c;所以在开发时候我们要仔细琢磨每个界面的作用和意义&#xff0c;千万…