安装logstash7.3.2遇到的坑及解决⽅案
⼀、安装logstash
1.1安装logstash7.3.2版本
国庆节的前⼏天下载了elasticsearch和kibana,当时elastic stack系列最新版本还是7.3.2,当时只下载了elasticsearch和kibana的最新版7.3.2练习,今天,项⽬中需要⽤到logstash收集数据信息,进⼊官⽹,发现就在今天10⽉2⽇,官⽹发布了新版本7.4版本,我们知道使⽤ELK,需要版本⼀致,这下好了,发布了7.4版本,⼀时不知道去哪⾥下载7.3.2版本了。
了好久,终于到了了⼀个⽅法:
使⽤这些url下载⽬前可以完美解决下载ELK以往版本的问题:
根据所需要的版本,更换版本号,即可下载。
windows版本,将替换成zip就可以了。
使⽤这种⽅法成功下载了window版本的logstash7.3.2版本。
1.2 安装logstash-input-jdbc
官⽹下载选择有好⼏种,选择不带开发⼯具的安装包即可,安装ruby2.6.4(x64),这⾥不需要安装带开发⼯具的ruby,因为带开发⼯具的ruby安装包邮100多兆,官⽹下载⾮常缓慢,⽽不带开发⼯具的版本,只有⼗⼏兆,下载相对快⼀些,使⽤迅雷要⽐使⽤chrome下载快⼀些。
下载之后是⼀个exe⽂件,安装即可。
安装完成查看是否安装成功,在cmd窗⼝输⼊:ruby -v
出现版本号2.6.4,安装成功。
logstash7.x版本本⾝不带logstash-input-jdbc插件,需要⼿动安装
进⼊logstash安装⽬录的bin⽬录下,输⼊:logstash-plugin.bat  install logstash-input-jdbc
注意,使⽤批处理⽂件logstash-plugin.bat安装插件,logstash的安装路径不能有中⽂,我今天安装的时候,因为使⽤的是迅雷下载的,所以⽂件默认放在了迅雷下载这个⽬录下,即路径为D:\迅雷下载\logstash-7.3.2\bin
然后安装插件,就会报错:
ArgumentError: invalid byte sequence in US-ASCII =~ at org/jruby/
1.3 创建模板⽂件
Logstash的⼯作是从MySQL中读取数据,向ES中创建索引,这⾥需要提前创建mapping的模板⽂件以便logstash 使⽤。
在logstach的config⽬录创建xiaomifeng1010_template.json,内容如下:
⽬录是:D:/ELK/logstash-7.3.2/config/xiaomifeng1010_template.json
{
"mappings" : {
"doc" : {
"properties" : {
"charge" : {
"type" : "keyword"
},
"description" : {
"analyzer" : "ik_max_word",
"search_analyzer" : "ik_smart",
"type" : "text"
},
"end_time" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
},
"expires" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
},
"grade" : {
"type" : "keyword"
},
"id" : {
"type" : "keyword"
},
"mt" : {
"type" : "keyword"
},
"name" : {
"analyzer" : "ik_max_word",
"search_analyzer" : "ik_smart",
"type" : "text"
},
"pic" : {
"index" : false,
"type" : "keyword"
},
"price" : {
"type" : "float"
},
"price_old" : {
"type" : "float"
},
"pub_time" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
},
"qq" : {
"index" : false,
"type" : "keyword"
},
"st" : {
"type" : "keyword"
},mysql下载后安装中出现提示不到安装包
"start_time" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
"type" : "date"
},
"status" : {
"type" : "keyword"
},
"studymodel" : {
"type" : "keyword"
},
"teachmode" : {
"type" : "keyword"
},
"teachplan" : {
"analyzer" : "ik_max_word",
"search_analyzer" : "ik_smart",              "type" : "text"
},
"users" : {
"index" : false,
"type" : "text"
},
"valid" : {
"type" : "keyword"
}
}
}
},
"template" : "xiaomifeng1010"
}
input {
stdin {
}
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/xiaomifeng1010?useUnicode=true&character
Encoding=utf-8&useSSL=true&serverTimezone=UTC"  # the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "123456"
# the path to our downloaded jdbc driver
jdbc_driver_library => "C:\Users\MSI\.m2\repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar"
# the name of the driver class for mysql
jdbc_driver_class => "sql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#要执⾏的sql⽂件
#statement_filepath => "/conf/course.sql"
statement => "select * from course_pub where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)"
#定时配置
schedule => "* * * * *"
record_last_run => true
last_run_metadata_path => "D:/ELK/logstash-7.3.2/config/logstash_metadata"
}
}
output {
elasticsearch {
#ES的ip地址和端⼝
hosts => "localhost:9200"
#hosts => ["localhost:9200","localhost:9202","localhost:9203"]
#ES索引库名称
index => "xc_course"
document_id => "%{id}"
document_type => "doc"
template =>"D:/ELK/logstash-7.3.2/config/xiaomifeng1010_template.json"
template_name =>"xiaomifeng1010"
template_overwrite =>"true"
}
stdout {
#⽇志输出
codec => json_lines
}
}
说明:
1、ES采⽤UTC时区问题
ES采⽤UTC 时区,⽐北京时间早8⼩时,所以ES读取数据时让最后更新时间加8⼩时
where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)
2、logstash每个执⾏完成会在D:/ELK/logstash-7.3.2/config/logstash_metadata记录执⾏时间下次以此
时间为基准进⾏增量同步数据到索引库。
配置数据源以及查询的表:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。