我正在尝试配置logstash来管理我的各种日志源,其中一个是Mongrel2。Mongrel2使用的格式是tnetstring,其中日志消息将采用以下形式
86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]我想编写我自己的grok模式,从上面的格式中提取某些字段。我首先在上面的消息这里上测试我的regex,regex是
^(?:[^:]*\:){2}([^,]*)这与localhost相匹配。当我在表单中使用与grok模式相同的正则表达式时
TEST ^(?:[^:]*\:){2}([^,]*)
MONGREL %{TEST:test}配置logstash
filter {
grok {
match => [ "message", "%{MONGREL}" ]
}
}相同的正则表达式将导致匹配的86:9:localhost。我不知道我哪里出了问题?是我用来测试的regex引擎是基于Python,而grok过滤器regex是基于Onigurama吗?
当前使用以下输入在格氏调试中测试它
86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]和下面的模式
(?<hostname>^(?:[^:]*\:){2}([^,]*))结果是
{
"hostname": [
[
"86:9:localhost"
]
]
}在我想要的地方
{
"hostname": [
[
"localhost"
]
]
}发布于 2014-09-24 13:59:31
这样的模式将提取主机名:
^(\d+)?:(\d+)?:(?<hostname>[^,]+),或者以与您已经写过的方式类似的方式编写它:
^(?:[^:]*\:){2}(?<hostname>[^,]*)捕获名称需要在要捕获的括号内.你的模式捕捉到了这点之前的一切。
发布于 2014-09-24 13:23:48
让http://grokdebug.herokuapp.com/试一试。这是最好的方法来调试不导致脱发的grok模式。
https://stackoverflow.com/questions/26013516
复制相似问题