elasticsearch 同步Logstash

Logstash 數據同步方法:

1、在logstash下新建文件夾

cd /home/zl/Documents/logstash-6.4.3

mkdir sync

chmod 777 sync

2、創建數據同步文件

vim logstash-db-sync.conf

 

input {

    jdbc {

        # 設置 MySql/MariaDB 數據庫url以及數據庫名稱

        jdbc_connection_string => "jdbc:mysql://192.168.0.124:3306/sneaker-mall?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"

        # 用戶名和密碼

        jdbc_user => "root"

        jdbc_password => "root"

        # 數據庫驅動所在位置,可以是絕對路徑或者相對路徑

        jdbc_driver_library => "/home/zl/Documents/logstash-6.4.3/sync/mysql-connector-java-5.1.41.jar"

        # 驅動類名

        jdbc_driver_class => "com.mysql.jdbc.Driver"

        # 開啓分頁

        jdbc_paging_enabled => "true"

        # 分頁每頁數量,可以自定義

        jdbc_page_size => "1000"

        # 執行的sql文件路徑

        statement_filepath => "/usr/local/logstash-6.4.3/sync/foodie-items.sql"

        # 設置定時任務間隔  含義:分、時、天、月、年,全部爲*默認含義爲每分鐘跑一次任務

        schedule => "* * * * *"

        # 索引類型

        type => "_doc"

        # 是否開啓記錄上次追蹤的結果,也就是上次更新的時間,這個會記錄到 last_run_metadata_path 的文件

        use_column_value => true

        # 記錄上一次追蹤的結果值

        last_run_metadata_path => "/home/zl/Documents/logstash-6.4.3/sync/track_time"

        # 如果 use_column_value 爲true, 配置本參數,追蹤的 column 名,可以是自增id或者時間

        tracking_column => "updated_time"

        # tracking_column 對應字段的類型

        tracking_column_type => "timestamp"

        # 是否清除 last_run_metadata_path 的記錄,true則每次都從頭開始查詢所有的數據庫記錄

        clean_run => false

        # 數據庫字段名稱大寫轉小寫

        lowercase_column_names => false

    }

}

output {

    elasticsearch {

        # es地址

        hosts => ["192.168.1.187:9200"]

        # 同步的索引名

        index => "foodie-items"

        # 設置_docID和數據相同

        document_id => "%{id}"

        # document_id => "%{itemId}"

    }

    # 日誌輸出

    stdout {

        codec => json_lines

    }

}

 

3、將數據庫連接jar包拷貝到sync下

mysql-connector-java-5.1.41.jar

4、編寫同步數據的sql腳本,將腳本路徑配置在logstash-db-sync.conf 中

foodie-items.sql:

 

        SELECT

        i.id as itemId,

        i.item_name as itemName,

        i.sell_counts as sellCounts,

        ii.url as imgUrl,

        tempSpec.price_discount as price,

                i.updated_time as updated_time

        FROM

        items i

        LEFT JOIN

        items_img ii

        on

        i.id = ii.item_id

        LEFT JOIN

        (SELECT item_id,MIN(price_discount) as price_discount from items_spec GROUP BY item_id) tempSpec

        on

        i.id = tempSpec.item_id

        WHERE

        ii.is_main = 1

                and

                i.updated_time >= :sql_last_value

 

5、啓動logstash

cd /home/zl/Documents/logstash-6.4.3/bin

./logstash -f /home/zl/Documents/logstash-6.4.3/sync/logstash-db-sync.conf

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章