Splunk中搜索键被双引号包裹的正则表达式求助
Splunk查询修正方案
问题分析
你要提取的日志是JSON格式片段,之前的rex语句存在两个核心问题:
- 第一个正则未考虑字段可能出现在行尾(无后续逗号)的情况,导致部分日志匹配失败
- 第二个正则的捕获组语法错误,正确格式应为
(?<字段名>匹配规则),而非把字段名放在括号外
推荐方案:使用spath解析JSON(更可靠)
Splunk自带spath命令可直接解析JSON字段,无需编写复杂正则,适配各种JSON格式场景:
| spath input=_raw extract=requestUrlLength,requestBodyLength | stats count by requestUrlLength,requestBodyLength | sort -count
该命令会自动从_raw字段中提取指定的JSON键值对,不管字段在开头、中间还是结尾都能正常捕获。
备选方案:修正rex正则表达式
如果必须使用正则,可调整为以下语句(兼容字段在行尾无逗号的场景):
| rex field=_raw "\"requestUrlLength\":\s*(?<requestUrlLength>\d+)(?:,|$)" | rex field=_raw "\"requestBodyLength\":\s*(?<requestBodyLength>\d+)(?:,|$)" | stats count by requestUrlLength,requestBodyLength | sort -count
\s*:匹配任意数量的空格(包括0个),避免因空格数量不一致导致匹配失败(?:,|$):非捕获组,匹配逗号或行尾,确保字段在末尾时也能被捕获
内容的提问来源于stack exchange,提问作者mandar
相关产品推荐
相关产品推荐

