【问题标题】:input file start_position => "beginning" doesn't work even after deleting .sincedb files输入文件 start_position => "beginning" 即使在删除 .sincedb 文件后也不起作用
【发布时间】:2017-02-18 15:28:19
【问题描述】:

版本:ElasticSearch-5.2.1/Logstash-5.2.1/Kibana-5.2.1 操作系统:Windows 2008

我刚刚开始研究 ELK Stack,并且在加载数据时遇到了一些问题 我有以下 .json 代码

input { 
   file {  
      path => "D:\server.log" 
      start_position => beginning 
    } 
} 
filter { 
   grok { 
     match => ["message","\[%{TIMESTAMP_ISO8601:timestamp}\] %{GREEDYDATA:log_message}"] 
   } 
} 
output { 
   elasticsearch { 
     hosts => "localhost:9200" 
    } 
 }

我已经删除了 .sincedb 文件

然而,当我在 Kibana 中提取日志信息时,我只能看到从我第一次解析开始的数据。我的日志文件中有 2-3 个月的数据。

【问题讨论】:

  • 你能分享你的日志文件吗?
  • @SahilGulati 我是这方面的新手。如何生成日志?我找不到他们已经存在的位置...

标签: logstash elastic-stack


【解决方案1】:

在我的例子中,当你输入systemctl restart logstash时,即使你已经删除了sincedb文件,logstash在进程关闭之前保存一个新的sincedb文件然后关闭。

如果你想真正从头开始读取文件,你应该:

  1. 停止logstash服务:sudo systemctl stop logstash
  2. /var/lib/logstash/plugins/inputs/file/usr/share/logstash/data/plugins/input/file目录中删除sincedb文件
  3. 启动logstash服务:sudo systemctl start logstash

【讨论】:

    【解决方案2】:

    如果你有这样的 文件输入,你会错过ignore older,这实际上会阻止你重新阅读旧文件,而且你错过了@987654322 @财产我相信。您可以通过@Steve Shipway 查看此答案,以更好地解释您的文件输入中包含这两个属性。

    所以你的input 可能看起来像这样:

    input { 
       file {  
          path => "D:\server.log" 
          start_position => "beginning" <-- you've missed out the quotes here
          ignore_older => 0 
          sincedb_path => "/dev/null" 
        } 
    }
    

    注意sincedb_path 设置为/dev/null 会使文件每次都从头开始读取,这根本不是一个好的解决方案。但是我认为删除 .sincedb 文件应该可行。如果你真的想从你离开的地方继续,你真的需要 .sincedb 文件来保存最后更新的最后一个位置。您可以查看this 以获得详细说明。

    希望这会有所帮助!

    【讨论】:

    • 嗨@Darth_Vader 我阅读了你提到的链接并尝试了输入文件但不幸的是它仍然从我第一次开始使用ELK堆栈而不是从日志文件的开头读取我第一次使用 ELK Stack 是 2 月 18 日 第一个日志条目是 1 月 31 日 请帮助谢谢 P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多