本文实践最新版的Logstash从csv文件导入数据到ElasticSearch。

注:本文所有文件路径相关的配置,需要根据你当前的环境配置修改

1、初始化ES、Kibana、Logstash

ElasticSearch、Kibana、Logstash的安装、初始化等操作这里就不赘述了,可以参考以下文章:

实现logstash6.4.3 同步mysql数据到Elasticsearch6.4.3

2、安装logstash文件导入、过滤器等插件

为了能导入文件,需要先给logstash安装几个文件导入所需的插件、过滤器等

在logstash的bin目录打开CMD窗口(win7系统可以在当前目录通过shift+右键,选择在此处打开命令窗口),然后输入:

logstash-plugin install logstash-input-file

logstash-plugin install logstash-filter-csv

logstash-plugin install logstash-filter-date

3、配置logstash.conf

logstash.conf配置文件的内容如下;

  1. input {
  2. file {
  3. path => ["H:/ElasticSearch/6.4.3/logstash-6.4.3/test/student.csv"]
  4. # 设置多长时间检测文件是否修改(单位:秒)
  5. stat_interval => 1
  6. # 监听文件的起始位置,默认是end
  7. start_position => beginning
  8. # 监听文件读取信息记录的位置
  9. sincedb_path => "H:/ElasticSearch/6.4.3/logstash-6.4.3/test/since_db.txt"
  10. # 设置多长时间会写入读取的位置信息(单位:秒)
  11. sincedb_write_interval => 5
  12. codec => plain{
  13. charset=>"GBK"
  14. }
  15. }
  16. }
  17. filter {
  18. #去除每行记录中需要过滤的\N,替换为空字符串
  19. mutate{
  20. gsub => [ "message", "\\N", "" ]
  21. }
  22. # 日期格式化
  23. date{
  24. match => ["create_time", "yyyy-MM-dd HH:mm:ss"]
  25. locale => "cn"
  26. }
  27. csv {
  28. # 每行记录的字段之间以|分隔
  29. separator => "|"
  30. columns => ["id","name","department","nickname","create_time","story"]
  31. # 过滤掉默认加上的字段
  32. remove_field => ["host", "tags", "path", "message"]
  33. }
  34. }
  35. output {
  36. elasticsearch {
  37. hosts => ["192.168.1.212:9210","192.168.1.212:9211","192.168.1.212:9212"]
  38. index => "student"
  39. manage_template => true
  40. template => "H:/ElasticSearch/6.4.3/logstash-6.4.3/config/logstash-template.json"
  41. template_overwrite => true
  42. template_name => "student"
  43. }
  44. stdout{
  45. codec => json_lines
  46. }
  47. }

上面的conf文件中有引用自定义的mapping模板,为啥要这么做呢?我们这里需要定制自己的字段映射模板,否则会直接用默认的logstash的模板,不一定适合我们的需求,比如不是所有字段都需要全文检索,比如日期create_time需要是date类型等,我们可以自己定义个json格式的模板在导入csv的时候指定这个模板文件路径即可。例如我们定义自己的mapping模板logstash-template.json内容如下:

