Logstash是es官方標配的ELK中的“L”,它們三者的關系是這樣:“E”指elasticsearch,用來提供核心的搜索服務;“L”指logstash,用來實現源數據到es索引庫的收集、轉換、入庫;“K”指Kibana,用來通過豐富的圖表化界面展示數據。安裝這個logstash真的是比較坑,尤其是對於沒接觸過的人來說,安裝過程好多問題都莫名其妙。
1、服務器上我測試的es版本與logstash版本均是7.5。首先安裝logstash,去官網下載對應版本的zip包,下載后解壓到目錄即可:
2、在bin目錄下新建一個配置文件sql2es.conf(文件名自定,但是擴展名得是conf),用來指定要從哪個數據庫同步數據到es索引庫。具體配置可自行百度,需要注意的是紅框里的。jdbc_driver_library配置的是logstash要使用的jdbc驅動,你訪問mysql就去下載mysql的驅動jar包,訪問sqlserver就去下載sqlserver的驅動jar包,下載完畢后這里配置成本地jar包的位置就好。我使用的是mysql-connector-java-8.0.18.jar,對應下面一行的jdbc_driver_class要配置成“com.mysql.cj.jdbc.Driver”,否則會出錯。原來老版本配置的是com.mysql.jdbc.Driver,這里要特別注意。我測試的配置是從本地的mysql數據庫中的t_owner表同步數據到es索引testdata下,文檔類型為owner。
3、cmd進入到logstash的斌目錄下,運行一下看看行不行:logstash -f sql2es.conf:-f表示按照指定的配置文件來運行。這么順利嗎?果然還是出錯了:報錯:com.mysql.jdbc.Driver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library? 上網一查說是本地logstash-input-jdbc沒有安裝好,但是要安裝這個東東,需要去更新ruby的某些文件,因為logstash使用ruby語言寫的。
4、修改logstash根目錄下的Gemfile文件,把source改成“https://gems.ruby-china.com/”。這個東東是用來指定ruby源的,國內的源下載安裝速度比較快。
5、運行logstash-plugin install logstash-input-jdbc。應該會提示安裝成功。再運行一下logstash -f sql2es.conf看看行不行,然並卵,問題依舊。繼續上網各種搜各種試,終於發現一篇帖子:https://www.jianshu.com/p/0e893f29ee05,有提到是這個版本有bug,需要升級(心中頓時萬馬奔騰...)。我本地的默認版本是4.3.16,不好使。
6、去github下載最新版(當前最新版本是4.3.19)zip包,下載后解壓並在本地編譯生成gem文件並安裝。
運行gem build logstash-input-jdbc.gemspec,生成.gem文件:
運行logstash-plugin.bat install logstash-input-jdbc-4.3.19.gem,在本地安裝最新版本:
7、再試試,運行logstash -f sql2es.conf。終於不報錯了,但是報mysql的timezone時區錯誤。這個好辦,去mysql里設置一下默認時區:
8、再次嘗試,成功了!它終於開始干活了。滿屏的數據滾動起來羅。
注意,如果本地沒有安裝ruby的話,前面步驟中的gem命令運行不起來。去官網下載一個最新版安裝就好(可能需要重啟服務器):https://rubyinstaller.org/downloads/