elasticsearch的学习2-logstash从mysql中导入数据

    我这里的案例是elasticesearch和logstash都在虚拟机(centos6.8)上,mysql在本机windows上。

    首先要先安装elasticsearch和logstash,直接到官网中找到相应的地址url,在虚拟机上通过wget命令下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.0.tar.gz

    在安装这两个之前,首先要先安装jdk,建议安装jdk1.8以上的版本较好一点,因为官网文档中提示:

Elasticsearch requires at least Java 8.

    安装java也是直接安装就可以了:通过命令:

 yum list | grep java-1.8

    可以查看能安装的java信息:

java-1.8.0-openjdk.x86_64                   1:1.8.0.171-8.b10.el6_9     @updates
java-1.8.0-openjdk-headless.x86_64          1:1.8.0.171-8.b10.el6_9     @updates
java-1.8.0-openjdk-debug.x86_64             1:1.8.0.171-8.b10.el6_9     updates 
java-1.8.0-openjdk-demo.x86_64              1:1.8.0.171-8.b10.el6_9     updates 
java-1.8.0-openjdk-demo-debug.x86_64        1:1.8.0.171-8.b10.el6_9     updates 
java-1.8.0-openjdk-devel.x86_64             1:1.8.0.171-8.b10.el6_9     updates 
java-1.8.0-openjdk-devel-debug.x86_64       1:1.8.0.171-8.b10.el6_9     updates 

    我直接截取了一部分信息,可以看到,jdk是1.8以上的(第一个)

    然后直接通过命令:yum install java 就可以安装了,安装完后,然后输入java -version查看下java的版本。

openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-b10)
OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode

    那么就安装完了,接下来开始elasticsearch和logstash的安装:

    这里两个的安装比较简单:

   直接解压elasticsearch:

tar -zxvf elasticsearch-6.3.0.tar.gz

   进入目录bin:执行 ./elasticsearch 就可以启动了

   解压logstach:

tar -zxvf logstash-6.3.0.tar.gz

  然后进入到bin目录下安装jdbc插件:

./logstash-plugin install logstash-input-jdbc

 安装完后,然后在进入到config的目录下,创建配置文件jdbc.conf(自己取名即可),然后执行命令:
vim jdbc.conf打开编辑文件:输入以下内容:

input {
  jdbc {
    jdbc_driver_library => "/home/cjh/Desktop/connector/mysql-connector-java-8.0.11.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.0.108:3306/cjh?serverTimezone=GMT%2B8"
    jdbc_user => "root"
        jdbc_password => "root"
    schedule => "* * * * *"
    statement => "SELECT * from hot_words"
  }
}

output {
        elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}

    这里的由输入和输出构成:输入是从mysql中输入,输入是输出到elasticsearch中

    输入部分:注意要加入jar包,也可以通过wget的方式进行下载:

wget http://central.maven.org/maven2/mysql/mysql-connector-java/8.0.11/mysql-connector-java-8.0.11.jar

   然后指定绝对路径。驱动类用:

com.mysql.cj.jdbc.Driver

   以前的驱动类(com.mysql.jdbc.Driver),已经过时了,基本不用了。

   注意现在链接的url后要带入时区参数:

  ?serverTimezone=GMT%2B8

  不然会报以下异常:
 

Java::JavaSql::SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. 

 这些都搞定了就可以启动mysql了,注意MySQL要支持远程连接才行(如果是本地的mysql,可以不管),不然后报拒绝访问的异常:

 is not allowed to connect to this MySql server

进入到mysql中,登陆:

mysql -u root -p

输入密码:root

进入到mysql数据库中:

use mysql

然后查询:

select host,user from user where user='root'

如果host的值为localhost的话,改掉它:

update user set host="%" where user='root'

重启mysql即可。

然后进入到logstash中执行:(注意如果出现防火墙问题时,要关掉(service iptables stop即可))

./bin/logstash -f ./config/jdbc.conf --config.reload.automatic

后面的参数是自动加载配置文件jdbc.conf的意思。

然后你会发现启动后有以下信息:

[2018-06-30T03:06:00,385][INFO ][logstash.inputs.jdbc     ] (0.003853s) SELECT * from hot_words

说明成功了,这个时候就可以请求下es看是否将数据数据导入了:

curl -XGET http://localhost:9200/_search?pretty

 

然后看到输出结果:(只给一部分)

{
  "took" : 8,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 24,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "logstash-2018.06.30",
        "_type" : "doc",
        "_id" : "ZzAjUGQBNNg9W1-ck4gi",
        "_score" : 1.0,
        "_source" : {
          "id" : 2,
          "@version" : "1",
          "@timestamp" : "2018-06-30T10:01:03.082Z",
          "words" : "网红"
        }
      },
      {
        "_index" : "logstash-2018.06.30",
        "_type" : "doc",
        "_id" : "eTAnUGQBNNg9W1-cJohw",
        "_score" : 1.0,
        "_source" : {
          "id" : 4,
          "@version" : "1",
          "@timestamp" : "2018-06-30T10:05:00.267Z",
          "words" : "陈剑灰"
        }
      },
      {
        "_index" : "logstash-2018.06.30",
        "_type" : "doc",
        "_id" : "ajAkUGQBNNg9W1-ca4jg",
        "_score" : 1.0,
        "_source" : {
          "id" : 1,
          "@version" : "1",
          "@timestamp" : "2018-06-30T10:02:01.381Z",
          "words" : "陈剑辉"
        }
      }}

至此:完成了。说明下:@version和@timestamp这两个参数是logstash插入的,不是mysql中的数据。

 

你可能感兴趣的:(elasticsearch)