这里有个坑,开始没有设置order值,默认是0,不起作用,改为大于0就可以了,这里配置成了100

  1. {
  2. "order": 100,
  3. "version": 6100,
  4. "index_patterns": ["student*"],
  5. "settings": {
  6. "index.number_of_shards": 5,
  7. "number_of_replicas": 1,
  8. "index.refresh_interval": "10s"
  9. },
  10. "mappings": {
  11. "doc": {
  12. "properties": {
  13. "@timestamp": {
  14. "type": "date"
  15. },
  16. "@version": {
  17. "type": "text",
  18. "fields": {
  19. "keyword": {
  20. "type": "keyword",
  21. "ignore_above": 256
  22. }
  23. }
  24. },
  25. "create_time": {
  26. "type": "date",
  27. "format": "yyyy-MM-dd HH:mm:ss"
  28. },
  29. "department": {
  30. "type": "text"
  31. },
  32. "id": {
  33. "type": "text",
  34. "fields": {
  35. "keyword": {
  36. "type": "keyword",
  37. "ignore_above": 256
  38. }
  39. }
  40. },
  41. "name": {
  42. "type": "text",
  43. "fields": {
  44. "keyword": {
  45. "type": "keyword",
  46. "ignore_above": 256
  47. }
  48. }
  49. },
  50. "nickname": {
  51. "type": "text",
  52. "fields": {
  53. "keyword": {
  54. "type": "keyword",
  55. "ignore_above": 256
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }

4、导入csv数据

然后我们在logstash的bin目录启动cmd窗口,输入以下命令执行导入数据(-f 表示需要使用自定义的配置文件,后面带自定义配置文件路径):

logstash.bat -f ../config/logstash.conf

注意:如果前面指定的记录上次读取文件位置信息的文件存在,请删掉(不删除的话不会重新开始导入,只会增量导入),比如删掉我们前面的logstash.conf配置文件指定了这个记录的文件:sincedb_path => "H:/ElasticSearch/6.4.3/logstash-6.4.3/test/since_db.txt"

结果如下:

然后我们通过kibana查看下导入的数据:

再查看下我们自定义的studen这个mapping模板是否安装到elasticsearch的模板库了,以及它的具体内容是啥:



从上图可以看到确实把我们自定义的mapping模板保存到ES了,并且其中的内容就是我们自定义的,比如create_date 这个字段的格式format就是我们在模板json文件中定义的。

5、本文相关文件下载

本文相关的配置文件、csv数据源

点我去下载

Logstash 6.4.3 导入 csv 数据到 ElasticSearch 6.4.3的更多相关文章

  1. mysql导出csv/excel文件的几种方法,mysql的load导入csv数据

    方法一 php教程用mysql的命令和shell select * into outfile './bestlovesky.xls' from bestlovesky where 1 order by ...

  2. mysql SQLyog导入csv数据失败怎么办?

    分享下mysql使用SQLyog导入csv数据失败的解决方法 给mysql导入数据,选中某个表选择导入--导入使用本地csv数据即可,单有的时候不知道什么问题导入不成功!!! 给mysql导入数据,使 ...

  3. jmeter 导入csv数据中json格式数据取值不完整

    1.jmeter中添加csv数据文件时,数据是json格式 2.jmeter中执行取值发现只取了一部分 分析原因,json格式数据,中间有逗号,而csv是根据逗号来分割的,这回导致我们取值错位. 解决 ...

  4. MySQL 导入CSV数据

    第一步 创建表结构 create table t1( key1 ), v1 ) ); 第二步 导入数据 load data local infile 'D:/t1.csv' into table t1 ...

  5. mysql 导入CSV数据 [转]

    转自: http://blog.chinaunix.net/uid-23284114-id-3196638.html MYSQL   LOAD DATA INFILE命令可以把csv平面文件中的数据导 ...

  6. Mysql 导入CSV数据 语句 导入时出现乱码的解决方案

    1. 登陆mysql 2. use testdb 3. 执行导入语句 LOAD DATA LOCAL INFILE 'd://exportedtest2.csv' INTO TABLE usertab ...

  7. sql server 小技巧(1) 导入csv数据到sql server

    1. 右击 DataBaseName,选择 Tasks->Import Data 2. 选择数据源: Flat File Source , 选择一个csv文件 Advance: 选择所有的列,改 ...

  8. 如何导入CSV数据 (python3.6.6区别于python2 环境)

    1.python2环境下 2.python3.6.6环境下 如果用python2环境下的代码,在python3.6.6环境下编译会出现以下问题: 错误(1): SyntaxError:Missing ...

  9. plsql导入csv数据,未响应,invalid identifier

    问题分析: 1.确保cvs字段名与表字段名一致,不要有空格 2.cvs字段对应表字段的大写,确保表字段都是大写 3.如果字段能对应上,plsql会自动识别出来

随机推荐

  1. jdbcTemplate批量插入处理数据

    最近有个需求,就是批量处理数据,但是并发量应该很大,当时第一时间想到得是mybatis的foreach去处理,但是后来通过查资料发现,相对有spring 的jdbcTemplate处理速度,mybat ...

  2. antd table 点击行触发radio 或 checkbox

     UIStore.ts (使用mobx) 1 import { observable, action, computed } from 'mobx' export class UIStore { @o ...

  3. 2018-2019-2 20165234 《网络对抗技术》 Exp2 后门原理与实践

    实验二 后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其 ...

  4. Babel学习小记

    一.babel配置文件中的plugins和presets是什么? 1.首先说说babel是什么,babel是一个JavaScript转码器,帮助我们把浏览器不兼容的ES6语法转换成ES5语法: 2.接 ...

  5. Java 多线程 - Java对象头, Monitor

    详见: http://www.cnblogs.com/pureEve/p/6421273.html

  6. 2018-2019-20175315 实验一 《Java开发环境的熟悉》实验报告

    2018-2019-20175315实验一 <Java开发环境的熟悉>实验报告 一.实验内容及步骤 实验1 1.用mkdir建立“20175303exp1”的目录 2.在“20175303 ...

  7. 2019前端面试题之js

    1.js的数据类型 js的数据类型分为基本类型跟引用类型 基本数据类型(5个):undefined,boolean,number,string,null.基本类型的访问是按值访问的,就是说你可以操作保 ...

  8. .call() 与 .apply() 的用法及区别

    首先说明两个方法的含义: apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法.call:调用一个对象的一个方法,用 ...

  9. 如何用java实现一个p2p种子搜索(3)-dht协议实现

    dht协议实现 上一篇完成了路由表的实现,建立了路由表后,我们还要对路由表进行初始化,因为一开始路由表为空,所以我们需要借助一些知名的dht网络中的节点,对这些节点进行find_node,然后一步步初 ...

  10. 关于form-checkbox 必填项无效的错误

    校验规则要写在一个form里 检查data,给个默认值. 否则刚进去错误提示不显示. 其次,要加 type 类型,注意大小写 触发类型为 change .