zoukankan      html  css  js  c++  java
  • 实战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

    再测试下,发现正常同步了。

     

  • 相关阅读:
    在WCF中使用Flag Enumerations
    WCF开发教程资源收集
    [转]WCF 4 安全性和 WIF 简介
    Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]
    Asp.Net Web API 2第十八课——Working with Entity Relations in OData
    Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
    Asp.Net Web API 2第十六课——Parameter Binding in ASP.NET Web API(参数绑定)
    Asp.Net Web API 2第十五课——Model Validation(模型验证)
    函数 生成器 生成器表达式
    函数的进阶
  • 原文地址:https://www.cnblogs.com/tianyamoon/p/10058495.html
Copyright © 2011-2022 走看看