日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

logstash使用template提前设置好maping同步mysql数据到Elasticsearch5.5.2

發布時間:2023/12/13 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 logstash使用template提前设置好maping同步mysql数据到Elasticsearch5.5.2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

轉載請注明原文出處:http://www.cnblogs.com/jstarseven/p/7707499.html

好的,首先看一下之前簡單使用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目錄 mkdirtemplate

3. cdtemplate

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
                }
            }
        }
    }
}
~ 

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

7.新建文件 mkdirmysql-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針對每個字段寫死就好:

1.在之前的template目錄下新建logstash-ik-define.json文件:

{
    "template": "*",
    "version": 50001,
    "settings": {
        "index.refresh_interval": "5s"
     },
    "mappings": {
        "into_es_type_define" :{
         "properties": {
               "ct": {
                    "type": "date"
                },
                "@timestamp": {
                   "include_in_all": false,
                   "type": "date"
                },
               "@version": {
                  "include_in_all": false,
                  "type": "keyword"
                },
               "name": {
                  "norms": false,
                  "analyzer": "ik_max_word",
                  "type": "text",
                  "fields": {
                     "keyword": {
                        "type": "keyword"
                         }
                    }
                },
                "id": {
                    "type": "long"
                },
                "type": {
                     "norms": false,
                     "analyzer": "ik_max_word",
                     "type": "text",
                     "fields": {
                     "keyword": {
                         "type": "keyword"
                          }
                    }
                },
                "age": {
                   "type": "long"
                },
                "desc": {
                    "norms": false,
                    "analyzer": "ik_max_word",
                    "type": "text",
                    "fields": {
                    "keyword": {
                         "type": "keyword"
                         }
                     }
                },
               "ut": {
                      "type": "date"
                 }    
            }
        }
    }
}

2.修改上述mysql-ik-define.conf文件里面的index,type,和template部分應用模板文件即可

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

4.查看head里面的mapping新建情況和template文件中mapping保持一致:

5.數據也成功同步:

總結:template模板使用

1.靜態模板 :
適合索引字段數據固定的場景,一旦配置完成,不能向里面加入多余的字段,否則會報錯
優點:scheam已知,業務場景明確,不容易出現因字段隨便映射從而造成元數據撐爆es內存,從而導致es集群全部宕機
缺點:字段數多的情況下配置稍繁瑣

1.動態模板 :
      適合字段數不明確,大量字段的配置類型相同的場景,多加字段不會報錯
優點:可動態添加任意字段,無須改動scheaml,
缺點:如果添加的字段非常多,有可能造成es集群宕機

定制索引模板,是搜索業務中一項比較重要的步驟,需要注意的地方有很多,比如:
(1)字段數固定嗎
(2)字段類型是什么
(3)分不分詞
(4)索引不索引
(5)存儲不存儲
(6)排不排序
(7)是否加權
除了這些還有其他的一些因素,比如,詞庫的維護改動,搜索架構的變化等等。
如果前提沒有充分的規劃好,后期改變的話,改動其中任何一項,都需要重建索引,這個代價是非常大和耗時的,尤其是在一些數據量大的場景中


-END-

總結

以上是生活随笔為你收集整理的logstash使用template提前设置好maping同步mysql数据到Elasticsearch5.5.2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。