ElasticSearch的版本是elasticsearch-6.3.1
mysql的数据是5.7
logstash版本是6.3.1
ElasticSearch的插件elasticsearch-head-master ,现在加压好了,直接放在ElasticSearch目录下面就好了,这不强制。
这个是mysql的数据库连接驱动程序 mysql--connector-java-5.1.18.zip
因为使用了ElasticSearch这个插件所以还需要安装nondjs,因为需要用的npm
1:先启动ElasticSearch
安装ElasticSearch的插件,直接双击/bin/ElasticSearch.bat ,启动成功后:http://127.0.0.1:9200/
2:安装,启动ElasticSearch插件
运行head需要借助grunt命令,因此需要安装grunt。所以先要安装nodejs,双加exe就可以了。然后cmd命令,node -v,如果出现版本号,说明安装成功。
然后安装grunt,npm install -g grunt -cli ,如果在不行,就cd到nodejs的安装目录下执行这个命令。
grunt安装好了之后,在cd到你解压好的elasticsearch-head-master这个目录下面(和bin同级的那个目录)执行npm install,这里如果失败了请参考:https://blog.csdn.net/qq3401247010/article/details/78742524
启动 cd到你解压的head目录下,bin同级,执行npm run start ,执行成功后 :http://localhost:9100/
3,首先在logstash目录下面建一个lib,把你现在的mysql的连接驱动jar包放进去
建一个sql文件,我的是建jdbc.sql,里面是你要同步的数据表的sql语句,也可以配置在conf中
SELECT
id,
sys_log_level,
project_name,
function_name,
sys_log_msg,
create_time
FROM
log_sys
ORDER BY
create_time DESC
这些东西都准备好了之后,修改logstash的配置文件,不是config文件夹下面的那个。上面的图中看得到就是logstash.conf
input { tcp { port=>5549 } jdbc{ jdbc_connection_string => "jdbc:mysql://192.168.2.104:33060/ygsc_scm?useSSL=false&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" jdbc_user => "tt" jdbc_password => "2344WsL1JrUntER2Zns32WmGwr" jdbc_driver_library => "lib\mysql-connector-java-5.1.18-bin.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" statement_filepath => "jdbc.sql" schedule => "* * * * *" type => "jdbc" } } output { elasticsearch { index => "testdb" document_type => "%{type}" hosts => ["localhost:9200"] } }
这些logstash的准备工作都做好了之后,修改logstash 文件夹下Gemfile文件,将source改为:https://gems.ruby-china.org,然后进入logstash的bin目录,执行logstash-plugin install logstash-input-jdbc 这里如果有问题,请参考:https://blog.csdn.net/yowrhihoil/article/details/79568743,安装插件然后进入bin目录下执行logstash.bat -f ogstash.conf,就可以启动起来了。
后面会把这启动项目做成服务的那种。就不用每次点击bat或者输入命令来启动了。
同步多张表:
input {
jdbc {
type => "type_actor"
jdbc_driver_library => "D:\\tool\\logstash-6.3.1\\bin\\lib\\mysql-connector-java-5.1.18.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/sakila"
jdbc_user => "root"
jdbc_password => "cbq12345"
codec => plain { charset => "UTF-8"}
#使用其它字段追踪,而不是用时间
#use_column_value => true
#追踪的字段
#tracking_column => id
#record_last_run => true
#last_run_metadata_path => "D:\tool\logstash-6.3.1\bin\mysql\actor.txt"
#clean_run => "false"
statement => "select * from actor where last_update > :sql_last_value"
jdbc_paging_enabled => "true"
jdbc_page_size => "500"
schedule => "* * * * *"
}
jdbc {
type => "type_address"
jdbc_driver_library => "D:\\tool\\logstash-6.3.1\\bin\\lib\\mysql-connector-java-5.1.18.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/sakila"
jdbc_user => "root"
jdbc_password => "cbq12345"
codec => plain { charset => "UTF-8"}
#使用其它字段追踪,而不是用时间
#use_column_value => true
#追踪的字段
#tracking_column => id
#record_last_run => true
#last_run_metadata_path => "D:\tool\logstash-6.3.1\bin\mysql\address.txt"
#clean_run => "false"
statement => "select * from address where last_update > :sql_last_value"
jdbc_paging_enabled => "true"
jdbc_page_size => "500"
schedule => "* * * * *"
}
}
filter {
json {
source => "message"
remove_field => ["message"]
}
}
output {
if [type]=="type_actor" {
elasticsearch {
hosts => ["localhost:9200"]
index => "actor_index"
#document_type => "%{type}"
#document_id => "%{id}"
}
}
if [type]=="type_address" {
elasticsearch {
hosts => ["localhost:9200"]
index => "address_index"
#document_type => "%{type}"
#document_id => "%{id}"
}
}
stdout{
codec => json_lines
}
}
同步file:
input{
file{
#path属性接受的参数是一个数组,其含义是标明需要读取的文件位置
path => [‘pathA’,‘pathB’]
#表示多就去path路径下查看是够有新的文件产生。默认是15秒检查一次。
discover_interval => 15
#排除那些文件,也就是不去读取那些文件
exclude => [‘fileName1’,‘fileNmae2’]
#被监听的文件多久没更新后断开连接不在监听,默认是一个小时。
close_older => 3600
#在每次检查文件列 表的时候, 如果一个文件的最后 修改时间 超过这个值, 就忽略这个文件。 默认一天。
ignore_older => 86400
#logstash 每隔多 久检查一次被监听文件状态( 是否有更新) , 默认是 1 秒。
stat_interval => 1
#sincedb记录数据上一次的读取位置的一个index
sincedb_path => ’$HOME/. sincedb‘
#logstash 从什么 位置开始读取文件数据, 默认是结束位置 也可以设置为:beginning 从头开始
start_position => ‘beginning’
#注意:这里需要提醒大家的是,如果你需要每次都从同开始读取文件的话,关设置start_position => beginning是没有用的,你可以选择sincedb_path 定义为 /dev/null
}
}