logstash-grok - 如何从日志的请求行中过滤值
问题描述
我有以下日志,我只需要从中过滤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来玩转该模式。
推荐阅读
- phpmailer - PHPMailer 不发送邮件
- javascript - 功能:如果有中断,返回
- jquery - 在 jquery 中填充值
- angular - 在循环 asyc 内请求数据时启动无限请求
- arrays - 从数组中复杂删除组内的重复元素
- javascript - 使用指令将禁用设置为角度材料组件
- python - 使标量python函数接受列表和数组
- neo4j - 将 .NET 客户端连接到 Neo4j Desktop 版本 4 时出现问题
- java - 将 sql 自定义例程与 jooq 一起使用时数据类型不兼容
- android - 检索发送到用户手机的 SMS 代码 - Firebase SMS 身份验证