安装 logstash
安装包下载:
注意:需要和 Elasticsearch 版本相对应
上传至服务器并解压
tar -zxvf logstash-6.4.3.tar.gz
移动至安装目录
mv logstash-6.4.3 /usr/local/
创建数据同步相关的目录和配置
-
创建目录
mkdir /usr/local/logstash-6.4.3/sync
-
创建同步配置文件
vim logstash-db-sync.conf
input { jdbc { # 设置 MySql/MariaDB 数据库 url 以及数据库名称 jdbc_connection_string => "jdbc:mysql://ip:port/dbName?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true" # 用户名和密码 jdbc_user => "username" jdbc_password => "password" # 数据库驱动所在位置,可以是绝对路径或者相对路径 jdbc_driver_library => "/usr/local/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 => "/usr/local/logstash-6.4.3/sync/track_time" # 如果 use_column_value 为true,配置本参数,追踪的 column 名,可以是自增 id 或者时间 tracking_column => "updatedTime" # tracking_column 对应字段的类型 tracking_column_type => "timestamp" # 是否清除 last_run_metadata_path 的记录,true 则每次都从头开始查询所有的数据库记录 clean_run => false # 数据库字段名称大写转小写 lowercase_column_names => false } } output { elasticsearch { # es 地址 hosts => ["172.24.114.224:9200"] # 同步的索引名 index => "foodie-items-ik" # 设置 _docID 和数据相同 document_id => "%{itemId}" } # 日志输出 stdout { codec => json_lines } }
-
创建执行的 SQL 文件
vim 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 updatedTime 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
sql_last_value
为上一次同步的时间 -
上传数据库驱动
具体路径同上配置:
jdbc_driver_library
启动 logstash
cd /usr/local/logstash-6.4.3/bin
./logstash -f ../sync/logstash-db-sync.conf
给 logstash 配置分词器
两种配置方式:
- 手动创建索引,然后 logstash 只负责同步即可
- 使用 logstash 的自定义模板功能,让 logstash 同步之前自动创建好 mappings 并设置分词器
下面介绍第二种方式:
-
创建配置文件
首先,查看 es 默认的 logstash 模板:
GET -> http://ip:9200/_template/logstash
{ "logstash": { "order": 0, "version": 60001, "index_patterns": [ "logstash-*" ], "settings": { "index": { "refresh_interval": "5s" } }, "mappings": { "_default_": { "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, "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } ], "properties": { "@timestamp": { "type": "date" }, "@version": { "type": "keyword" }, "geoip": { "dynamic": true, "properties": { "ip": { "type": "ip" }, "location": { "type": "geo_point" }, "latitude": { "type": "half_float" }, "longitude": { "type": "half_float" } } } } } }, "aliases": {} } }
这里我们只需要修改以下几个地方,然后删除最外层的
{ "logstash": }
即可作为自定义模板使用:"order": 99, "version": 1, "index_patterns": ["*"], "mappings" -> "_default_" -> "dynamic_templates" -> "string_fields" -> "mapping": 增加 "analyzer": "ik_max_word"
修改后得到以下内容,我们将它命名为:
logstash-ik.json
,上传至 sync 目录下:{ "order": 99, "version": 1, "index_patterns": ["*"], "settings": { "index": { "refresh_interval": "5s" } }, "mappings": { "_default_": { "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", "ignore_above": 256 } } } } } ], "properties": { "@timestamp": { "type": "date" }, "@version": { "type": "keyword" }, "geoip": { "dynamic": true, "properties": { "ip": { "type": "ip" }, "location": { "type": "geo_point" }, "latitude": { "type": "half_float" }, "longitude": { "type": "half_float" } } } } } }, "aliases": {} }
-
修改
logstash-db.sync.conf
文件,增加如图配置项:# 定义模板名称 template_name => "myik" # 模板所在位置 template => "/usr/local/logstash-6.4.3/sync/logstash-ik.json" # 重写模板 template_overwrite => true # 默认为 true,false 关闭 logstash 自动管理模板的功能,如果自定义模板,则设置为 false manage_template => false
-
重启 logstash,请求
GET -> http://ip:9200/_template/myik
查看配置是否生效注意:分词器配置以后,只会对新创建的索引的文档数据进行分词,对已存在索引的文档数据不生效。
-
通过 header 插件查看索引信息进行再次验证:
-
接下来就可以对中文进行分词了,至此配置结束。