logstash模式与预期方式不匹配

时间:2015-03-20 16:21:39

标签: logstash logstash-grok

我正在使用logstash从几个glassfish域收集我的server.log。不幸的是,日志中没有域名。但路径名有。 所以我试图获取文件名的一部分以将其与GF域匹配。问题是,我定义的模式不匹配正确的部分。

这里是logstash.conf


file {
    type => "GlassFish_Server"
    sincedb_path => "D:/logstash/.sincedb_GF"
    #start_position => beginning
    path => "D:/logdir/GlassFish/Logs/GF0/server.log"

}
grok {
    patterns_dir => "./patterns"
    match => 
    [ 'path', '%{DOMAIN:Domain}'] 
}

我创建了一个自定义模式文件并用正则表达式

填充它

我的自定义模式文件


DOMAIN  (?:[a-zA-Z0-9_-]+[\/]){3}([a-zA-Z0-9_-]+)

结果是:


"Domain" => "logdir/GlassFish/Logs/GF0"

我已经在https://www.regex101.com/上测试了我的RegExp并且工作正常。 使用http://grokdebug.herokuapp.com/验证模式会带来相同的“不需要的”结果。

我做错了什么?是否有人想要只获得域名“GF0”,例如修改我的模式或在logstash.conf中使用mutate?

1 个答案:

答案 0 :(得分:0)

我假设您试图从路径中删除GF0部分?

如果是这种情况并且你知道路径将始终采用相同的格式,那么你可以在grok中使用这样的东西:

filter {
    grok {
        match => [ 'path', '(?i)/Logs/%{WORD:Domain}/' ]
    }
}

不像正则表达式那样优雅,但它应该有用。