實戰ELK(6)使用logstash同步mysql資料到ElasticSearch
阿新 • • 發佈:2018-12-03
一、準備
1、mysql
我這裡準備了個數據庫mysqlEs,表User
結構如下
新增幾條記錄
2、建立elasticsearch索引
curl -XPUT 'localhost:9200/user?pretty'
3、準備mysql-connector
下載地址為https://dev.mysql.com/downloads/connector/j/ 下載後解壓可以得到connector的jar包 。
我把它放在了"/usr/share/logstash/bin/config-mysql/mysql-connector-java-8.0.13.jar"這個目錄下。
二、 新建mysql與es互動的配置檔案
cd到logstash目錄bin目錄下,新建資料夾config-mysql,開啟並寫入mysql.conf檔案內容
cd /usr/share/logstash/bin
sudo mkdir config-mysql
cd config-mysql
vim /usr/share/logstash/bin/config-mysql/mysql.conf
input { stdin{ } jdbc { # 資料庫 jdbc_connection_string => "jdbc:mysql://localhost:3306/mysqlEs" # 使用者名稱密碼 jdbc_user => "root" jdbc_password => "root" # jar包的位置 jdbc_driver_library => "/usr/share/logstash/bin/config-mysql/mysql-connector-java-8.0.13.jar" # mysql的Driver jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "1000" #statement_filepath => "config-mysql/test02.sql" statement => "select * from User" schedule => "* * * * *" #索引的型別 type => "user" } } output { elasticsearch { hosts => "localhost:9200" # index名 index => "user" document_type => "usertype" # 需要關聯的資料庫中有有一個id欄位,對應索引的id號 document_id => "%{id}" } stdout { codec => json_lines } }
三、測試同步資料
輸入
/usr/share/logstash/bin/logstash -f /usr/share/logstash/bin/config-mysql/mysql.conf
等待一小會
可以看到一分鐘執行一次增量同步。
ctrl+c退出
查詢看看有沒有同步過來
curl -XGET 'localhost:9200/user/_search?pretty'
過程中會遇到一些bug,如許可權不夠的話改變登入使用者為root
mysql資料自動後臺同步
有心的同學可能發現,Ctrl+C退出後就不再同步了。這是因為我們的conf檔案沒有放置在logstash的預設目錄下,只需要copy下就可以了。
cp /usr/share/logstash/bin/config-mysql/mysql.conf /etc/logstash/conf.d/
再測試下,發現正常同步了。