如何在Splunk中提取日志的HTTP statusCode并统计其出现次数?
解决Splunk提取statusCode并统计次数的问题
错误原因
你当前的rex命令报错,是因为正则表达式中的双引号未转义,Splunk搜索解析器会将未转义的双引号视为命令结束标记,从而引发语法错误。
正确查询语句
要正确提取statusCode并统计各状态码出现次数,使用以下完整查询:
index=main env=nonprod sourcetype="*sample-service*" "response" | rex field=_raw "\"statusCode\":(?<statusCode>\d+)" | stats count by statusCode
语句说明
rex field=_raw "\"statusCode\":(?<statusCode>\d+)":指定从原始日志(_raw字段)提取内容,转义双引号避免解析错误;通过(?<statusCode>\d+)定义提取后的字段名为statusCode,匹配1个及以上数字(\d+比[\d]*更精准,可避免匹配空值)。stats count by statusCode:按statusCode分组统计出现次数,直接生成你需要的表格格式结果。
额外优化方案
从样本日志看,Response:后是JSON格式内容,也可以用spath命令直接解析JSON,比正则表达式更可靠:
index=main env=nonprod sourcetype="*sample-service*" "response" | rex "Response:(?<response_json>{.*})" | spath input=response_json path=statusCode as statusCode | stats count by statusCode
先通过
rex提取Response:后的完整JSON内容,再用spath解析出statusCode字段,适合日志未被Splunk自动识别为JSON格式的场景。
内容的提问来源于stack exchange,提问作者schanjr
相关产品推荐
相关产品推荐

