ELK生态系统——增量数据从RDBMS到ES迁移

logstash配置总结见网址:https://www.jianshu.com/p/d127c3799ad1

1、增量同步数据mysql到es思路:

首先,在mysql中创建一个前置表,此表的字段主要是列表查询展示信息字段+主键ID+时间戳(必须为timestamp类型,即包含时区的时间)。

然后,配置logstash的*.conf数据抽取到es的配置文件,主要包括:jdbc连接Mysql信息、时区编码SQL通用信息、定时增量同步数据信息、数据在es中存储index和type信息、elasticsearch输出信息。

最后,增加一个shell脚本,在shell脚本中执行logstash指定配置文件启动,并且如果检测到logstash执行过程中有异常,就会发送邮件提醒相关管理员登录服务器查看logstash运行情况和日志信息。

2、增量同步操作具体步骤:

(1)创建mysql前置表:

在mysql数据库中创建前置表,前置表中的字段尽量少,但是又不能影响所需功能。因为这个表中的所有数据都同步到es中,es的index中存储的数据越少,查询速度就越快。因此前置表强烈建议字段按照如下添加:

List分页查询展示信息字段+主键ID+时间戳(必须为timestamp类型,即含有时区的时间),这个时间戳是mysql增量同步数据到es的关键字段。

如果已经有了前置表了,并且前置表创建符合要求,那么就不需要重新创建了。

(2)创建logstash数据同步配置文件:

增量同步数据配置文件实例demo,见对应汇总文件。

A、配置jdbc连接mysql信息:

B、配置时区编码SQL常用信息:

时区配置:

在es中timestamp类型的时间字段存储的是世界标准时间(UTC),而我们当前时间为北京时间(UTC+8),为了避免timestamp类型时间字段存储在es中出现问题,在通过logstash或Java或其它方式插入含有时间字段的时候,都设置当前时区(我们就是:Asia/Shanghai,上海时区,与北京时间类似)。

编码配置:

为了防止中文出现乱码,在插入数据的时候设置编码格式。

SQL编写:

如果是数据全量同步那么sql就可以随便正常写即可。如果是增量同步数据,无论是按照数字(number)还是时间戳(timestamp)字段进行同步,在SQL最后都要添加上oder by 同步字段,因为logstash在增量同步的时候,读取最后一条记录的同步字段值,存储在指定的文件中,等下一次执行sql的时候会读取该文件的值,并替换掉sql中对应的占位符:sql_last_value。否则增量同步有时候逻辑不太合理。

C、配置定时增量同步数据信息:

配置上一次运行增量字段结果保存文件位置last_run_metadata_path参数的时候,强烈建议在该文件路径最后的文件名前添加点,这样在linux服务器中就是默认隐藏文件,不容易被删除。如果增量同步的字段值不正确,可以手动修改该文件中值,然后杀死logstash的进程,重新后台长久启动logstash配置文件服务即可在新的同步字段值之后继续定时增量同步数据。

D、配置数据在es中存储index和type信息(附加):

可以在input中定义参数,这些参数可以传递到output中,在output中可以接收和使用这些参数,尤其是在配置多个jdbc-input同步多张表数据到es时候,会用到这种传递参数的思路。

E、配置数据输出到elasticsearch的信息:

猜你喜欢

转载自blog.csdn.net/LSY_CSDN_/article/details/91396947