如何从日志的请求行中过滤一个值

How to filter a value from the request line of log

我有以下日志,我只需要从中过滤 salePoint

"GET /supero/global/grocery/fullgrainMenu.jsp?id=cat12216&salePoint=0012FT&locale=es_ES&version=0510091431 HTTP/1.1"

我尝试了 \"(%{NOTSPACE:request}(?:&salePoint=%{DATA:salePoint})?)\" 但它给出了错误的输出

"salePoint": "0012FT&locale=es_ES&version=0510091431 HTTP/1.1"

预期输出为"salePoint": "0012FT

谢谢

由于问题指定的目的是仅查找和过滤 salePoint,您可以使用以下 grok 模式:

(%{GREEDYDATA:before})?(salePoint=%{WORD:salePoint})(%{GREEDYDATA:after})?

解释

  1. before : 它在找到 salePoint 条目之前存储可选数据。
  2. salePoint :这存储了 salePoint 值
  3. after : 存储salePoint之后的可选数据。

与往常一样,如果您需要过滤掉更多字段,您可以使用向模式添加更多内容。


示例:

"GET /supero/global/grocery/fullgrainMenu.jsp?id=cat12216&salePoint=0012FT&locale=es_ES&version=0510091431 HTTP/1.1"

以上模式输出为:

{
  "before": [
    [
      ""GET /supero/global/grocery/fullgrainMenu.jsp?id=cat12216&"
    ]
  ],
  "salePoint": [
    [
      "0012FT"
    ]
  ],
  "after": [
    [
      "&locale=es_ES&version=0510091431 HTTP/1.1""
    ]
  ]
}

请使用 Grok Debugger 来尝试这个模式。