使用Logstash将CSV导入Elasticsearch

时间:2018-04-03 07:37:56

标签: csv elasticsearch logstash kibana

我使用ELK堆栈解析CSV文件,并在用logstash解析后将它们发送给ElasticSearch。

不幸的是,我有一个问题:

当我将文件发送到我的logstash管道的“输入”的监听目录时,记录加倍,看到三元组,没有我问任何东西......

确实:

这就是我的管道:

input {
  file {
    path => "/home/XXX/report/*.csv"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
filter {
  csv {
      separator => ";"
     columns => ["Name", "Status", "Category", "Type", "EndPoint", "Group", "Policy", "Scanned At", "Reported At", "Affected Application"]
  }
}
output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "malwarebytes-report"
  }
stdout {}
}

当我在“/ home / XXX / report /”中发送包含28条记录的第一个文件时,这就是ElasticSearch所说的:

[root @ lrtstfpe1 confd]#curl -XGET 'localhost:9200/_cat/indices?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open malwarebytes-report PO4g6rKRTb6yuMDb7i-6sg 5 1 28 0 25.3kb 25.3kb

到目前为止一切顺利,但是当我发送第150个记录的第二个文件时......:

[root @ lrtstfpe1 confd]#curl -XGET 'localhost:9200/_cat/indices?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open malwarebytes-report PO4g6rKRTb6yuMDb7i-6sg 5 1 328 0 263.3kb 263.3kb

150首录音加倍并添加到前28 ...

发生了什么事?

有几天我坚持这个问题,我真的需要你......

更新:

You need to look in /etc/logstash/conf.d and see if there are any other config files there

问题是我在这个文件夹中只有一个管道......所以:

我刚刚完全卸载了ELK堆栈(rpm -e elasticsearch kibana logstash filebeat)以及任何ELK跟踪(rm -rf /var/lib/ELK/ var/log/ELK/ etc/default/ELK /usr/share/ELK ...)所以,没有任何地方。

我只是重新安装一切:

rpm -ivh elasticsearch-6.2.3.rpm
rpm -ivh kibana-6.2.3-x86_64.rpm
rpm -ivh logstash-6.2.3.rpm

启动服务:service ELK restart

然后,在配置方面: /etc/elasticsearch.yml完全默认为完全。 /etc/kibana.ym l完全默认为。 /etc/logstash.yml完全默认为。

然后,我在/etc/logstash/conf.d/中放了一个名为“pip.conf”的唯一管道 它的配置:

input {
   file {
     path => "/home/report/*.csv"
     start_position => "beginning"
     sincedb_path => "/dev/null"
  }
}
filter {
  csv {
     separator => ";"
     columns => ["Name","Status","Category","Type","EndPoint","Group","Policy","Scanned At","Reported At","Affected Application"]
  }
}
output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "malwarebytes-report"
  }
stdout{}
}

最后,我启动了我的管道: 我进入/usr/share/logstash并执行:

bin/logstash -f /etc/logstash/conf.d/pip.conf

经过几次努力,我的管道正在倾听,现在,我将file1.csv和我的file2.csv放入/home/report/

file1.csv包含28条记录,file2.csv包含150条记录。

但现在,当我查看我的索引时:curl -XGET 'localhost:9200/_cat/indices?v&pretty' 我的索引“malwarebytes-report”包含357条记录......(150x2 + 28x2 ...)

我不明白什么......

1 个答案:

答案 0 :(得分:0)

如果您可以使用logstash之外的其他工具来将文件加载到elasticsearch中,则可以使用elasticsearch-loader。

我是moshe/elasticsearch_loader
的作者 我为这个确切的问题写了ESL。
您可以通过pip下载它:

pip install elasticsearch-loader

然后您将可以通过发出以下命令将csv文件加载到elasticsearch中:

elasticsearch_loader --index incidents --type incident csv file1.csv