文件输入不适用于logstash

时间:2014-06-10 14:52:02

标签: file-io output logstash grok

当我使用stdin作为输入流时,我得到了正确的输出。但每当我使用该文件作为输入时,输出会在以下消息后冻结。

"Using milestone 2 input plugin 'file'. This plugin should be stable but if you see strange behavior, please let us know."

这是我的配置文件。

input {
  file {
    path => ["c:/users/a/b/c/logstash-1.4.1/bin/logs/logfile.log"]
    start_position => beginning
  }
}

filter {
    grok {
                patterns_dir => "./patterns"
                break_on_match => "false"
                match => ["message", "%{MY_DATE:my_date}"]
        }
    grok {
                patterns_dir => "./patterns"
                break_on_match => "false"
                match => ["message", "%{DATE:date}"]
        }
    grok {
                patterns_dir => "./patterns"
                break_on_match => "false"
                match => ["message", "%{TIME:time}"]
        }
    grok {
                patterns_dir => "./patterns"
                break_on_match => "false"
                match => ["message", "%{LOG_LEVEL:log_level}"]
        }
    grok {
                patterns_dir => "./patterns"
                break_on_match => "false"
                match => ["message", "%{SERVER:server}"]
        }
    grok {
                patterns_dir => "./patterns"
                break_on_match => "false"
                match => ["message", "%{CLASS_NAME:class_name}"]
        }

}

output {
  stdout { codec => rubydebug }
  elasticsearch { host => localhost }
 }

我的文件路径格式是否错误?

3 个答案:

答案 0 :(得分:5)

您是否将新日志写入日志文件?

start_position选项仅修改a file is new and not seen before的“第一次联系”情况。这是因为Logstash将为每个文件保存sincedb以跟踪受监视日志文件的当前位置。因此,下次重新启动Logstash时,Logstash将根据sincedb记录开始监视文件,start_position将不起作用。

因此,如果要导入旧日志,则必须先删除所有.sincedb文件,然后再启动logstash并添加start_position选项。

答案 1 :(得分:4)

这里有两个问题:

  1. 用于跟踪文件中读取位置的sincedb进程是 目前在Windows中被打破: https://logstash.jira.com/browse/LOGSTASH-429。有补丁但是 其他人已经证实,从版本1.4.1
  2. 开始,这仍然没有被破坏
  3. 我认为你需要一开始就引用 - 根据 记录它的“开始”或“结束”,默认为“结束” START_POSITION。所以我怀疑它只是忽略了你的指令。
  4.   

    START_POSITION

    Value can be any of: "beginning", "end"
    Default value is "end"
    
         

    选择Logstash最初开始读取文件的位置:开头   或者最后。默认行为处理文件,如实时流和   因此从最后开始。如果您要导入旧数据,请进行设置   这到'开始'

    组合可能会导致您始终在文件末尾开始。

    我现在无法在Windows下测试(无法在工作中访问),但想要把它告诉你。

答案 2 :(得分:0)

我在mac上使用logstash-1.5.4。我遇到了类似的问题,并通过在conf文件中显式设置sincedb_path来解决它。

sincedb_path => "your sincedb path"

我不确定这个解决方案是否会解决您的问题,因为我们使用的是不同版本的logstash和不同的操作系统。

您可以使用调试模式运行命令以查看发生的情况。

./bin/logstash -f my_logstash.conf --debug