[elk]-logstash导入mysql越来越慢

需要先下载一个mysql-connector-java mysql官网有的下载。

https://dev.mysql.com/downloads/file/?id=488444
网上大多数的模板都是这样的 ,开启分页查询,设置每次查询的数量。

官方文档地址

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html

input {
stdin {
}
jdbc {
type => "xxx"
jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
jdbc_user => "root"
jdbc_password => "root"
record_last_run => true
use_column_value => true
tracking_column => "id"
last_run_metadata_path => "/usr/local/logstash-6.5.4/data/my_info"
clean_run => "false"

jdbc_driver_library => "/opt/mysql-connector-java-8.0.17/mysql-connector-java-8.0.17.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => true
jdbc_page_size => "500"
statement => "select * from client_log_day_user where id > :sql_last_value"
schedule => "* * * * *"
}
}
#output {
#   stdout {
#       codec => json_lines
#   }
#   elasticsearch {
#       "hosts" => "192.168.10.116:9200"
#       "index" => "client_log_day_user"
#       "document_type" => "index"
#       "document_id" => "%{id}"
#   }
#}

然后这样输出的结果
在这里插入图片描述
但是会有个问题 ,如果在大表里你的offset的值越大,查询的速度会越来越慢。如下
一个查询需要2s 一个查询只需要0.015s
在这里插入图片描述
在这里插入图片描述
应该用

SELECT * FROM (select * from api_info_log_20190823 where id > :sql_last_value) AS t1 LIMIT 500 

这样来查询 会比较有效率。
首先创建一个偏移量的文件

echo “0“ > /usr/local/logstash-6.5.4/data/info.txt 

贴上配置文件

input {
  jdbc {
  type => "xxx"
  jdbc_connection_string => "jdbc:mysql://192.168.10.210:3306/pdabc"
  jdbc_user => "root"
  jdbc_password => "pdabc"
  record_last_run => true
  use_column_value => true
  tracking_column => "id"
  last_run_metadata_path => "/usr/local/logstash-6.5.4/data/info.txt"
  #jdbc_paging_enabled => true
  jdbc_driver_library => "/opt/mysql-connector-java-8.0.17.jar"
  jdbc_driver_class => "com.mysql.jdbc.Driver"
  statement => "select * from api_info_log_20190823 where id > :sql_last_value limit 500 "
  schedule => "* * * * *"
  }
}
output {
    elasticsearch {
        "hosts" => "192.168.10.116:9200"
        "index" => "api_info_log_20190823"
        "document_type" => "index"
        "document_id" => "%{id}"
    }
}

结果如下
在这里插入图片描述
2.8G的数据 500行/分钟 大概需要同步3小时
在这里插入图片描述
数据2.8G导入es大概1G
在这里插入图片描述

但是到了这里又会有一个新问题,如果我把很多个表放到一个conf中,并且通过判断type的方式,把数据写入索引。 logstash 会报错failed to parse field [type] of type [long]

原因是因为我的mysql 表字段也有type这个值,由于type这个值我es搜索的时候也要用,因此需要单独跑。
在这里插入图片描述
在这里插入图片描述
就写了定时任务,不同的表写在不同的配置文件。然后每个小时的10分20分 30分跑不同的任务。
在这里插入图片描述

但是执行定时任务的时候杀死之前的脚本 就会报Terminated
后来排查发现是脚本的问题。
ps的时候搜的是名称为logstash的pid
结果脚本是以logstash命名的 所以杀完脚本就退出了。
还有一定要source /etc/profile

现在如下
在这里插入图片描述
在这里插入图片描述
需要同步的话可以取消注释
在这里插入图片描述
es中显示
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值