regex 从Splunk中的日志结果中提取http状态码

y3bcpkx1  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(119)

我使用以下Splunk查询来获取所有响应内容及其对应的响应状态代码。
index=main env=nonprod sourcetype="*sample-service*" "response"
上面Splunk查询的响应日志示例如下所示:
||INFO||||Response:{"requestId:"369018b6-0fd4-11ee-be56-0242ac120002","headers":{"Content-Type":["application/json"]},"url":"https://sample-service.abcCompany.com","statusCode":200,"method":"POST","timeTaken":98,"body":{"..":"..","...":"..."}}
我尝试将statusCode提取为一个字段,以便可以从服务响应中看到每个http statusCode的出现次数。
下面是我尝试提取statusCode的正则表达式:"statusCode":([\d]*)
我尝试在Splunk查询中使用上面的正则表达式:index=main env=nonprod sourcetype="*sample-service*" "response" | rex "statusCode":([\d]*)
但在搜索解析器中出现错误:Error in 'SearchParser': Missing a search command before '\'.不知道如何实现这一点来提取statusCode字段,以便我可以可视化每个statusCode的出现次数。
我的预期结果示例是:
| 状态代码|计数|
| - -----|- -----|
| 两百|五千|
| 四百零四|4|

vaqhlq81

vaqhlq811#

尽管正则表达式"statusCode":([\d]*)捕获statusCode是正确的,但我认为如果为"放置转义字符并指定一个命名组,它也会起作用。
因此,正则表达式将是:\"statusCode\":(?<statusCode>[\d]*)
所以,最终的Splunk查询看起来像这样:

index=main env=nonprod sourcetype="*sample-service*" "response" 
| rex "\"statusCode\":(?<statusCode>[\d]*)" 
| stats count by statusCode

正则表达式匹配和命名捕获组的演示:https://regex101.com/r/UWdib7/1

相关问题