regex - NginX Grok 模式 - 处理反斜杠或括号?

标签 regex nginx logstash grok

我正在尝试排除 logstash 盒子上的所有 _grokparsefailure。

似乎唯一的两个罪魁祸首是 NGINX 日志,它们破坏了我的 NGINXACCESS 模式:

 %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

以下是标记为 grok 失败的消息结果的两个示例。

172.31.0.2 - - [30/Jul/2015:15:10:49 +1000] "GET /web-app/[EXPAND] HTTP/1.1" 404 6432 "-" "Amazon CloudFront" "web-app.mydomain.com" "127.0.0.1" 

172.31.0.2 - - [30/Jul/2015:14:13:52 +1000] "GET /web-app/show?wid=5540cfbc3asdf034ct=&domain=apptest.mydomain.com&ttl=\x5C%2230\x5C%22&filter_id=14026&unique_id=1 HTTP/1.1" 200 11400 "http://apptest.mydomain.com/"; "Amazon CloudFront" "apptest.mydomain.com" "127.0.0.1" 

通过 grok 调试器,失败与第一个示例中的 %{URIPATHPARAM:request} 击中 [EXPAND] 的括号和第二个示例中的\x5C%2230\x5C%22 的反斜杠有关。 IE。如果我从输入中删除 [、] 或\,则 grok 匹配良好。

我似乎无法弄清楚如何让 URIPATHPARAM grok 过滤器处理那些括号和反斜杠的示例。有什么想法吗?

最佳答案

一般来说,我建议使用 @Alain 建议的另一种模式。如果您仍然想用更精确的模式来解决这个问题,您可以使用像这样的 grok 字段:

(?<request>(?:/[A-Za-z0-9$.+!*'(){}\[\]\\,~:;=&@#?%_\-]*)+)

(这是 URIPATH 和 URIPARAM 的组合,带有反斜杠和方括号。)

整个 grok 模式看起来像这样:

%{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} (?<request>(?:/[A-Za-z0-9$.+!*'(){}\[\]\\,~:;=&@#?%_\-]*)+) HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

这适用于您给出的两个示例。

但是,您的输入还存在另一个问题。第二个的引用者后面有一个分号 ( "http://apptest.mydomain.com/"; ),而第一个没有。你必须处理好这个问题。

因此您需要该模式有一个可选的分号 (?:;|) :

%{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer})(?:;|) %{QS:agent}

关于regex - NginX Grok 模式 - 处理反斜杠或括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691841/

相关文章:

没有重定向的 NGINX 自定义 404 页面

elasticsearch - 从 logstash 中的 AWS S3 输入路径中提取字段

javascript - 使用正则表达式删除所有 HTML <button> 元素

javascript - 获取所有以@字符开头的单词

JavaScript(咕噜声): regular expressions for path to a file

django - 如何使用 Gunicorn 查看 Django 错误的详细信息?

django - 无效的 HTTP_HOST header : 'localhost:90,localhost:90' . 根据 RFC 1034/1035 提供的域名无效

elasticsearch - Logstash 7.x服务无法在具有OpenJDK 11 JDK作为服务的Ubuntu 18.04 LTS上启动,但否则会启动

java - JSON 在 Logstash 中转义

regex - 如何使用正则表达式重命名Powershell中的文件?