[英]logstash fails to match a grok filter
我被卡住了。 我不明白为什么grok在logstash下无法匹配简单的正则表达式。 grok可以作为独立的东西很好地工作。 对我有用的唯一模式是“。*”,其他所有内容都会失败。
$ cat ./sample2-logstash.conf
input {
stdin {}
}
filter {
grok {
match => [ "message1", "foo.*" ]
add_tag => [ "this_is_foo" ]
tag_on_failure => [ "STUPID_LOGSTASH" ]
}
}
output {
stdout { codec => json_lines }
}
这是输出:
$ echo "foo" |~/bin/logstash-1.4.0/bin/logstash -f ./sample2-logstash.conf
{"message":"foo","@version":"1","@timestamp":"2014-05-07T00:32:49.915Z","host":"serega-sv","tags":["STUPID_LOGSTASH"]}
好像我错过了用logstash做某事的原因,因为香草味很好用:
$ cat grok.conf
program {
file "./sample.log"
match {
pattern: "foo.*"
reaction: "LINE MATCHED! %{@LINE}"
}
}
Plain grok的输出:
$ echo "foo" > ./sample.log; grok -f grok.conf
LINE MATCHED! foo
谢谢!
您的配置有错误。 grok匹配字段是message
,而不是message1
。
然后,在logstash grok 页面上,有一个示例演示如何使用grok。 我想你误会了。 例如,如果您的日志是
55.3.244.1 GET /index.html 15824 0.043
Logstash的grok模式是
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
对于%{IP:client}
,第一个参数(IP)是grok模式,第二个参数(client)是您要放置此消息的字段。
@本林说的一切。 该文档的下一部分显示了如何将语义应用于通用正则表达式语法:
filter {
grok {
match => [ "message",
"^(?<ip>\S+) (?<verb>\S+) (?<request>\S+) (?<bytes>\S+) (?<delay>\S+)$"
]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.