Elasticsearch之logstash的下载安装及使用并配置ik分词器

1. 选择同步边界

  1. 字段id
    当数据库有新增字段时logstash就会同步到es中。缺点是当数据更新时,logstash无法感知。
  2. updateTime
    一般情况下我们选择这个,updatetime不管是新增还是修改都会产生变化,logstash能够感知。

2.logstash-jdbc插件(新版本自带的)

3.准备

  1. 下载logstash 注意版本跟es一致(https://www.elastic.co/cn/downloads/elasticsearch)
  2. 下载 数据库连接驱动 mysql-connector-java-5.1.41.jar
  3. 解压,配置
tar -zxvf logstash.x.x 						// 解压
cd logstash.x.x								// 进入文件夹								
mkdir sync										// 创建文件夹
cd sync 										// 进入文件夹
vim logstash-db-sync.conf			//  创建同步规则配置文件
cp ~/mysql-connector  .				//	复制驱动到当前目录

logstash-db-sync.conf

input {
  jdbc {
 	# 驱动的路径,在上一步中已经下载
    jdbc_driver_library => "/usr/local/sql/mysql-connector-java-5.1.46.jar"
    # 数据库地址
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.1.103:3306/test_elk"
    jdbc_user => "root"
    jdbc_password => "root"
    # 分页
    jdbc_paging_enabled => "true"
    # 分页每页数量 自定义
    jdbc_page_size => "10000"
    #  执行 sql 时机,类似 crontab 的调度 分时天年月  全是*表示每分钟跑一次
    schedule => "* * * * *"
    #  要执行的 sql,以 “:” 开头是定义的变量,可以通过 parameters 来设置变量,这里的 sql_last_value 是内置的变量,表示上一次 sql 执行中 update_time 的值,这里 update_time 条件是 >= 因为时间有可能相等,没有等号可能会漏掉一些增量
    statement => "SELECT * FROM user WHERE update_time >= :sql_last_value"
    # statement_filepath => "外部.sql文件"
    # type => "_doc"  文档类型
    #  是否开启追踪,也就是上次更新的时间,这个会记录到last_run_metadata_path 文件
    use_column_value => true
    # 同步点文件,这个文件记录了上次的同步点,重启时会读取这个文件,这个文件可以手动修改
    last_run_metadata_path => "/usr/local/logstash.x.x/sync/syncpoint_table"
    tracking_column_type: 递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
    tracking_column_type => "timestamp"
    # 递增字段的名称,这里使用 update_time 这一列,这列的类型是 timestamp
    tracking_column => "update_time"
    # 是否清除last_run_metadata_path 记录,ture表示每次从头开始查询
    clear_run => false
    # 数据库大写转小写
    lowercase_column_names => false
  }
}


output {
    elasticsearch {
        # ES的IP地址及端口
        hosts => ["192.168.128.130:9200", "192.168.128.130:9201"]
        # 同步的索引名称 
        index => "user"
        # 需要关联的数据库中有一个id字段(如果取了别名就改成别名对应),对应文档中的id
        document_id => "%{id}"
        # 等同于 上述type
        document_type => "_doc"
    }
    # 日志输出
    stdout {
        # JSON格式输出
        codec => json_lines
    }
}

4.启动

// 进入bin目录
cd ../bin
// 启动命令  -f   配置文件路径
./logstash   -f  ../sync/logstash-db-sync.conf 

补:获取logstash模板(加入分词操作)

  1. vim logstash-ik.json
  2. 访问es_ip:9200/_template/logstash得到 json
  3. 全部复制到 logstash-ik.json
  4. string_fields.mapping 中,加入如下代码
"analyzer":"ik_max_word",
  1. 去掉json文件中的 logstash前缀
  2. 修改配置文件logstash-db-sync.conf ,在 output.elasticsearch中加入
# 模板名称
template_name => "my_ik"
# 模板所在位置
template => "../sync/logstash-ik.json"
# 重写模板
template_overwrite => true
#默认为true,改成false关闭logstash模板自动管理功能,自定义模板使用
manager_template => false

猜你喜欢

转载自blog.csdn.net/weixin_41725792/article/details/110247158