我正在使用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?
答案 0 :(得分:0)
我假设您试图从路径中删除GF0部分?
如果是这种情况并且你知道路径将始终采用相同的格式,那么你可以在grok中使用这样的东西:
filter {
grok {
match => [ 'path', '(?i)/Logs/%{WORD:Domain}/' ]
}
}
不像正则表达式那样优雅,但它应该有用。