Elasticsearch+Kibana+Logstash搭建搜索引擎并每分钟同步MySQL数据

Elasticsearch+Kibana+Logstash搭建搜索引擎并每分钟同步MySQL数据

By rambo

一.下载:

1.elasticsearch下载地址:https://www.elastic.co/cn/downloads/elasticsearch

2.kibana下载地址:https://www.elastic.co/cn/downloads/kibana

3.logstash下载地址:https://www.elastic.co/cn/downloads/logstash

二.启动elasticsearch

开放远程访问
elasticsearch.yml配置 network.host: 0.0.0.0,cluster.initial_master_nodes: ["node-1", "node-2"]

cd E:\elasticsearch-7.3.0\bin

输入elasticsearch.bat

访问:http://localhost:9200/

注册windows服务elasticsearch-service.bat install

三.启动kibana

E:\kibana-7.3.0-windows-x86_64\config文件夹中kibana.yml配置 elasticsearch.hosts: ["http://localhost:9200"]

E:\kibana-7.3.0-windows-x86_64\bin> kibana.bat

四.启动logstash

E:\logstash-7.3.0\bin中创建logstash_mysql.conf文件,内容

input {
 stdin { }
    jdbc {
        jdbc_connection_string => "jdbc:mysql://localhost:3306/test001"

        jdbc_user => "root"

        jdbc_password => ""

        jdbc_driver_library => "E:/logstash-7.3.0/bin/mysql-connector-java-5.1.6-bin.jar"

        jdbc_driver_class => "com.mysql.jdbc.Driver"

        jdbc_paging_enabled => "true"

        jdbc_page_size => "50000"
        statement => "SELECT fd_id,fd_class_name,sessionId FROM sys_log"
        schedule => "* * * * *"
    }
 }

 output {
     stdout {
        codec => json_lines
    }
    elasticsearch {
        hosts => "localhost:9200"
        index => "sys_log_index"
        document_type => "fd_id"
        document_id => "%{fd_id}"
    }
}

执行:E:\logstash-7.3.0\bin>logstash -f logstash_mysql.conf
在kibana中查看elasticsearch数据

GET sys_log_index/_search
{
  "query": {
    "match_all": {
    }
  }
}

在这里插入图片描述

五、问题&进阶功能

1.如果sql语句复杂,可以修改如下配置logstash_mysql.conf
input {
 stdin { }
    jdbc {
        jdbc_connection_string => "jdbc:mysql://localhost:3306/test001"

        jdbc_user => "root"

        jdbc_password => ""

        jdbc_driver_library => "E:/logstash-7.3.0/bin/mysql-connector-java-5.1.6-bin.jar"

        jdbc_driver_class => "com.mysql.jdbc.Driver"

        jdbc_paging_enabled => "true"

        jdbc_page_size => "50000"
        #statement => "SELECT fd_id,fd_class_name,sessionId FROM sys_log"
        statement_filepath => "E:/logstash-7.3.0/config/mysql-sys_log-jdbc.sql"
        #一分钟同步一次
        schedule => "* * * * *"
        jdbc_default_timezone =>"Asia/Shanghai"
        #是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
        clean_run => false 
        #是否将 字段(column) 名称转小写
        lowercase_column_names => false
    }
 }

 output {
    # 这里输出调试,正式运行时可以注释掉
    stdout {
        codec => json_lines
    }
    elasticsearch {
        hosts => "localhost:9200"
        index => "sys_log_index"
        document_type => "fd_id"
        document_id => "%{fd_id}"
    }
}

E:\logstash-7.3.0\config增加文件mysql-sys_log-jdbc.sql内容SELECT fd_id,fd_class_name,sessionId FROM sys_log


记录:

时间作者内容本版
2019-08-05Rambo创建V1.0

苔花如米小,也学牡丹开。

版权声明:本文为原创文章,转载请附上链接!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Windows系统中使用logstashelasticsearch(es)传入mysql数据库某表的数据时,可以通过以下几个方式确认数据是否已经全部传入es: 1. 使用Kibana中的Dev Tools或者Console API,执行查询语句,查看是否存在你传入的数据。例如: ``` GET /index_name/_search { "query": { "match": { "field_name": "field_value" } } } ``` 其中`index_name`为你传入的索引名称,`field_name`和`field_value`为你传入的数据字段和值。如果查询结果中包含你传入的数据,那么说明数据已经成功传入es。 2. 在logstash的配置文件中设置`stdout{}`输出插件,将传入es的数据输出到控制台,这样就可以实时查看数据的传输情况。例如: ``` output { elasticsearch { hosts => ["localhost:9200"] index => "index_name" document_id => "%{id}" } stdout {} } ``` 其中`stdout{}`即表示将数据输出到控制台。 3. 在logstash的日志文件中查看是否有报错信息,如果传输过程中有错误,通常会在日志中显示。例如: ``` [2021-10-21T02:15:05,173][WARN ][logstash.outputs.elasticsearch][main] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"index_name", :routing=>nil, :_type=>"_doc"}, #<LogStash::Event:0x1234567>], :response=>{"index"=>{"_index"=>"index_name", "_type"=>"_doc", "_id"=>"12345678", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse field [date_field] of type [date] in document with id '12345678'. Preview of field's value: '2021-10-21 02:15:05'", "caused_by"=>{"type"=>"illegal_argument_exception", "reason"=>"failed to parse date field [2021-10-21 02:15:05] with format [strict_date_optional_time||epoch_millis]", "caused_by"=>{"type"=>"date_time_parse_exception", "reason"=>"Failed to parse with all enclosed parsers"}}}}}} ``` 在日志中可以看到上述例子中,传输过程中出现了一个类型解析错误,导致数据无法成功传入es。 综上所述,以上三种方式可以帮助你确认logstash向es传入mysql数据库某表的数据是否已经全部传入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值