如何从日志的请求行中过滤一个值
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})?
解释:
- before : 它在找到 salePoint 条目之前存储可选数据。
- salePoint :这存储了 salePoint 值
- 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 来尝试这个模式。
我有以下日志,我只需要从中过滤 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})?
解释:
- before : 它在找到 salePoint 条目之前存储可选数据。
- salePoint :这存储了 salePoint 值
- 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 来尝试这个模式。