我正在尝试配置 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 模式来从上述格式中提取某些字段。我首先在上面的消息上测试我的正则表达式,正则表达式是
^(?:[^:]*\:){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"
]
]
}