使用logstash将mysql/sql server数据自动导入elasticsearch

当一个网站的信息不断增长的情况下,各种数据直接检索从数据库遇到瓶颈时,我们常常会使用elasticsearch来做全文索引,从而提高用户的检索体验。我下面使用当下流行的docker容器来实现这一切,当然用户可以直接在服务器上安装对应的软件包,无需使用docker方式,大同小异。

 

1. 下载需要用到的镜像

$ docker pull elasticsearch

$ docker pull logstash

 

2. 准备组件与配置文件

我们将数据库的插件和配置文件挂载进去,方便配置,下面我要用到的文件列出如下:

 

Sql Server的组件,logstash使用这个插件来访问Sql server

/docker/logstash/plugin/sqljdbc42.jar

 

配置文件

/docker/logstash/conf/logstash.conf

使用logstash将mysql/sql server数据自动导入elasticsearch

3. 启动容器

$ chcon -Rt svirt_sandbox_file_t /docker/elasticsearch/data/

$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \

-v /docker/elasticsearch/data:/usr/share/elasticsearch/data -d elasticsearch

 

输入:http://192.168.236.132:9200/ 你安装机器的IP地址,这个地址是我本地地址,如果成功的话,将如下图所示

使用logstash将mysql/sql server数据自动导入elasticsearch

我们前面配置文件(logstash.conf)中指定的IP可以这样获取:

$ docker inspect --format='{{.NetworkSettings.IPAddress}}' elasticsearch

 

然后,我们再来启动我们的另外一个容器logstash,我把名字取为logstash,与镜像一直,这是可以的:

$ docker run --name logstash \

-v /docker/logstash/conf:/config-dir \

-v /docker/logstash/plugin:/plugin \

-d logstash -f /config-dir/logstash.conf

 

4. 查看数据

到第3部完成,数据就会马上启动导入,我们这时可以查看,输入:http://192.168.236.132:9200/_cat/indices?v

使用logstash将mysql/sql server数据自动导入elasticsearch

数据已经成功导入,后面发布的文章,也会被自动索引,sql_last_value会自动保存执行到的行,周期性的从Sql server对应的表取新的数据。mysql的使用方式一样,唯一不同的就是配置文件与数据库访问组件不同,我下面给出配置文件内容,mysql的数据库访问组件自己根据我下面的配置文件的名字去下载,官方网站有下载。

使用logstash将mysql/sql server数据自动导入elasticsearch

总结:我们可能还会遇到编辑的情况如何自动索引,这个可以自己做个策略,添加辅助的字段,在sql语句上做些修改可以做到,读者自己去尝试。