我正在尝试配置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模式以从上面的格式中提取某些字段 . 我开始测试我的正则表达式上面的消息here,正则表达式是
^(?:[^:]*\:){2}([^,]*)
这符合 localhost
. 当我在表单中使用相同的正则表达式作为grok模式时
TEST ^(?:[^:]*\:){2}([^,]*)
MONGREL %{TEST:test}
并使用配置logstash
filter {
grok {
match => [ "message", "%{MONGREL}" ]
}
}
相同的正则表达式导致匹配 86:9:localhost
. 我无法弄清楚我哪里出错了?是我用来测试的正则表达式引擎是基于Python但是grok过滤器正则表达式基于Onigurama?
目前使用以下输入在grokdebug中对其进行测试
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"
]
]
}
2 回答
像这样的模式将提取主机名:
或者以与您编写的方式类似的方式编写它:
捕获名称需要位于要捕获的括号内...您的模式正在捕获到此为止的所有内容 .
试试http://grokdebug.herokuapp.com/ . 这是调试不会导致脱发的grok模式的最佳方法 .