繁体   English   中英

Grok模式将URIPATH与可选URIPARAM匹配

[英]Grok pattern to match URIPATH with optional URIPARAM

我想用Grok模式过滤掉这个

172.20.20.88 - - [10/Nov/2018:23:49:31 +0700] "GET /id/profile.pl?user=285&device=Bg3tlX HTTP/1.1" 502 852 "-" "Go-http-client/2.0" "0.009"

我正在使用COMMONAPACHELOG

%{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)

我已经尝试过%{URIPATH:request}%{URIPARAM:request} 请求的结果仍然是/id/profile.pl?user=285&device=Bg3tlX 我的期望是/id/profile.pl

我的参考是https://github.com/hpcugent/logstash-patterns/blob/master/files/grok-patterns

您的%{NOTSPACE:request}匹配HTTP/1.1" 502 85...之前的1个或多个非空白字符,因为NOTSPACE模式为\\S+ 。因此,它匹配整个/id/profile.pl?user=285&device=Bg3tlX子字符串。

您不能仅使用URIPATHURIPARAM ,因为您仍然需要匹配其余的输入。 您必须同时使用两者,但是通过将URIPATH封装在一个可选的非捕获组(?:...)? ,使URIPARAM成为URIPARAM之后的可选项(?:...)?

因此,将%{NOTSPACE:request}替换为

%{URIPATH:request}(?:%{URIPARAM:requestparam})?
                  ^^^                        ^^

https://grokdebug.herokuapp.com/上的演示:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM