logstash + elasticsearch:重新加载相同的数据

Sam*_*ant 4 elasticsearch logstash kibana

管理以获取logstash(1.3.1)以将数据发送到elasticsearch(0.9.5).

我的logstash conf文件设置是

input {
  file {
    path => ["D:/apache-tomcat-7.0.5/logs/*.*"]
   }

}
 output {
  stdout { } 
    elasticsearch_http {
    host => "localhost"
    port => 9200
   }
 }
Run Code Online (Sandbox Code Playgroud)

数据存储在索引logstash-2013.12.xx下的ES中

但是,如果我重新启动logstash,让我们说第二天 - 将相同的数据重新加载到新索引中.即使我再次重新启动,文档计数也会在索引中翻倍.

似乎logstash重新读取数据,ES也复制文档.

有没有办法不在logstash中重新加载或不在ES中重复或同时执行.

小智 9

我也使用Logstash 1.3.3来解决这个问题.关于Logstash Jira的相关错误报告是LOGSTASH-429文件输入 - .sincedb文件在Windows上被破坏.Boyd Meier也创建了一个补丁.

这个补丁也已被拉入Jordan Sissel的ruby-filewatch git存储库,以便包含在更高版本中,但它还没有进入.

问题来自使用文件inode的Logstash,该文件始终在Windows上返回0.Boyd Meier使用文件ID获取文件的标识符以绕过该问题.在从卷中删除文件之前,此文件ID保持不变.

如果你很乐意做一些补丁,你可以从Jordan Sissel的ruby-filewatch git存储库中修改.对于我刚刚修补的1.3.3,我正在测试测试日志文件的过程中,步骤如下:

  1. 从Github下载ruby-filewatch zip文件:Jordan Sissel的ruby-filewatch git存储库
  2. 将下载的zip文件解压缩到新目录
  3. 我不得不对Ruby-filewatch\lib\filwatch\tail.rb文件进行更改 - >第10行读取需要"JRubyFileExtension.jar".我不得不更改为要求"java/JRubyFileExtension.jar",否则我收到一个错误,它在尝试读取文件时无法找到jar文件.供参考,使整行显示为:require "java/JRubyFileExtension.jar" if defined? JRUBY_VERSION
  4. 在7-Zip中打开logstash-1.3.3-flatjar.jar文件
  5. 将java目录从ruby-filewatch拖放到7-Zip中的根文件夹中
  6. 将ruby-filewatch\lib\filewatch文件夹中的所有文件拖放到7-Zip中的filewatch文件夹中,覆盖任何现有文件

现在,当您针对多个日志文件运行它时,您会发现sincedb包含多个条目,条目显示类似于1717916447-2604966-851968 0 2 428312038.如果您在查找sincedb文件时遇到问题并且未设置sincedb_path在配置文件中,可以在运行jar的用户的主目录中找到它.如果这是您的用户,您可以使用Windows键+运行 - >%USERPROFILE% - >确定轻松访问它.

在部署到生产系统之前,一定要仔细进行修补和测试.