Grok:如何匹配到第一个 space(IIS 日志)

Grok: how to match until first space (IIS Log)

我想解析 IIS 日志。 可能的输入之一如下所示

2017-10-01 00:00:01 W3SVC2 xx xx.xx.xx.xx GET /CMSPages/PortalTemplate.aspx searchtext=excel-template-aa-xx-xx&xx=%2xx%2xx.com%yyyyy 443 - yy.yy.yy.yy HTTP/1.1 Mozilla/5.0+(compatible;+bingbot/2.0;++http://www.bing.com/bingbot.htm) - - www.yyyyy.com 410 0 64 0 335 32791

searchtext 之前我可以解析上面的输入,但我不知道如何获取搜索文本?

%{TIMESTAMP_ISO8601:log_timestamp}%{SPACE}%{WORD:machine}%{SPACE}%{WORD:ServerName}%{SPACE}%{IPV4:serverIP}%{SPACE}%{WORD:method}%{SPACE}%{URIPATH:uriStem}%{SPACE}%{WORD:searchTextWord}

有什么方法可以检查 searchtext 是否存在,然后获取以下文本(直到第一个 space)作为搜索文本。

代码

See regex in use here

\bsearchtext=\S+

对于 Gork,将其设为可选:

(%{searchtext=\S+})?

以下比赛结果:

searchtext=excel-template-aa-xx-xx&xx=%2xx%2xx.com%yyyyy


说明

  • \b 将位置断言为单词边界
  • searchtext字面匹配
  • \S+ 匹配任何非空白字符一次或多次