logstash使用template提前設定好maping同步mysql資料到Elasticsearch5.5.2

來源:互聯網
上載者:User

標籤:set   mapping   區分   clu   htm   /usr   方式   aging   tin   

上篇blog說到採用logstash-input-jdbc將mysql資料同步到ES(http://www.cnblogs.com/jstarseven/p/7704893.html),但是這裡有一個問題,即假如我不需要logstash自動對mysql資料提供的mapping模板怎麼辦,畢竟我的資料需要ik分詞,同義字解析等。。。

這時候就需要用到logstash的template功能了 ,如果現在還不到logstash和logstash-input-jdbc的安裝使用方式的建議先看上一篇文章。

好的,首先看一下之前簡單使用logstash-input-jdbc匯入es的設定檔mysql.conf(一會配置template時候需要修改):

input {    stdin {    }    jdbc {      # 資料庫      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test"      # 使用者名稱密碼      jdbc_user => "root"      jdbc_password => "123456"      # jar包的位置      jdbc_driver_library => "/usr/local/logstash-5.5.2/bin/config-mysql/mysql-connector-java-5.1.31.jar"      # mysql的Driver      jdbc_driver_class => "com.mysql.jdbc.Driver"      jdbc_paging_enabled => "true"      jdbc_page_size => "50000"      #statement_filepath => "config-mysql/test02.sql"      statement => "select * from my_into_es "      schedule => "* * * * *"      #索引的類型      type => "my_into_es_type"    }}filter {    json {        source => "message"        remove_field => ["message"]    }}output {    elasticsearch {        hosts => "127.0.0.1:9200"        # index名        index => "my_into_es_index"        # 需要關聯的資料庫中有有一個id欄位,對應索引的id號        document_id => "%{id}"    }    stdout {        codec => json_lines    }}

  現在,我們來看template模板怎麼用:

第一種採用我個人將它稱為動態模板:dynamic_templates 可以做到對某種類型欄位進行匹配mapping

1. 切換路徑  cd  /usr/local/logstash-5.5.2 目錄下

2. 建立template目錄 mkdir template

3. cd template

4. 建立檔案 logstash-ik.json   

5. 編輯檔案內容:

{    "template": "*",    "version": 50001,    "settings": {        "index.refresh_interval": "5s"    },    "mappings": {        "_default_": {            "_all": {                "enabled": true,                "norms": false            },            "dynamic_templates": [                {                    "message_field": {                        "path_match": "message",                        "match_mapping_type": "string",                        "mapping": {                            "type": "text",                            "norms": false                        }                    }                },                {                    "string_fields": {                        "match": "*",                        "match_mapping_type": "string",                        "mapping": {                            "type": "text",                            "norms": false,                            "analyzer": "ik_max_word",                            "fields": {                                "keyword": {                                    "type": "keyword"                                }                            }                        }                    }                }            ],            "properties": {                "@timestamp": {                    "type": "date",                    "include_in_all": false                },                "@version": {                    "type": "keyword",                    "include_in_all": false                }            }        }    }}~ 

注釋:注意上面的檔案中 "template": "*",這裡這麼寫會覆蓋logstash自身(在不指定mapping 模板時候)預設的採用的資料mapping匹配模板,要是不想覆蓋預設換個名字就行

6. cd /usr/local/logstash-5.5.2/bin/config-mysql

7.建立檔案 mkdir mysql-ik-define.conf

檔案內容:

input {    stdin {    }    jdbc {      # 資料庫      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test"      # 使用者名稱密碼      jdbc_user => "root"      jdbc_password => "123456"      # jar包的位置      jdbc_driver_library => "/usr/local/logstash-5.5.2/bin/config-mysql/mysql-connector-java-5.1.31.jar"      # mysql的Driver      jdbc_driver_class => "com.mysql.jdbc.Driver"      jdbc_paging_enabled => "true"      jdbc_page_size => "50000"      #statement_filepath => "config-mysql/test02.sql"      statement => "select * from my_into_es_define"      schedule => "* * * * *"      #索引的類型      type => "into_es_type_define_ik"    }}filter {    json {        source => "message"        remove_field => ["message"]    }}output {    elasticsearch {        hosts => "127.0.0.1:9200"        # index名        index => "into_es_index_define_ik"        # 需要關聯的資料庫中有有一個id欄位,對應索引的id號        document_id => "%{id}"        template_overwrite => true        template => "/usr/local/logstash-5.5.2/template/logstash-ik.json"    }    stdout {        codec => json_lines    }}

注釋:上面標顏色的就是template的配置,其他基本不變

8. cd /usr/local/logstash-5.5.2/bin

9. 執行命令:./logstash -f config-mysql/mysql-ik-define.conf 

觀察日誌:

10,我們拿Elasticsearch-head外掛程式看一下建立好的mapping:

和我們預料的一樣沒有問題,資料也成功匯入:

總結:這種配置方式個人覺得比較靈活可以對欄位按類區分做mapping

第二種採用我個人將它稱為靜態模板(其實和上面的基本一致),就是template檔案不一樣,mapping針對每個欄位寫死就好:

TODO、、

 

logstash使用template提前設定好maping同步mysql資料到Elasticsearch5.5.2

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.