这几天在研究elasticsearch6.x(es6.x),已经配置了kibana,ik智能分词,以及sugget搜索智能提示,如果大家需要可以评论我改天出个教程哦,搜索基本完成后想着如果有很多数据如何通过脚本添加到es里去,本来想着自己代码将数据库的数据查出来后多线程导入数据,,后来了解到有相关插件,大部分人说elasticsearch-jdbc这个还不错,但是在github上看到其2年前停止更新,而且最高版本只支持到es2.x,与本人使用的6.x相差甚远,只能放弃使用es-jdbc.但是我看到es官方文档里有现成的插件只要配置一下就可以完成导入功能的插件logstash,附上链接大家可以去了解一下
logstash插件官网
先展示一下我实现的功能,如果需要这样类似功能的可以继续安装配置
这是我数据库的数据
这是logstash插件自动增量同步mysql的脚本执行信息
这是我的es图形工具kibana的搜索语句
这是我的es图形工具kibana的搜索结果
这就是最基本的mysql同步es6.x的结果下面我将具体介绍一下如何进行安装和配置logstash
1.安装logstash前期准备
logstash安装官网地址
①根据官网的要求,首先需要java环境–(自行下载)
②Download and install the Public Signing Key(需要下载安装注册码)
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
③You may need to install the apt-transport-https package on Debian before proceeding(需要安装协议)
sudo apt-get install apt-transport-https
④Save the repository definition to /etc/apt/sources.list.d/elastic-6.x.list:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
⑤Run sudo apt-get update and the repository is ready for use. You can install it with(需要安装更新logstash以供仓库使用)
sudo apt-get update && sudo apt-get install logstash
2. 下载logstash
logstash插件官网
选择与自己es一样的版本,本人的es为6.2.2,所以需要选择对应版本的kibana,与logstash,下载后解压到自己的本地目录下,此处我下载的logstash目录为~/soft
3. 下载logstash后查看是否安装成功
进入到logstash目录下bin目录,注意这里一定需要以root用户登录(切换用户可以输入命令 su root,输入密码可以切换用户root)
./logstash -e 'input { stdin { } } output { stdout {} }'
需要等大概10秒钟,等待直到显示Pipeline started succesfully,
你可以随意输入 hello word(任意字符串)
输出你输入的字符串,如下图
4.测试logstash-input-jdbc同步mysql数据到es
官方文档说6.x不需要安装logstash-input-jdbc,所以这里我们不需要做任何操作哦!
我们在kibana(es图形工具,这里不要纠结)里面新建index与type,下面配置文件需要用到哦
只要新建索引就ok了,下面我们配置一下mysql与es交互的配置文件了!
5. 新建mysql与es交互的配置文件
cd到logstash目录bin目录下,新建文件夹config-mysql,打开并写入mysql.conf文件内容
sudo mkdir config-mysql
cd config-mysql
vi mysql.conf
添加如下内容
注意
①jdbc_connection_string的数据库名字,
②jdbc_driver_library一定需要本地的驱动,下载地址为https://dev.mysql.com/downloads/connector/j/ 下载后解压可以得到connector的jar包
③type索引类型,index索引名与自己创建的索引类型与索引名保持一致,还有一些配置属性大家可以参考官网,这里不加赘述.
input {
stdin{
}
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://localhost:3306/houseBase"
# 用户名密码
jdbc_user => "root"
jdbc_password => "root"
# jar包的位置
jdbc_driver_library => "/home/sunny/soft/logstash-6.2.2/mysql-connector-java-5.1.45-bin.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 house_tag"
schedule => "* * * * *"
#索引的类型
type => "housetagtype"
}
}
output {
elasticsearch {
hosts => "127.0.0.1:9200"
# index名
index => "house_tag"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
6.测试同步数据
进入bin目录下,输入命令(注意这里config.mysql是目录不是文件名,如果不加–path.data=/root/会报错,多个实例时需要加上path.data才可以哦, 这里也要是root用户登录)
./logstash -f config-mysql --path.data=/root/
大概等待10秒钟后
可以看到一分钟执行一次增量同步,在自己的kibana中查询可以看到同步的数据
过程中会遇到一些bug,如权限不够的话改变登录用户为root,
Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting.
报这个错的话需要修改path.data,可以修改为/var/log
这里写代码片./logstash -f config-mysql --path.data=/var/log