實戰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 {
      # 連接的數據庫地址和哪一個數據庫,指定編碼格式,禁用SSL協議,設定自動重連
      jdbc_connection_string => "jdbc:mysql://localhost:3306/mysqlEs?characterEncoding=UTF-8&useSSL=false&autoReconnect=true"
      # 用戶名密碼
      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_default_timezone => "Asia/Shanghai" jdbc_paging_enabled => "true" jdbc_page_size => "1000" #statement_filepath => "config-mysql/test02.sql"
    #注意這個sql不能出現type,這是es的保留字段
   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 } }

 注意,目前我們這個output是所有的input都會輸出到這個index的。往往這不是我們想要的

output {
  #只輸出類型為user的input
  if [type] == "user" {

  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退出

有個提示 warning
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
解決辦法:
mkdir -p /usr/share/logstash/config/ ln -s /etc/logstash/* /usr/share/logstash/config chown -R logstash:logstash /usr/share/logstash/config/ bin/logstash -e 'input { stdin { } } output { stdout {} }'

查詢看看有沒有同步過來

curl -XGET 'localhost:9200/user/_search?pretty'

過程中會遇到一些bug,如權限不夠的話改變登錄用戶為root

還可以去/var/log/logstash看日志

mysql數據自動后台同步

有心的同學可能發現,Ctrl+C退出后就不再同步了。這是因為我們的conf文件沒有放置在logstash的默認目錄下,只需要copy下就可以了。

cp /usr/share/logstash/bin/config-mysql/mysql.conf /etc/logstash/conf.d/
service logstash.service restart

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM