1. 程式人生 > >實戰ELK(6)使用logstash同步mysql資料到ElasticSearch

實戰ELK(6)使用logstash同步mysql資料到ElasticSearch

一、準備

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/

再測試下,發現正常同步了。