Logstash将mysql文件导入到elasticsearch及配置文件介绍
一、logstash介绍
1、简介
Logstash是一款开源的数据收集引擎,具备实时管道处理能力。简单来说,logstash作为数据源与数据存储分析工具之间的桥梁,结合 ElasticSearch以及Kibana,能够极大方便数据的处理与分析。通过200多个插件,logstash可以接受几乎各种各样的数据。包括日志、网络请求、关系型数据库、传感器或物联网等等。
2、图片介绍
二、安装环境介绍
1、系统环境
虚拟机环境:Centos7.0(64位)
jdk环境:jdk1.8
Es和kibana以及Ik分词器版本:6.6.1(这个版本对应很重要)
2、logstash下载
下载地址:https://www.elastic.co/downloads/logstash
三、logstash安装
1、logstash安装步骤
将logstash压缩文件上传到/usr/local文件夹下(个人文件存放地址可能不同),解压缩。
2、下载logstash后查看是否安装成功
进入到logstash目录下bin目录,注意这里一定需要以root用户登录(切换用户可以输入命令 su root,输入密码可以切换用户root)
执行以下命令:
./logstash -e 'input { stdin { } } output { stdout {} }'
看到以下输出就说明安装成功:
四、mysql-connect-java.jar下载以及配置mysql信息
1、mysql-connect-java.jar下载
下载地址:https://dev.mysql.com/downloads/connector/j/
2、logstash配置mysql-connect-java.jar
在logstash同级目录下新建mysql-connet文件夹并上传jar包
mkdir mysql-connect
注意事项:下载jar文件后在window进行解压,将解压后的jar文件上传/usr/local/mysql-connet文件夹下(个人存放jar地址,依据个人)
cd到logstash目录bin目录下,新建文件夹config-mysql,打开并写入mysql.conf文件内容
input {
stdin{
}
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://192.168.#.#:3306/databasename"
# 用户名密码
jdbc_user => "root"
jdbc_password => "root"
# jar包的位置(上一步jar包存放位置)
jdbc_driver_library => "/usr/local/mysql-connect/mysql-connector-java-8.0.15.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 t_supervision"
#定时执行时间
schedule => "* * * * *"
#索引的类型
type => "vision"
}
}
output {
elasticsearch {
hosts => "192.168.#.#:9200" //个人虚拟机ip地址
# index名
index => "supervision"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
stdout {
codec => json_lines
}
}
五、测试同步数据
进入bin目录下,输入命令(注意这里config.mysql是目录不是文件名,如果不加–path.data=/root/会报错,多个实例时需要加上path.data才可以哦, 这里也要是root用户登录)
执行以下命令:
./logstash -f config-mysql --path.data=/root/
等待十几秒时间......
看到以上结果则表示配置成功!!!!!!
在kibana 中进行查询:
六、logstash导入mysql多数据源数据
1、修改自定义的mysql.conf配置文件
进入到mysql.conf配置文件进行编辑:
cd bin/mysql-config
vi mysql.conf
新建input下jdbc,以及output elasticsearch文件
input {
stdin{
}
# 单表操作
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://39.104.50.93:3309/zikaoshu_teambattle_center"
# 用户名密码
jdbc_user => "root"
jdbc_password => "root"
# jar包的位置
jdbc_driver_library => "/usr/local/mysql-connect/mysql-connector-java-8.0.15.jar"
# mysql的Driver
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
# 对应着要执行的sql的绝对路径
#statement_filepath => "config-mysql/test02.sql"
statement => "select * from t_supervision"
schedule => "* * * * *"
#索引的类型
type => "score"
}
# 单表操作
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://39.104.50.93:3309/zikaoshu_teambattle_center"
# 用户名密码
jdbc_user => "root"
jdbc_password => "root"
# jar包的位置
jdbc_driver_library => "/usr/local/mysql-connect/mysql-connector-java-8.0.15.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 t_team_season"
schedule => "* * * * *"
#索引的类型
type => "season"
}
# 多表联合查询
jdbc {
# 数据库
jdbc_connection_string => "jdbc:mysql://39.104.50.93:3309/zikaoshu_teambattle_center"
# 用户名密码
jdbc_user => "root"
jdbc_password => "root"
# jar包的位置
jdbc_driver_library => "/usr/local/mysql-connect/mysql-connector-java-8.0.15.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 tm.id,tm.openid from t_team as t inner join t_team_member as tm on tm.team_id = t.id where t.id = 10"
schedule => "* * * * *"
#索引的类型
type => "team"
}
}
output {
if [type]=="score" {
elasticsearch {
hosts => "192.168.27.141:9200"
# index名
index => "teamscore"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
}
if [type]=="season" {
elasticsearch {
hosts => "192.168.27.141:9200"
# index名
index => "teamseason"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
}
if [type]=="team" {
elasticsearch {
hosts => "192.168.27.141:9200"
# index名
index => "teammember"
# 需要关联的数据库中有有一个id字段,对应索引的id号
document_id => "%{id}"
}
}
stdout {
codec => json_lines
}
}
kibana工具进行查看:
2、logstash导入大量数据问题集锦
a、用logstash同步mysql数据到elasticsearch,原始数据有几千万条,发现过了几十万条之后,到了后面同步就特别慢,无法完成同步
b、内存泄露
七、mysql.conf配置文件详情介绍
1、input
1、schedule 定时器 多久执行一次SQL,默认是一分钟(schedule => * * * * *)
# schedule => 分 时 天 月 年
# schedule => * 22 * * * 表示每天22点执行一次