我正在尝试配置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模式,从上面的格式中提取某些字段。我在this question上得到了帮助,试图提取主机。所以如果在grok-patterns中我定义
M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)然后在logstash中指定
filter {
grok {
match => [ "message", "%{M2HOST}" ]
}
}它如预期的那样工作。我现在遇到的问题是,我想要指定多个模式,例如M2HOST、M2ADDR等。我尝试在同一个grok模式文件中定义其他模式。
M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)
M2ADDR ^(?:[^:]*\:){3}(?<address>[^,]*)以及更改logstash conf
filter {
grok {
match => [ "message", "%{M2HOST} %{M2ADDR}" ]
}
}但是现在我只得到了错误_grokparsefailure。
发布于 2014-09-24 15:07:31
对于来自其他问题的示例输入,以及对值名称的一些猜测,完全匹配如下:
(?:[^:]*:){2}(?<hostname>[^,]*)[^:]*:(?<address>[^,]*)[^:]*:(?<pid>[^#]*)[^:]*:(?<time>[^#]*)[^:]*:(?<method>[^,]*)[^:]*:(?<query>[^,]*)[^:]*:(?<protocol>[^,]*)[^:]*:(?<code>[^#]*)[^:]*:(?<bytes>[^#]*).*
制作:
{
"hostname": [
[
"localhost"
]
],
"address": [
[
"192.168.33.1"
]
],
"pid": [
[
"57089"
]
],
"time": [
[
"1411396297"
]
],
"method": [
[
"GET"
]
],
"query": [
[
"/"
]
],
"protocol": [
[
"HTTP/1.1"
]
],
"code": [
[
"200"
]
],
"bytes": [
[
"145978"
]
]
}https://stackoverflow.com/questions/26019768
复制相似问题