前言:
logstash是什么?為什么需要logstash搂橙?援引官網(wǎng)的介紹:Logstash 是開源的服務(wù)器端數(shù)據(jù)處理管道旦装,能夠同時從多個來源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù)蓄氧,然后將數(shù)據(jù)發(fā)送到您最喜歡的 “存儲庫” 中函似。(我們的存儲庫當(dāng)然是 Elasticsearch。)
簡單來說喉童,logstash就是用于將不同來源的數(shù)據(jù)(如JDBC撇寞、http網(wǎng)絡(luò)、kafka堂氯、log4j日志等)統(tǒng)一管理蔑担,輸入到Elasticsearch中,以作為整個搜索引擎的數(shù)據(jù)源咽白。例如:存儲在Mysql中 的數(shù)據(jù)啤握,可以用JDBC來導(dǎo)入到Elasticsearch中(需要安裝logstash-input-jdbc插件),還可以設(shè)置定時任務(wù)晶框,支持增量導(dǎo)入等排抬。
本文主要介紹logstash-input-jdbc插件的安裝,以及簡單的.conf配置文件三妈,實(shí)現(xiàn)執(zhí)行定時任務(wù),從Mysql增量導(dǎo)入數(shù)據(jù)到Elasticsearch的簡單效果莫绣。
1.安裝logstash-input-jdbc
首先畴蒲,在安裝好Elasticsearch的環(huán)境中,裝logstash对室,下載按照官網(wǎng)的步驟來就可以模燥。logstash是一個數(shù)據(jù)導(dǎo)入工具,支持多種數(shù)據(jù)源導(dǎo)入到Elasticsearch中掩宜,導(dǎo)入不同的數(shù)據(jù)源需要用到不同的插件蔫骂,要想導(dǎo)入Mysql的數(shù)據(jù)到Elasticsearch,需要安裝插件——logstash-input-jdbc牺汤。
Elasticsearch辽旋、logstash下載地址:https://www.elastic.co/downloads
插件github地址:logstash-plugins/logstash-input-jdbc
安裝此插件以及依賴需要在ruby環(huán)境下,ruby默認(rèn)的鏡像在國外,所以很慢补胚,需要手動將鏡像網(wǎng)站https://rubygems.org/替換為國內(nèi)的https://gems.ruby-china.com/
具體步驟如下:(MacOS系統(tǒng))
1.1安裝gem
Gem是一個管理Ruby庫和程序的標(biāo)準(zhǔn)包码耐,MacOS系統(tǒng)自帶gem環(huán)境,可以用gem -v查看版本溶其,gems.ruby-china建議gem版本最好>2.6.x骚腥,如果版本較低,可以用 gem update --system更新
gem -v
gem update --system
1.2給gem更換網(wǎng)站源
添加源https://gems.ruby-china.com/瓶逃,刪除舊源https://rubygems.org/
$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ gem sources -l
gem sources -l命令的作用是查看當(dāng)前gem的源束铭,在替換成功后,應(yīng)該顯示如下:
*** CURRENT SOURCES ***
https://gems.ruby-china.com/
確保只有 http://gems.ruby-china.com厢绝,即替換成功契沫。
1.3使用 Bundler 的Gem 源代碼鏡像命令或修改Gemfile
$ bundle config mirror.https://rubygems.org https://gems.ruby-china.com
使用bundle命令替換掉鏡像配置后即可執(zhí)行第4步,插件安裝代芜,本人用此方法沒成功埠褪,用的是第二種——修改Gemfile。修改Gemfile需要對logstash安裝文件目錄下的兩處文件——Gemfile和Gemfile.lock進(jìn)行修改挤庇,Mac下直接用記事本打開修改就OK钞速,服務(wù)器環(huán)境可以用vim修改:
cd /usr/local/logstash-6.4.2
vim Gemfile
#修改第1行出現(xiàn)的source,將source "https://rubygems.org"嫡秕,改為source "https://gems.ruby-china.com/"
vim Gemfile.lock
#修改GEM下的remote渴语,將remote: https://rubygems.org,改為remote: https://gems.ruby-china.com/
1.4安裝logstash-input-jdbc插件
執(zhí)行完上面3步后昆咽,終于可以安裝插件了驾凶,啟動logstash的bin目錄下的logstash-plugin命令,執(zhí)行安裝掷酗。
bin/logstash-plugin install logstash-input-jdbc
安裝完成不報錯就應(yīng)該是成功了调违,可用bin/logstash-plugin list查看所有已安裝插件,加上--verbose參數(shù)可以顯示插件版本號泻轰。
bin/logstash-plugin list
bin/logstash-plugin list --verbose
2.配置logstash的conf文件
logstash-input-jdbc插件安裝完成后技肩,就可以配置.conf文件導(dǎo)入mysql的數(shù)據(jù)了,詳細(xì)請戳官方文檔,此處以我的配置文件為例:
文件名:logstash-mysql.conf浮声,路徑/usr/local/logstash-6.4.2/logstash-mysql.conf
input {
jdbc {
#jar包可以存放在任意路徑
jdbc_driver_library => "/usr/local/logstash-6.4.2/mysql-connector-java-5.1.36.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/DB_NAME"
jdbc_user => "mysqlUser"
jdbc_password => "userPass"
#schedule設(shè)置每分鐘執(zhí)行
schedule => "* * * * *"
statement => "SELECT * FROM blog_article WHERE blog_article.edit_date >= :sql_last_value"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "articles"
#index表示存入elasticsearch中的索引名字
}
stdout { codec => json_lines }
}
mysql-connector-java這個jar包下載: https://mvnrepository.com/artifact/mysql/mysql-connector-java
可以看到虚婿,在logstash的conf文件中可以配置schedule,即定時任務(wù)泳挥;配置statement然痊,即定時執(zhí)行的SQL語句,此處:
statement => "SELECT * FROM TABLE_NAME WHERE TABLE_NAME.edit_date >= :sql_last_value"
例中屉符,blog_article表中edit_date列記錄了數(shù)據(jù)編輯時間剧浸,當(dāng)有新增的文章或者有修改的文章時锹引,這些記錄的edit_date時間>上次sql執(zhí)行的時間sql_last_value,于是這些內(nèi)容就是要導(dǎo)入到Es中的所謂【增量】辛蚊。
3.啟動Logstash導(dǎo)入Mysql中的數(shù)據(jù)
配置好.conf文件后粤蝎,啟動logstash時即可直接根據(jù)conf文件啟動,從而實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入袋马。啟動命令如下:
/usr/local/logstash-6.4.2/bin/logstash -f /usr/local/logstash-6.4.2/logstash-mysql.conf