【问题标题】:logstash + elasticsearch : reloads the same datalogstash + elasticsearch :重新加载相同的数据
【发布时间】:2013-12-15 07:07:40
【问题描述】:

设法让 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
   }
 }

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

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

好像logstash在重新读取数据,ES也在复制文档。

有没有办法不在logstash中重新加载或在ES中不重复或两者兼而有之。

【问题讨论】:

  • Logstash 通常会保留一个.sincedb 文件来跟踪文件进度。也许尝试使用-v 运行以查看是否有任何问题。它对sincedb的路径有写权限吗?您可以尝试手动指定 sincedb 路径,这样您就可以对其进行更多控制。
  • 哦,这个错误也可能是相关的,因为你看起来是在 Windows 上:LOGSTASH-1587: Windows - file input - sincedb / start_position is ignored
  • @Rutter 感谢您的参考和回复。是的,我在 Windows 上试过这个。但是,使用 logstash 1.3.1 .. 希望一切都已修复!看起来 ES/Logstash 仍然存在一些基本问题。可以试试linux看看。感谢您的帮助!

标签: elasticsearch logstash kibana


【解决方案1】:

我在使用 Logstash 1.3.3 时也遇到了这个问题。 Logstash Jira 上的相关错误报告是 LOGSTASH-429 File Input - .sincedb file is broken on Windows。 Boyd Meier 还创建了一个补丁。

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

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

如果您愿意进行一些修补,可以从 Jordan Sissel 的 ruby​​-filewatch git 存储库中修补更改。对于我刚刚修补并且正在针对测试日志文件进行测试的 1.3.3,步骤如下:

  1. 从 Github 下载 ruby​​-filewatch zip 文件:Jordan Sissel's ruby-filewatch git repository
  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 文件时遇到问题并且没有t 在你的配置文件中设置 sincedb_path 它可以在运行 jar 的用户的主目录中找到。如果这是您的用户,您可以使用 Windows 键 + 运行 -> %USERPROFILE% -> OK 轻松访问它。

在部署到生产系统之前彻底修补和测试时,请务必小心。

【讨论】:

  • 看起来这个问题在 1.4.0 版本中没有得到修复(根据 bug 票证)。是这样吗?
  • 是的,1.4.0 也需要这个补丁。为我工作,在我的情况下唯一的区别是logstash没有打包在jar中,所以我只是将所有filewatch *.rb文件替换为补丁文件(添加了一个新文件,winhelper.rb),并且必须放入'java'将文件夹放入'lib',这样'require "java/JRubyFileExtension.jar"' 行就可以工作了。
  • 在 1.4.2 中仍未修复。我正在认真考虑用 Java 分叉整个事情,这件事充满了错误。 jlogstash :-)
  • @TonyBenBrahim 我没有看到 Logstash 1.4.2 的重复数据。 win8 x64,logstash 作为服务或命令行,start_position => "beginning",未指定 createdb 路径。当我停止/启动logstash时,它不会重新加载相同的数据
  • 此错误的最后状态:github.com/logstash-plugins/logstash-input-file/issues/2。总结:第三个库已经修复(filewatch v0.6.1 发布),但 LogStash 1.4 仍然是 v0.5。等待 logStash 发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多